Azure Active Directory中的OAuth:拒绝管理员同意范围后,Azure AD会返回State参数的错误值

时间:2017-08-14 21:31:29

标签: azure-active-directory

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

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

如果请求指定了需要管理员同意并且过去未被授予的范围,则Azure会按预期返回以下页面:

App requires administrator consent

我正在尝试验证我的应用程序逻辑,以处理从Azure返回的错误。因此,我点击Return to the application without granting consent链接即表示同意。之后,Azure预计会向我的应用程序的重定向URI返回错误响应。 Azure按如下方式填充HTTP正文中的数据:

Error response after denying admin-consent scopes

Azure将State参数值填充为a%252bb。这是不正确的。预期值应为a%2Bb - 即与之前在前面描述的调用Azure授权代码请求端点时指定的值相同。看起来Azure以某种方式执行了双重URL编码 - 换句话说,编码已经url编码的State参数,将a%2Bb更改为a%252bb。 (%已编码为%25。此外,B以某种方式成为b

,这很奇怪

似乎Azure在代码路径中存在此问题,用于处理用户单击Return to the application without granting consent链接以拒绝管理员同意范围。对于用户拒绝用户同意范围的其他情况,Azure似乎没有此问题。 Azure为State参数返回正确的值,如下所示:

Error response after denying user-consent scopes

1 个答案:

答案 0 :(得分:1)

我今天再试一次。看起来微软刚刚删除了Return to the application without granting consent链接。因此,此帖子中提到的问题不再存在。

You can't access this application page