非交互式使用个人ID访问Azure API的流程及权限模拟问询
已知Azure API使用流程
- 进入应用注册页面创建新应用
- 获取
client id、Directory (tenant) ID和密钥 - 进入API permission区域添加所需访问的API,或将应用ID作为服务主体(SP)添加至
billing reader等角色中 - 调用
/oauth2/token接口,传入client_id和client_secret以获取Bearer令牌 - 在请求头中传入
Bearer {{access_token}}即可调用目标API
技术疑问解答
1. 使用个人ID(AD邮箱)访问指定API的流程及令牌获取方式
权限前提
首先确保你的个人AD账号已获得对应API的访问权限:
- 对于Billing、Cost Management或存储账户这类管理类API,需在Azure RBAC中为你的账号分配对应角色(比如
Billing Reader、Storage Account Contributor等); - 若涉及特定API的委派权限,需确认账号已被允许访问目标API。
流程及令牌获取
若要直接通过/oauth2/token接口获取令牌,可使用OAuth 2.0的资源所有者密码凭据流(注:该方式因安全性问题不推荐生产环境使用,更建议授权码流或设备代码流),请求参数如下:
POST https://login.microsoftonline.com/{tenant_id}/oauth2/token Content-Type: application/x-www-form-urlencoded grant_type=password &client_id={公共客户端ID(可使用Azure CLI的客户端ID:04b07795-8ddb-461a-bbee-02f9e1bf7b46)} &username={你的AD邮箱} &password={你的账号密码} &resource={目标API的资源ID,例如: - 管理类API(Billing/Cost Management/存储账户):https://management.azure.com/ - 存储Blob API:https://storage.azure.com/ } &tenant_id={你的租户ID}
返回结果中的access_token即为可用的Bearer令牌,后续在请求头中携带Bearer {access_token}即可调用目标API。
更安全的授权码流流程:
- 注册一个公共客户端应用(无需设置密钥);
- 引导用户访问授权端点完成身份验证,获取授权码;
- 使用授权码调用
/oauth2/token交换令牌,同时可获取refresh_token用于后续续期,无需重复输入密码。
2. 无密码使用自身权限及授权App ID模拟身份
无密码使用自身权限
可通过以下两种方式实现无需输入密码访问API:
- 设备代码流:适用于无界面设备或无法输入密码的场景。调用设备端点获取设备代码和用户验证URL,用户在其他设备上完成身份验证后,应用即可获取令牌,全程无需输入密码;
- 授权码流+刷新令牌:用户首次授权应用后,应用会获得
refresh_token,后续可通过该令牌调用/oauth2/token刷新获取新的access_token,无需再次输入密码。
授权App ID模拟自身身份
可以实现授权某个App ID模拟你的身份操作,步骤如下:
- 在Azure AD中注册目标应用(即需授权的App ID);
- 为该应用添加委派权限(对应你需要模拟操作的API,比如Billing、存储账户的委派权限);
- 你作为用户,对该应用进行权限同意(可通过管理员批量同意或个人手动同意);
- 应用通过授权码流或设备代码流获取代表你的身份令牌,即可模拟你执行操作;
- 若需长期使用,应用可存储
refresh_token,定期刷新获取新的访问令牌,无需你重复操作。
这种方式适合HR等场景,应用可在你授权的范围内,以你的身份执行指定操作,全程无需输入密码。
内容的提问来源于stack exchange,提问作者Rakesh Prasad
相关产品推荐
相关产品推荐

