如何解决即使经过身份验证,也无法通过 url 访问 azure 存储 blob
我有一个使用 express 框架的 nodejs 应用程序。用户必须根据其 MS Azure Active Directory 凭据通过 Oauth2 协议登录。这是使用 passport-azure-ad-oauth2 npm 包
完成的我已成功使应用程序运行,以便我可以将 blob 形式的文件上传到 Azure 存储容器。容器访问级别设置为私有。我已为容器分配了用户角色,以便 AD 中的某些用户具有“读取器和数据访问权限”。所以我的理解是,当这些用户通过 Oauth2 进行身份验证时,他们应该能够在检索文件的 URL 时访问这些文件。但是,经过身份验证后,我无法访问这些文件。我收到以下错误。
ResourceNotFound
指定的资源不存在。 RequestId:6341ef80-f01e-0011-6442-08f7c2000000 时间:2021-02-21T11:14:26.3475641Z
我还按照步骤授予应用程序权限到 azure 存储 here
我需要做什么才能使经过身份验证的用户可以转到每个 blob 的特定 URL 并获得访问权限?我需要在请求中传递令牌吗?如果是这样,你怎么做?
任何帮助将不胜感激。
解决方法
404 错误(指定的资源不存在)始终与您的请求 URL 相关,但与访问令牌无关。
比如对于get blob,需要使用GET方法,部分Request Headers是必须的。
GET https://myaccount.blob.core.windows.net/mycontainer/myblob
headers:
Authorization: Bear <access-token>
x-ms-version: 2020-04-08
x-ms-date: Fri,26 Jun 2015 23:39:12 GMT
无需用户即可通过应用程序权限获取访问令牌:
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
client_id={client_id}
&client_secret={client_secret}
&scope=http://storage.azure.com/.default // change to http://storage.azure.com/ for resource
&grant_type=client_credentials
通过已登录用户的委派权限获取访问令牌:
GET https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id={client_id}
&response_type=token
&redirect_uri=https://localhost:44300/
&scope=https://storage.azure.com/user_impersonation
&response_mode=fragment
&state=12345
&nonce=678910
注意: 导航到您的存储帐户 -> 访问控制 (IAM) -> 添加角色分配 -> 选择 Storage Blob Data XXX
角色和您的登录帐户。我在我身边添加了 Storage Blob Data Contributor,传播 RBAC 规则可能需要 5 分钟。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。