我遇到了一些问题,让我们的代码验证到Azure AD。我已经配置了一个应用程序,并设置了请求授权"代码"的代码。这很有效,但是当我试图将"代码"交换为"access_token"时,我陷入了各种错误。首先,我得到一个"丢失的资源识别"错误。我挖掘到Manifest并拿出一个资源id来传递,但随后我得到了一个"丢失的client_secret"错误。
但是我不确定我是否走在正确的道路上。首先,我不确定我需要访问哪些资源(如果有的话)。因为我们只是试图验证,我不认为我需要实际请求访问任何其他api,我吗?也许我有,但我不确定我会用它们做什么。
同时,我发现这篇博客文章似乎很鼓舞人心:http://www.andrewconnell.com/blog/azure-ad-oauth2-openid-connect
他使它看起来像我应该能够在初始授权请求中请求"代码"和OpenID连接id_token。乍一看,这似乎就是我所需要做的。但是,当我尝试将"+id_token"附加到"code"resource_type参数时,他建议我得到一个"缺失的nonce"错误。如果我包含一个"nonce"参数与一个随机字符串,它通过没有错误,它击中我的redirect_uri,但我没有得到任何数据返回的响应,当然不是个人资料信息,他指出我应该在博客文章中看到。
如果你想进行身份验证,你肯定想使用OpenId Connect - OAuth2是为了授权你的应用程序作为一个客户端对不同的资源,而不是获得一个令牌的目的。我建议查看http://aka.ms/aaddev以获得概述和快速入门。具体而言,请参阅此处了解拓扑的解释,并快速了解如何执行openid连接身份验证。
是否添加'response_mode=form_post'允许您的应用程序接收代码和id_token?
示例登录请求(GET)
https://login.microsoftonline.com/common/oauth2/authorize?response_type=code + id_token& response_mode = form_post&范围= openid& client_id = insert-client-id& nonce = insert-nonce& redirect_uri = insert-redirect-uri