如何用Python复现Postman中基于Azure AD的OAuth 2.0授权请求?
使用Python复现Azure AD授权请求
要在Python里复现Azure AD的授权请求,最省心的方式是用微软官方的MSAL库,下面分几种常见场景给你代码示例:
1. 客户端凭证流(服务间无用户交互)
适合后台服务调用Azure资源的场景,不需要用户登录授权。
首先安装依赖:
pip install msal
代码示例:
import msal # 替换成你的Azure AD实际配置 TENANT_ID = "你的租户ID" CLIENT_ID = "你的应用注册ID" CLIENT_SECRET = "你的应用客户端密钥" # 权限范围按需替换,比如调用Graph API就用"https://graph.microsoft.com/.default" SCOPE = ["https://graph.microsoft.com/.default"] # 初始化MSAL客户端 app = msal.ConfidentialClientApplication( client_id=CLIENT_ID, client_credential=CLIENT_SECRET, authority=f"https://login.microsoftonline.com/{TENANT_ID}" ) # 获取访问Token result = app.acquire_token_for_client(scopes=SCOPE) if "access_token" in result: print("成功获取Token:", result["access_token"]) else: print("Token获取失败:", result.get("error_description", result.get("error")))
2. 授权码流(带用户登录交互)
如果你的场景需要用户手动登录授权,用这种流程,需要先引导用户获取授权码,再用码兑换Token。
代码示例:
import msal import webbrowser # 替换成你的Azure AD实际配置 TENANT_ID = "你的租户ID" CLIENT_ID = "你的应用注册ID" # 必须和应用注册里配置的重定向URI一致 REDIRECT_URI = "http://localhost:8000" # 按需替换权限,比如读取用户信息用"User.Read" SCOPE = ["User.Read"] # 初始化MSAL客户端 app = msal.PublicClientApplication( client_id=CLIENT_ID, authority=f"https://login.microsoftonline.com/{TENANT_ID}" ) # 生成授权URL并打开浏览器 auth_url = app.get_authorization_request_url( scopes=SCOPE, redirect_uri=REDIRECT_URI ) webbrowser.open(auth_url) # 手动输入回调URL中的授权码 print("请在浏览器完成登录,然后复制回调URL里的code参数输入:") auth_code = input("授权码: ") # 用授权码兑换Token result = app.acquire_token_by_authorization_code( code=auth_code, scopes=SCOPE, redirect_uri=REDIRECT_URI ) if "access_token" in result: print("成功获取Token:", result["access_token"]) else: print("Token获取失败:", result.get("error_description", result.get("error")))
注意事项
- 确保Azure AD应用注册已配置对应权限,部分高权限需要管理员提前同意
- 所有占位参数(租户ID、应用ID等)必须替换成你自己的实际配置
- 如果你的授权请求是其他流程(比如用户名密码流),可以参考MSAL的官方逻辑调整代码
内容的提问来源于stack exchange,提问作者Nuno
相关产品推荐
相关产品推荐

