Azure AD 元数据和用户信息不支持 CORS

Azure AD metadata and userinfo does not support CORS

我正在开发一个 JS 应用程序,它使用 OIDC 与 Azure AD 应用程序对话。这是身份验证和验证的流程 -

  1. 将用户重定向到公共登录端点
  2. 获取访问令牌,id_token 等回调 url
  3. 使用从发现的 url 中检索到的 jwt 密钥验证响应 - https://login.microsoftonline.com/common/discovery/keys
  4. 获取发现的用户信息 userinfo url - https://login.microsoftonline.com/common/openid/userinfo
  5. 根据设置将信息存储在本地/会话存储中。

A​​zure AD 的问题是,我们无法完成第 3 步和第 4 步。url 都不支持 CORS。我们无法验证我们获得的令牌,也无法检索用户信息。

Microsoft 为 Azure AD 实施的 OpenID 中是否有更好的方法来获取用户信息?

你是对的,Azure AD 不支持元数据 URL 或键 URL.

的 CORS

一般指导是不验证 id_token,因为您应该只将这些声明用于显示目的,而不是驱动任何核心功能。

对于核心功能(又名 API 调用),您应该使用 access_tokens,它应该由您的后端验证 ,它不需要启用 CORS 的端点.

您将在 Azure AD SPA sample where authContext.getCachedUser() in adal.js 中看到这些原则的作用,用于在没有任何验证的情况下获取读取用户及其声明。

如果您想要更多经过验证的用户信息,指导是通过Microsoft Graph's /me endpoint. You can see this pattern in the Azure AD Xamarin Sample调用Graph获取用户信息。

您可以在 Azure AD 反馈论坛中为请求投票:Add CORS support for discovery and json web key set endpoints

我 运行 不久前遇到了同样的问题,这些问题的解决方案是通过 API.

双跳 JWKS 和 UserInfo 调用

我还使用了经过认证且广受推崇的 OIDC Client 库,它具有 SPA 静默令牌更新和 ID 令牌验证的功能。

就我个人而言,我喜欢尽可能以开放标准的方式对我的应用程序进行编码,而不是被锁定在一个供应商。

PS。如果您认为这种解决方案适合您,这里有 GitHib Sample and some documentation.