Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';即使经过身份验证,也无法通过url访问azure存储blob_Node.js_Azure_Azure Active Directory_Azure Storage Blobs - Fatal编程技术网

Node.js Can';即使经过身份验证,也无法通过url访问azure存储blob

Node.js Can';即使经过身份验证,也无法通过url访问azure存储blob,node.js,azure,azure-active-directory,azure-storage-blobs,Node.js,Azure,Azure Active Directory,Azure Storage Blobs,我有一个使用express框架的nodejs应用程序。用户必须根据其MS Azure Active Directory凭据通过Oauth2协议登录。这是使用npm包完成的 我已经成功地让应用程序工作,这样我就可以将blob格式的文件上载到azure存储容器。容器访问级别设置为private。我为容器分配了用户角色,以便广告中的某些用户具有“读卡器和数据访问权限”。所以我的理解是,当这些用户通过Oauth2进行身份验证时,他们应该能够在检索文件的URL时访问文件。但是,经过身份验证后,我无法访问这

我有一个使用express框架的nodejs应用程序。用户必须根据其MS Azure Active Directory凭据通过Oauth2协议登录。这是使用npm包完成的

我已经成功地让应用程序工作,这样我就可以将blob格式的文件上载到azure存储容器。容器访问级别设置为private。我为容器分配了用户角色,以便广告中的某些用户具有“读卡器和数据访问权限”。所以我的理解是,当这些用户通过Oauth2进行身份验证时,他们应该能够在检索文件的URL时访问文件。但是,经过身份验证后,我无法访问这些文件。我得到以下错误

ResourceNotFound 指定的资源不存在。请求ID:6341ef80-f01e-0011-6442-08f7c2000000时间:2021-02-21T11:14:26.3475641Z 我还按照步骤将应用程序权限授予azure存储

我需要做什么才能使经过身份验证的用户能够访问每个blob的特定url并获得访问权限?我需要在请求中传递令牌吗?如果是,你是如何做到的

任何帮助都将不胜感激。

404错误(指定的资源不存在)始终与您的请求URL相关,但与访问令牌无关

例如,您需要使用GET方法,并且需要一些请求头

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
通过具有已登录用户的委派权限获取访问令牌:

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)->添加角色分配->选择
存储Blob数据XXX
角色和您的登录帐户。我在我这边添加了Storage Blob Data Contributor,传播RBAC规则可能需要5分钟


谢谢。道歉,因为我还在学习。登录后,我在什么阶段立即获得访问令牌?还是每次我想通过URL下载文件时都要请求访问令牌?我如何构造应用程序,以便登录后访问令牌始终可用,以便只要用户已通过身份验证,就可以下载任何文件?更新-我已设法使用邮递员获取访问令牌。但是,当我尝试使用GET请求获取所需资源时,我得到的是403:未授权响应您可以在登录后获取访问令牌,请参阅我使用的第二种方法。但是访问令牌将在一小时后过期,您需要重新获取它。关于403错误,请参阅我回复中的说明,您需要在应用程序中添加存储API权限。感谢您的帮助。。。因此,我通过复制上面的“已登录用户的委托响应”代码,在postman中获得了200条响应。但我只是想知道访问令牌在哪里?我刚建立了cookie头,fpc=etc。。。再次感谢您的帮助访问令牌不会自动存储。如果使用MSAL.js,可以将其存储在令牌缓存sample中。
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