Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory OAuth with Azure Active Directory:Azure AD在拒绝管理员同意作用域后返回不正确的状态参数值_Azure Active Directory - Fatal编程技术网

Azure active directory OAuth with Azure Active Directory:Azure AD在拒绝管理员同意作用域后返回不正确的状态参数值

Azure active directory OAuth with Azure Active Directory:Azure AD在拒绝管理员同意作用域后返回不正确的状态参数值,azure-active-directory,Azure Active Directory,在OAuth与Azure AD交互期间,在用户拒绝授予管理员同意范围后,Azure似乎返回了不正确的状态参数值 通过Azure AD v2.0端点构建用于从Azure AD请求授权代码的URL时https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize,假设我将状态参数指定为a+b。 然后url将状态参数值编码为a%2Bb,然后放入url以从Azure AD请求授权代码 如果请求指定了需要管理员同意且过去未授予的作用域,Azu

在OAuth与Azure AD交互期间,在用户拒绝授予管理员同意范围后,Azure似乎返回了不正确的状态参数值

通过Azure AD v2.0端点构建用于从Azure AD请求授权代码的URL时
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
,假设我将状态参数指定为
a+b
。 然后url将状态参数值编码为
a%2Bb
,然后放入url以从Azure AD请求授权代码

如果请求指定了需要管理员同意且过去未授予的作用域,Azure将按预期返回以下页面:

我试图验证我的应用程序逻辑,以处理从Azure返回的错误。因此,我通过单击“返回应用程序而不授予许可”链接拒绝了此同意。之后,Azure预期会返回一个错误响应到我的应用程序的重定向URI。Azure将数据填充到HTTP正文中,如下所示:

Azure将状态参数值填充为
a%252bb
。这是不对的。预期值应为
a%2Bb
——即与前面所述调用Azure授权代码请求端点时指定的值相同。看起来Azure以某种方式执行了双重URL编码——换句话说,对已经进行URL编码的状态参数进行编码,将
a%2Bb
更改为
a%252bb
。(
%
被编码为
%25
。此外,
B
以某种方式变成
B
,这很奇怪。)

Azure似乎在处理用户的代码路径中存在此问题,用户单击
返回应用程序而不授予同意
链接拒绝管理员同意范围。对于用户拒绝用户同意范围的其他场景,Azure似乎没有此问题。Azure为状态参数返回正确的值,如下所示:


我今天又试了一次。看起来Microsoft刚刚删除了未经同意返回应用程序的
链接。所以这篇文章前面提到的问题已经不存在了


无法使用类似
https://login.microsoftonline.com/adfei.onmicrosoft.com/oauth2/v2.0/authorize?response_type=token+id_令牌和客户端_id=57336bd5-a80f-4b48-a29a-07fdea6ef91e和重定向_uri=http://localhost&scope=openid+Directory.Read.All&state=a+b&nonce=123&response\u mode=form\u post
。您可以共享帮助查找此问题的确切请求。您尝试的URL似乎用于隐式授权流(
response\u type=token+id\u token
)。当我看到这个问题时,我使用了授权代码流(
response\u type=id\u token+code
)。这是我用于从Azure AD请求授权代码的编码URL:
https://login.microsoftonline.com/{tenant\u id}/oauth2/v2.0/authorize?响应\u mode=form\u post&nonce={nonce\u value}&response\u type=id\u令牌%20code&client\u id={client\u id}&redirect_uri=http%3A%2F%2LocalHost&scope=openid%20email%20profile%20offline_access%20Group.ReadWrite.All&state=a%2Bb
我也在使用上述请求进行测试,但仍然无法再现此问题。以下是供您参考的请求:
https://login.microsoftonline.com/adfei.onmicrosoft.com/oauth2/v2.0/authorize?response_mode=form_post&nonce=abc&response_type=id_token 代码和客户端id=57336bd5-a80f-4b48-a29a-07fdea6ef91e和重定向=http://localhost&scope=openid 电子邮件配置文件脱机\u访问组.ReadWrite.All&state=a%2Bb
。无论我用
a+b
a%2Bb
传递状态,它都会返回正确的值。唯一的区别是该值不区分大小写。