我正在开发一个使用OIDC与Azure AD应用程序对话的JS应用程序。以下是身份验证和验证的流程 -
https://login.microsoftonline.com/common/discovery/keys
userinfo
网址 - https://login.microsoftonline.com/common/openid/userinfo
Azure AD的问题是,我们无法完成第3步和第4步。这两个网址都不支持CORS。我们无法验证我们获得的令牌,也无法检索用户信息。
在Microsoft的OpenID for Azure AD实现中,有没有更好的方法来获取userinfo?
答案 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 Sample和some documentation。如果我有误解,或者您想让我进一步解释,请随时发表回复。