Google cloud platform 如何在openapi yml文件中添加服务帐户安全定义

Google cloud platform 如何在openapi yml文件中添加服务帐户安全定义,google-cloud-platform,openid-connect,google-authentication,openapi,google-cloud-scheduler,Google Cloud Platform,Openid Connect,Google Authentication,Openapi,Google Cloud Scheduler,我想在API中添加一个安全定义,以便在google cloud scheduler中运行它(使用OIDC令牌和服务帐户) "/common/test": post: description: "test" operationId: "test" responses: 200: description: "Success" 400: description: "Fail"

我想在API中添加一个安全定义,以便在google cloud scheduler中运行它(使用OIDC令牌和服务帐户)

"/common/test":
    post:
      description: "test"
      operationId: "test"
      responses:
        200:
          description: "Success"
        400:
          description: "Fail"
      security:
        - service_account: []  

securityDefinitions:
      service_account:
        authorizationUrl: ""
        flow: "implicit"
        type: "oauth2"
        x-google-issuer: "xx@example.iam.gserviceaccount.com"
        x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/xx@example.iam.gserviceaccount.com"
但当我通过云调度器(使用OIDC令牌和服务帐户)调用此API时,它失败了(xx@example.iam.gserviceaccount.com)). 日志视图显示未经授权的401。如何修复此错误

{httpRequest: {status: 401} insertId: "1r9kx9lf2jy71o" jsonPayload: { @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished" jobName: "projects/project-xxx/locations/us-central1/jobs/test" status: "UNAUTHENTICATED" targetType: "HTTP" url: "https://project-xxx.appspot.com/common/test/"} logName: "projects/project-xxx/logs/cloudscheduler.googleapis.com%2Fexecutions" receiveTimestamp: "2020-01-06T06:30:01.000238320Z" resource: { labels: {…} type: "cloud_scheduler_job" }severity: "ERROR" timestamp: "2020-01-06T06:30:01.000238320Z"}

来自云调度程序的OIDC(OpenConnectiond)令牌与Oauth2授权不兼容

Cloud Scheduler中的OIDC(OpenConnectiond)令牌与Oauth2授权不兼容

在过去,我尝试过类似的云函数,而认证部分非常模糊。我建议您按照以下方式进行调试:1)捕获调度程序发送的OIDC(使用ngrock或以某种方式记录它)2)尝试按照jwt创建步骤使用postman/curl执行经过身份验证的调用:-我怀疑auth方法可能不兼容。在此之前,请确保您也正确部署了openid规范。您的服务帐户是否具有执行操作的适当角色?确保它具有云调度程序代理角色和云函数调用程序角色,因为错误似乎是由权限引起的。除此之外,获得完整的状态响应将有助于提供更多信息advice@rsalinas我在帖子中添加了strackdriver日志。您正在使用ESP吗?如果是这样,请求可能会被ESP拒绝。您可以通过在GKE部署yaml文件中添加ESP启动标志--enable_debug来启用调试。看看ESP容器中的/var/log/nginx/error.log过去,我尝试过类似的云函数,验证部分非常模糊。我建议您按照以下方式进行调试:1)捕获调度程序发送的OIDC(使用ngrock或以某种方式记录它)2)尝试按照jwt创建步骤使用postman/curl执行经过身份验证的调用:-我怀疑auth方法可能不兼容。在此之前,请确保您也正确部署了openid规范。您的服务帐户是否具有执行操作的适当角色?确保它具有云调度程序代理角色和云函数调用程序角色,因为错误似乎是由权限引起的。除此之外,获得完整的状态响应将有助于提供更多信息advice@rsalinas我在帖子中添加了strackdriver日志。您正在使用ESP吗?如果是这样,请求可能会被ESP拒绝。您可以通过在GKE部署yaml文件中添加ESP启动标志--enable_debug来启用调试。请看ESP容器中的/var/log/nginx/error.log即使云端点仅支持OpenAPI v2。但其ESP身份验证功能不指定“x-google-jwks_uri”字段,因此支持OIDC。即使是云端点也只支持OpenAPI v2。但其ESP身份验证功能不指定“x-google-jwks_uri”字段,因此支持OIDC。