如何使用SAML 2.0断言获取Microsoft Graph API访问令牌?
能否用SAML 2.0断言获取Microsoft Graph访问令牌?
可以,但不能直接用SAML断言调用Graph API,得通过Azure AD的令牌交换流程来实现,具体步骤如下:
1. 先确认SAML断言的有效性
你的SAML断言得是Azure AD(或已和Azure AD建立联合信任的身份提供者)签发的,同时满足:
- 包含用户的唯一标识(比如
NameID或upn),且该用户在Azure AD中有对应账号 - 断言未过期、签名有效
- 断言的受众(
aud声明)指向你的应用或Azure AD
2. 用SAML断言交换Graph访问令牌
通过Azure AD的OAuth 2.0令牌端点,提交SAML断言换取访问令牌,授权类型选urn:ietf:params:oauth:grant-type:saml2-bearer:
请求示例(POST请求)
POST /{tenant-id}/oauth2/v2.0/token HTTP/1.1 Host: login.microsoftonline.com Content-Type: application/x-www-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer &client_id={你的应用Azure AD客户端ID} &client_secret={你的应用客户端密钥} &assertion={Base64编码的SAML 2.0断言内容} &scope=https://graph.microsoft.com/SharePoint.Read.All &requested_token_use=on_behalf_of
assertion:把SAML响应里的<saml:Assertion>节点内容做Base64编码后填入requested_token_use=on_behalf_of:明确令牌用于代表已认证用户调用Graph API
3. 调用Graph API
拿到访问令牌后,在请求头里携带令牌即可调用SharePoint相关接口:
GET /v1.0/sites/{site-id}/lists HTTP/1.1 Host: graph.microsoft.com Authorization: Bearer {获取到的Graph访问令牌}
关键注意事项
- 你的.NET MVC应用必须在Azure AD中注册为服务主体,并且提前配置好Graph API的委派权限(需要用户同意)或应用权限
- 要处理令牌过期问题,用返回的
refresh_token可以刷新获取新的访问令牌 - 如果你的SAML身份提供者不是Azure AD,得先让该IDP和Azure AD建立联合信任,否则Azure AD不会认可这个SAML断言
内容的提问来源于stack exchange,提问作者rinku kurian
相关产品推荐
相关产品推荐

