我正在托管带有mapboxGL的JavaScript Web应用程序正在使用的矢量图块。
MapboxGL以非常特定的方式向存储桶请求这些图块。实例化地图时,您需要向存储桶提供如下网址:
addLayer({
source: {
type: "vector",
tiles: [
`https://storage.googleapis.com/${bucketName}/{z}/{x}/{y}.pbf`,
],
minZoom: 4,
maxZoom: 12,
}
})
然后,地图将根据视口请求适当的图块。您可以通过添加以下属性来转换请求并将Authorization: Bearer {{tokens}}
添加到每个图块请求中:
transformRequest: (url, resourceType) => {
if (url.startsWith(settings.VECTOR_TILE_BUCKET_URL)) {
return {
url: url,
headers: {
Authorization: `Bearer ${accessToken}`,
'Cache-Control': 'no-cache'
}
};
}
}
现在这是我对熟悉Firebase的人的问题。在我的云存储分区上设置“规则”时,我可以允许该帐户中的所有用户进行读取访问,然后在这些磁贴请求中传递用户作为Bearer {{token}}
收到的Firebase令牌吗?有没有其他我可以使用的Firebase服务保护我的矢量图块的方法?我阅读了文档,其中显示了如何使用firebase SDK访问云存储桶,但尚不清楚我是否还可以通过以更传统的格式将令牌作为查询参数传递来对其存储桶进行身份验证。
答案 0 :(得分:0)
在官方Cloud Storage Authentication Documentation中,您可以看到许多身份验证方法(使用gsutil,客户端库,Api),但是当您使用Firebase时,Firebase SDK内置了Firebase Authentication,因此Firebase SDK是访问存储桶的唯一方法,例如SDK处理所有与身份验证相关的操作,使用其他方法可能会使您的应用面临风险。
另一种身份验证方法可以使用Real-time Database Rest API,我认为这对您的情况没有帮助。