无client_id如何通过AzureAD用户获取Azure Blob Storage访问令牌
不存在完全不使用client_id就能向Azure AD请求token的场景——所有OAuth 2.0流程都要求携带客户端标识,但你完全不需要自己在Azure AD里注册专属应用,用微软官方公开的原生客户端ID即可,不需要自己维护任何应用注册配置,就能实现个人用户身份直接拿token访问Blob,具体步骤如下:
1. 前置权限配置
先给目标用户/所属用户组分配Blob数据平面访问权限:
- 进入目标存储账户的「访问控制(IAM)」页面
- 点击「添加角色分配」,选择对应数据平面角色,比如存储Blob数据读取者、存储Blob数据参与者(不要选管理平面的「存储账户参与者」这类角色,这类角色只能管理存储账户配置,无法访问Blob实际数据)
- 成员选择你要授权的指定Azure AD用户,或者用户所在的AAD组,保存后等待5-10分钟让权限生效。
2. 准备客户端参数
不需要自己注册应用,直接使用微软官方给交互式工具预留的公开原生客户端参数即可:
- 通用客户端ID:
1950a258-227b-4e31-a9cf-717495945fc2(Azure CLI、PowerShell等官方命令行工具拿用户token全用这个ID,无客户端密钥,专门给个人用户交互式登录场景用) - 重定向地址:
https://login.microsoftonline.com/common/oauth2/nativeclient(该客户端默认配置的合法回调地址,不需要你自己修改配置)
3. Postman获取用户token操作
- 打开Postman新建请求,切换到「Authorization」标签,授权类型选择OAuth 2.0
- 在Token配置区域按以下值填写:
- Grant Type(授权类型):选择
Authorization Code(授权码流,对应个人用户交互式登录) - Auth URL(授权地址):
https://login.microsoftonline.com/<替换为你的AAD租户ID>/oauth2/v2.0/authorize - Access Token URL(令牌地址):
https://login.microsoftonline.com/<替换为你的AAD租户ID>/oauth2/v2.0/token - Client ID(客户端ID):填上面给出的通用客户端ID
1950a258-227b-4e31-a9cf-717495945fc2 - Client Secret(客户端密钥):留空,该公开客户端不需要密钥
- Scope(权限范围):填
https://storage.azure.com/user_impersonation,该范围对应的token可访问所有你已被授权的存储资源
- Grant Type(授权类型):选择
- 点击「Get New Access Token」,在弹出的微软登录窗口中输入你之前授权的AAD用户账号密码,完成登录流程即可拿到个人身份的access token。
4. 访问Blob存储
拿到token后,直接在Blob REST API请求中添加请求头即可访问:Authorization: Bearer <你获取到的access token>
比如要列出指定容器下的Blob,直接发GET请求到https://<替换为你的存储账户名>.blob.core.windows.net/<替换为容器名>?restype=container&comp=list,携带上述请求头就能正常返回结果,不需要额外做签名计算。
注意:不要选择Client Credentials(客户端凭据)授权流,该流是应用身份访问用的,不符合你个人用户身份访问的需求。
内容的提问来源于stack exchange,提问作者Gabriel Bercea
相关产品推荐
相关产品推荐

