如何通过 /authorize?p=<POLICY> 获取 MS Graph 的 access_token 和 id_token

How to get access_token for MS Graph and id_token through /authorize?p=<POLICY>

我想要实现的很简单 - 让用户使用 Azure AD B2C 登录策略登录并获取 access_token 与 Microsoft Graph API 和 id_token 与私人通信 API。所有这些都将在单页应用程序中完成(使用 ReactJS)。

也许有一种方法可以从 AAD B2C id_token 获取 Microsoft Graph API access_token?我可以毫无问题地检索 id_token.

我已经查看了各种 MS Graph 场景,尝试了多种不同的登录方式 url,但最终总是遗漏一些东西(code , token, id_token)

我为此使用的应用程序是在 apps.dev.microsoft.com 上创建的,但我不确定它是否已完全正确配置(并不是说有太多需要配置的东西)。

这里是 https://login.microsoftonline.com/{{tenant_id}}/v2.0/.well-known/openid-configuration?p={{policy}} 的输出,表明它不支持作为 request_type 的令牌(如果我从查询中删除策略,那么它是允许的)

{
  "issuer": "https:\/\/login.microsoftonline.com\/aaaaaaaa-aaaa-aaaaa-aaaa-aaaaaaaaaaaa\/v2.0\/",
  "authorization_endpoint": "https:\/\/login.microsoftonline.com\/{{tenant_id}}\/oauth2\/v2.0\/authorize?p={{policy}}",
  "token_endpoint": "https:\/\/login.microsoftonline.com\/{{tenant_id}}\/oauth2\/v2.0\/token?p={{policy}}",
  "end_session_endpoint": "https:\/\/login.microsoftonline.com\/{{tenant_id}}\/oauth2\/v2.0\/logout?p={{policy}}",
  "jwks_uri": "https:\/\/login.microsoftonline.com\/{{tenant_id}}\/discovery\/v2.0\/keys?p={{policy}}",
  "response_modes_supported": [
    "query",
    "fragment",
    "form_post"
  ],
  "response_types_supported": [
    "code",
    "id_token",
    "code id_token"
  ],
  "scopes_supported": [
    "openid"
  ],
  "subject_types_supported": [
    "pairwise"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"
  ],
  "token_endpoint_auth_methods_supported": [
    "client_secret_post"
  ],
  "claims_supported": [
    "oid",
    "sub",
    "idp",
    "tfp"
  ]
}

我想我想看到的答案是如何调用 https://login.microsoftonline.com/{{tenant_id}}/oauth2/v2.0/authorize?p={{policy}}&... 端点,它会提供 id_token + access_token 或代码来检索它们的形式.../oauth2/v2.0/token?p={{policy}}...

提前致谢!

截至目前,您可以使用 OAuth2 for your own API 获得 id_token 和 access_token,但不能使用 MS Graph。

如果您有 SPA 应用程序,一种解决方法是将您自己的 API 公开给客户端,并且 API 可以在仅应用程序上下文中内部调用 MS Graph。也就是说,它将使用 MS Graph 中给定租户的仅应用程序凭据获取令牌,并能够查询任何用户。

这还可以让您公开更丰富的 API(例如,将目录中的用户属性与应用程序特定数据相结合),客户端应用程序可以将其用于各种查询和操作。

您可以 post 关于 access_token 到 feedback forums.

中 MS Graph 的现有想法或投票给现有想法(如果存在)