我已经配置了一个执行GCF的云endpoint。当云运行服务允许allusers
调用API时,一切都很好。
Chrome JS控制台显示以下错误消息:
CORS策略阻止了从'https://.run.app/do-this&key='from origin'http://0.0.0.0:8080'获取访问:对飞行前请求的响应未通过访问控制检查:请求的资源上没有'access-control-allog-origin'标头。如果一个不透明的响应满足您的需要,请将请求的模式设置为“no-cors”,以便在禁用CORS的情况下获取资源。
这是我在浏览器中运行的JS代码:
let options: RequestInit = {
headers: {
'Authorization': `Bearer ${token}`,
},
}
const result = await fetch(fetchURL, options);
当用相同的令牌运行curl时,我得到了预期的响应
curl -H "Authorization: Bearer ${token}" 'https://<my-api>.run.app/do-this&key=<key>'
为了完整起见,这里还有endpointyaml
swagger: '2.0'
info:
title: My first widget
description: This is a great widget
version: 1.0.0
host: <my-api>.run.app
schemes:
- https
produces:
- application/json
paths:
/do-this:
get:
summary: Do-this
operationId: doit
x-google-backend:
address: https://<project-id>.cloudfunctions.net/do-that
responses:
'200':
description: A successful response.
schema:
type: string
'403':
description: An error occurred
schema:
type: string
security:
- api_key: []
securityDefinitions:
# This section configures basic authentication with an API key.
api_key:
type: "apiKey"
name: "key"
in: "query"
gcloud run services update <my-api> --set-env-vars="^|^ENDPOINTS_SERVICE_NAME=<my-api>.run.app|ESP_ARGS=--rollout_strategy=managed,--cors_preset=basic" --project=<project-id> --platform=managed --region=europe-west1
Google文档提到应该可以从GCP外部调用
如果您从无法访问计算元数据的计算实例(例如您自己的服务器)调用服务,则必须手动生成适当的令牌:
自签名一个服务帐户JWT,并将target_adiudies声明设置为接收服务的URL。将自签名的JWT交换为谷歌签名的ID令牌,该ID令牌应该将aud声明设置为上述URL。在对服务的请求中的Authorization:Bearer ID_TOKEN标头中包括ID令牌。尽管识别代理还不支持云运行(完全托管),但您可以查看识别代理示例代码,了解上面步骤的代码示例。
最终用户部分:提到CORS
cors没有为云endpoint激活。按以下方式更新openAPI规范
swagger: '2.0'
info:
title: My first widget
description: This is a great widget
version: 1.0.0
host: <my-api>.run.app
x-google-endpoints:
- name: <my-api>.run.app
allowCors: True
...
...
...
或者设置no-cors
check in您的呼叫,如错误消息所述。
这是服务到服务身份验证中概述的规则的一个例外吗?该规则规定需要设置为接收服务的url(例如https://xxxxx.run.app)。和是一回事吗? 最后,除了使用googlecloudsdk(即imaging不存在)之外,是否还有其他方法使用用户帐户而不是服务帐户进行身份验证?
这是一个很好的OAuth2用例吗?还是OAuth2仅用于授予第三方应用程序对用户数据的访问权限? 如果OAuth2不是可行的方法:如何将用户令牌安全地传递给浏览器,并防止中间人攻击?用户令牌应该在一定时间后过期吗?
问题内容: 我想在Jenkins管道中使用,因此必须首先使用Google Service帐户进行身份验证。我正在使用https://wiki.jenkins.io/display/JENKINS/Google+OAuth+Plugin,其中包含我的私钥凭据。我一直坚持将凭据加载到管道中: 我也尝试过from档案,但是没有运气。 日志显示: 问题答案: 您需要将您的“服务帐户” JSON文件作为 机
将配置服务器用户名和密码存储为环境变量(在客户端和服务器中)还是使用密钥库更好?密钥库密码无论如何都存储为环境变量,那么为什么实际使用密钥库呢?还是有更好的方法在SpringCloudConfig服务器中实现身份验证?
我的团队目前正在开发一个应用程序,使用Admin SDK在GCP中列出公司的域用户,用于入职和非入职目的。 我们使用一个服务帐户来完成这个任务,并且在Google Admin's advanced settings中添加了 作用域。管理SDK API被激活,我们可以在凭据区域中看到服务帐户。 当我们使用参数 和 调用https://www.googleapis.com/admin/director