如何解决使用来自 Firebase 身份验证流程的访问令牌提供对 Google Cloud Storage Bucket 的读取访问权限适用于 Mapbox GL Vector Tile Hosting
我的应用使用 firebase 身份验证,只有来自我的 G Suite 域的用户才能成功通过身份验证。我的范围设置如下:
var provider = new firebase.auth.GoogleAuthProvider();
provider.addScope('https://www.googleapis.com/auth/admin.directory.user')
provider.addScope('https://www.googleapis.com/auth/admin.directory.user.readonly')
provider.addScope('https://www.googleapis.com/auth/devstorage.read_only')
firebase.auth().signInWithRedirect(provider)
我的理解是,我可以使用从上述登录流程返回的访问令牌,用于 http 请求从我的 Google Cloud Storage 存储桶读取对象。我将访问令牌作为标题插入,如下所示:
Authorization: 'Bearer xyz123'
对于我的非公共存储桶,我启用了统一存储桶级别的访问权限,并使用 IAM 角色允许来自我的 G Suite 域的用户从存储桶中读取数据。
但是,这不起作用,因为我收到了 http 请求的 403 响应。对于更多的上下文,我在存储桶中托管了由 mapbox-gl 使用的矢量切片。
知道我哪里出错了吗?
附言我相信这是一个权限问题,而不是 mapbox 配置或矢量切片本身的问题。当我将存储桶完全公开时,一切正常。我正在努力解决的是如何将矢量图块的访问权限限制为仅限我 G Suite 域内的用户。
解决方法
所以,我上面的做法是正确的。但是,我遗漏了一件:需要更新 Google Cloud Storage 存储桶的 cors 设置以替换
origin: "*"
与
origin: ["https://domain-name-where-request-comes-from.com","https://and-dev-site-for-that-domain.com"]
根据 REST 规范,当凭据需要作为请求的一部分时,* 通配符不可接受。
我还需要更新我的 cors 设置的 responseHeader:
"responseHeader": ["X-Requested-With","Access-Control-Allow-Origin","Content-Type","Authorization"]
通过在 mapbox-gl 请求的标头中插入 OAuth 令牌(通过 transformRequset 方法),我可以成功请求和接收图块。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。