Azure AD元数据和userinfo不支持CORS

时间:2017-06-21 04:12:08

标签: azure openid azure-active-directory openid-connect

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

  1. 将用户重定向到常用登录终端
  2. 在回调网址
  3. 上获取访问令牌,id_token等
  4. 使用从已发现网址检索的jwt密钥验证响应 - https://login.microsoftonline.com/common/discovery/keys
  5. 从已发现的userinfo网址 - https://login.microsoftonline.com/common/openid/userinfo
  6. 中获取用户信息
  7. 根据设置将信息存储在本地/会话存储中。
  8. Azure AD的问题是,我们无法完成第3步和第4步。这两个网址都不支持CORS。我们无法验证我们获得的令牌,也无法检索用户信息。

    在Microsoft的OpenID for Azure AD实现中,有没有更好的方法来获取userinfo?

2 个答案:

答案 0 :(得分:6)

您是对的, Azure AD不支持元数据网址或密钥网址的CORS。

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

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

您会在Azure AD SPA sample中看到adal.js中的authContext.getCachedUser()用于获取读取用户及其声明而未经任何验证的情况下的这些原则。

如果您需要更多经过验证的用户信息,则指导是通过Microsoft Graph's /me endpoint 调用图表以获取用户信息。您可以在Azure AD Xamarin Sample

中看到此模式

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

答案 1 :(得分:1)

不久前,我遇到了相同的问题,解决这些问题的方法是通过API将JWKS和UserInfo调用加倍跳转。

我还使用了经过认证且广受尊重的OIDC Client库,该库具有SPA静默令牌更新和id令牌验证的功能。

我个人希望尽可能以开放标准的方式对应用程序进行编码,而不是被某个供应商锁定。

希望这会有所帮助,

加里

PS。如果您认为这种解决方案适合您,这里有GitHib Samplesome documentation。如果我有误解,或者您想让我进一步解释,请随时发表回复。