代码之家  ›  专栏  ›  技术社区  ›  Victor

云运行-经过身份验证的请求在自定义(子)域上不起作用

  •  1
  • Victor  · 技术社区  · 1 年前

    我有一个云运行服务,它打开了经过身份验证的请求。我使用负载平衡创建了一个域映射,将子域指向容器。

    我一直在向直接容器url发送请求,没有任何问题。

    import os
    from google.oauth2 import service_account
    import google.auth.transport.requests
    import google.oauth2.id_token
    import requests
    
    os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'service-account.json'
    audience = "https://app-id.a.run.app"
    
    request = google.auth.transport.requests.Request()
    id_token = google.oauth2.id_token.fetch_id_token(request, audience)
    
    requests.post(
        audience + "/job",
        headers={'Authorization': f"Bearer {id_token}"},
    )
    

    我的服务帐户具有Cloud Run Invoker权限,请求可以很好地通过身份验证。

    域映射已配置到正确的Cloud Run服务&区域。 enter image description here

    为什么我改变了 audience 到我的子域并发送请求,我没有通过身份验证?

    编辑:子域正确指向容器,并且正在记录请求。

    1 回复  |  直到 1 年前
        1
  •  1
  •   guillaume blaquiere    1 年前

    默认情况下,Cloud Run只接受默认的Cloud Run URL(*.Run.app)作为受众。

    当您使用自定义域或负载均衡器时,客户端添加奇怪的受众而不是真实的域名是没有意义的。

    这就是为什么 Cloud Run custom audience 功能已经发布!