oauth - 401 Unauthorized - Chrome 应用 Oauth 调用 Google Cloud Functions
问题描述
我正在关注这个:https ://developer.chrome.com/apps/tut_oauth
但它不起作用。当我调用 Cloud Function 时,我收到 401 错误。Authorization: Bearer "access-token" 被添加到请求头中。尽管此处的另一个问题[1] 指出应该使用 ID_TOKEN。我通过 curl 尝试过但有相同的 401 错误。
chrome.identity.getAuthToken({interactive: true}, function(token) {
var dat = {
"user_email":email_id,
"user_id":user_id
};
$.ajax({
type: "POST",
data:dat,
dataType: 'json',
url:str,
contentType: "application/json",
error: function (xhr, status, error) {
console.log(xhr)
}, success: function (data, status, xhr) {
console.log('Success!' +data + status);
},
headers:{
'x-goog-project-id': 'xxxxxxxxxxxxx',
'Authorization': 'Bearer ' + token,
'Content-Type':'application/json',
'Accept': 'application/json'
}
});
});
[1]为什么授予“allAuthenticatedUsers”成员“Cloud Functions Invoker”角色对谷歌云功能不起作用?
解决方案
您提到的教程使用“access-token”通过 Google People API 和 Chrome Identity API 访问用户的 Google 联系人。
如果您想访问不允许未经身份验证的调用的 Google Cloud 功能,您必须使用ID_TOKEN。
对于测试,您可以使用 创建一个服务帐户--role="roles/cloudfunctions.invoker"
,然后创建一个key.json
文件并导出GOOGLE_APPLICATION_CREDENTIALS
env 变量链接
最后你可以使用:
curl "https://us-central1-your-project.cloudfunctions.net/yourfunction"
# Error 403 (Forbidden)
curl "https://us-central1-your-project.cloudfunctions.net/yourfunction" -H "Authorization: bearer $(gcloud auth print-identity-token)"
#Success
推荐阅读
- html - 如何组织在网格中?
- java - 如何编写由两个或多个单词组成的字符串?
- python - Python 3.x:确定缺失值的函数
- scala - Scala Double 确定性地从二进制文件中保存和读取
- java - 将大型 Java 应用从 MyBatis 迁移到 ORM
- android - 在Android中逗号后有4个数字的kotlin double
- python - 堆栈平衡括号不起作用
- networking - RPC Srver Unavailable ,同时执行 logman 命令
- json - API 调用和 JSON 解码
- vue.js - 带有 css 的 Webpack Vue 组件