Gau*_*tri 5 openid oauth azure azure-active-directory
所以几天前我在 Azure AD 中创建了一个应用程序。请求授权代码时,当我同时要求code和id_token(在response_type参数中)时,我收到以下错误:
AADSTS70007:请求令牌时,“query”不是“response_mode”的受支持值
跟踪 ID:xxxx-xxxx-xxxx-xxxx-xxxx
关联 ID:xxxx-xxxx-xxxx-xxxx-xxxx
时间戳:2018-06-13 16:06:03Z
我的请求 URL 如下所示:
https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Fmanagement.core.windows.net%2F&client_id=application-client-id&response_type=code+id_token&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_mode=query&nonce=1528906255418&state=12345
但是,如果我只要求code而不是id_token. 所以基本上,以下 URL 有效:
https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Fmanagement.core.windows.net%2F&client_id=application-client-id&response_type=code&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_mode=query&nonce=1528906255418&state=12345
更有趣的是,如果我使用几个月前创建的应用程序的客户端 ID,代码运行良好,Azure AD 会同时返回code和id_token.
我确实在这里发现了一个类似的问题:https : //sharepoint.stackexchange.com/questions/242669/aadsts70007-query-is-not-a-supported-value-of-response-mode-when-requesting但没有答案提供了那个问题。
我很想知道:
queryasresponse_mode而不是form_post。code + id_token如果您想在其中使用response_type,您应该使用OIDC Hybrid Flow。
但是,如果您只是code在 中使用response_type,则应该使用授权代码流程。
所以,这两种请求由于response_types不同,所以是不同的OIDC认证流程。
response_modes:对于form_post,form_post执行包含重定向 URI 代码的 POST。当授权响应仅使用一次时,您应该使用form_postin reponse_mode。form_post您还可以在本文档中查看有关的详细信息。
对于,在此模式下,授权响应参数被编码在重定向回客户端时query添加到的查询字符串中。有关inredirect_uri的更多详细信息,您可以参考此文档。queryresponse_mode
这样,您可能会更清楚不同的授权流程的不同response_mode。
对于授权码流,您可以使用query或form_post,对于混合流,您可以使用form_post或fragment。对于 Web 应用程序,我们建议使用response_mode=form_post, 以确保将令牌最安全地传输到您的应用程序。(Microsoft OpenId Connect 中间件仅支持hybrid+ form_post)
为什么 Azure AD 对于较旧的应用程序不会抛出任何错误,而对于较新的应用程序则不会抛出任何错误?最近 Azure AD 级别是否有任何更改会导致此问题?这也仅适用于较新的应用程序。
我不是 100% 确定,但 AAD 不应更改其授权/身份验证级别的任何内容。也许您使用了不同类型的应用程序或身份验证流程。
有没有办法防止这个错误的发生?我非常想使用查询 as
response_mode而不是form_post。
由于原因是由OIDC框架引起的,我认为你不能用于query混合流请求。form_post
如果你的应用程序是Web应用程序,你最好在这个流中使用。
另外,Azure门户实际上正在使用这个流程,但它可能与我们可以使用的有点不同。但是您可以通过 Fiddler 捕获 HTTP 流量来了解身份验证/授权的工作原理。通过此流程,您必须使您的应用程序允许隐式流程。
您还可以在本文档中查看使用 Azure AD 和 OpenID Connect 混合流程进行身份验证的示例。
| 归档时间: |
|
| 查看次数: |
2260 次 |
| 最近记录: |