Azure AADSTS70007:&x27;查询';不是支持的值';响应模式';请求令牌时
所以几天前我在Azure广告中创建了一个应用程序。当请求授权代码时,当我同时请求Azure AADSTS70007:&x27;查询';不是支持的值';响应模式';请求令牌时,azure,oauth,azure-active-directory,openid,Azure,Oauth,Azure Active Directory,Openid,所以几天前我在Azure广告中创建了一个应用程序。当请求授权代码时,当我同时请求code和id\u令牌(在response\u type参数中)时,我返回以下错误: AADSTS70007:“查询”在以下情况下不是“响应模式”的受支持值: 请求代币 跟踪ID:xxxx xxxx xxxx xxxx 相关ID:xxxx xxxx xxxx xxxx 时间戳:2018-06-13 16:06:03Z 我的请求URL如下所示: https://login.microsoftonline.com/com
code
和id\u令牌
(在response\u type
参数中)时,我返回以下错误:
AADSTS70007:“查询”在以下情况下不是“响应模式”的受支持值:
请求代币
跟踪ID:xxxx xxxx xxxx xxxx
相关ID: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-客户端id和响应\u类型=代码+id\u令牌和重定向\u uri=urn%3AETF%3Awg%3OAuth%3A2.0%3OOB和响应\u模式=查询和非查询=1528906255418&状态=12345
然而,如果我只要求code
而不要求id\u令牌
,我不会得到任何错误。因此,基本上,以下URL是有效的:
https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Fmanagement.core.windows.net%2F&client_id=application-客户端id和响应\u类型=代码和重定向\u uri=urn%3AETF%3Awg%3OAuth%3A2.0%3OOB和响应\u模式=查询和非查询=1528906255418&状态=12345
更有趣的是,如果我使用几个月前创建的应用程序的客户端id,代码工作得非常好,Azure AD将code
和id\u令牌
返回给我
我确实在这里发现了一个类似的问题:但没有为这个问题提供答案
我很想知道:
- 为什么Azure AD不会为较旧的应用程序而为较新的应用程序抛出任何错误?最近Azure广告级别是否发生了导致此问题的任何更改?这也仅适用于较新的应用程序
- 有没有办法防止这种错误发生?我非常想使用
作为query
而不是response\u模式
form\u post
- 如果要在
中使用响应类型
,则应使用code+id\u令牌
- 但是,如果您只是在
响应类型中使用
,则应该使用code
响应类型不同
同时,两种不同的响应模式
s:
- 对于
form\u post
,form\u post
执行一个包含重定向URI代码的post。当授权响应只打算使用一次时,您应该在响应模式下使用form\u post
。您还可以在中查看有关form\u post
的详细信息
- 对于
query
,在此模式下,当重定向回客户端时,授权响应参数将编码在添加到redirect\u uri
的查询字符串中。有关response\u模式下的query
的更多详细信息,请参阅
因此,对于不同的授权流,您可能会更清楚地了解不同的响应\u模式
对于授权代码流,您可以使用query
或form\u post
;对于Hybird流,您可以使用form\u post
或fragment
。对于web应用程序,我们建议使用response\u mode=form\u post
,以确保令牌最安全地传输到您的应用程序。(Microsoft OpenId Connect中间件仅支持混合
+表单发布
)
为什么Azure AD不为旧应用程序抛出任何错误,但为
更新的应用程序?最近Azure广告级别有什么变化吗
那会导致这个问题吗?这也只适用于较新的产品
应用程序
我不是100%确定,但是AAD不应该改变它的授权/认证级别。可能您使用了不同类型的应用程序或身份验证流
有没有办法防止这种错误发生?我非常愿意
喜欢使用查询作为response\u模式
而不是form\u post
由于原因是OIDC框架造成的,我认为您不能对hybird流请求使用query
。您最好使用form\u post
如果您的应用程序是web应用程序,则在此流程中
另外,实际上正在使用这个流,但它可能与我们可以使用的有点不同。但是,您可以通过Fiddler捕获其HTTP流量来了解身份验证/授权的工作原理。使用此流,您必须启用应用程序以允许隐式流
您还可以查看是否使用Azure AD和OpenID Connect混合流进行身份验证。为了完整性起见,添加了一个答案。韦恩的回答帮了大忙
因此,我没有使用response\u type=query
,而是使用response\u type=fragment
,我的新请求URL现在如下所示:
https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Fmanagement.core.windows.net%2F&client_id=application-客户端id和响应\u类型=代码+id\u令牌和重定向\u uri=urn%3AETF%3Awg%3OAuth%3A2.0%3OOB和响应\u模式=片段和非片段=1528906255418和状态=12345
我能够拿回code
和id\u令牌
:
urn:ietf:wg:oauth:2.0:oob#code=code&id#u-token=id#u-token&state=12345&session#u-state=c6989d04-48ff-40cd-86ac-0cd2670ee168
删除urn:ietf:wg:oauth:2.0:oob#
,然后解析剩余的字符串以获得应用程序中的code
和id\u令牌
值。非常感谢@Wayne Yang提供如此详细的解释!让我读更多关于它的内容,并带着我可能有的任何问题回来。嗨@GauravMantri,如果您还有任何问题,请随时通知我