在 SAML2.0 身份验证后调用图形 API.如何获取所需的身份验证令牌



我们的Web aap通过SAML2.0向Azure AD进行身份验证,与此类似。

作为回报,我们得到SAML断言(SAML令牌)。

但是,当登录的用户拥有超过 150+ 个组时,响应不包含组信息(因此令牌大小不会超过 HTTP 标头大小限制。更多信息)

但是它返回的是一个图形 API,以获取组信息,例如 https://graph.windows.net/{tenant id}/users/{user id}/getMemberObject。

通过经历这个

我知道我需要将身份验证持有者令牌与 http 请求附加才能成功命中图形 api。 我的问题是如何获得身份验证持有者令牌? 如何使用 SAML 令牌获取身份验证持有者令牌?

其他有用的链接 - 链接1 链接2

我只使用 ADAL 库使用非 SAML 图形 API,但从文档中可以看出,NameID似乎是请求图形 API 访问令牌的基础:

<Subject>
<NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">m_H3naDei2LNxUmEcWd0BZlNi_jVET1pMLR6iQSuYmo</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer" />
</Subject>

从这篇文章中,

"在这里,客户端从 SAML 身份获得 SAML 持有者断言 然后,提供程序从授权服务器请求访问令牌 使用 SAML 持有者断言作为身份证明">

本文指出,整个Assertion用于获取访问令牌,其中:

添加之前使用 base64URL 编码对整个断言进行编码 它作为 POST 请求的一部分

似乎只有 AD FS 支持将 SAML 令牌交换为图形访问令牌,而不支持 Azure AD。根据:

仅当 AD FS 是颁发原始 SAMLv1 令牌的联合标识提供程序时,此方案才有效。不能将 Azure AD 颁发的 SAMLv2 令牌交换为Microsoft图形访问令牌。

资料来源:https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-saml-bearer-assertion。

通常,您必须将 OIDC/OAuth 堆栈添加到您的应用程序中。据我了解,这是对您现有的 SAML 身份验证实现的补充。请参阅:https://learn.microsoft.com/en-us/azure/active-directory/develop/scenario-token-exchange-saml-oauth

最新更新