2017-02-03 67 views
2

请求授权码时,如果状态url参数具有以下值,则https://login.microsoftonline.com/oauth2/authorize会给我一个错误请求。Azure Active Directory OAuth 2.0授权给出错误请求

state=%3C%3CMULE_EVENT_ID%3D0-6cadfe22-e9ea-11e6-99ff-205120524153%3E%3E 

如果我删除编码值:<<>>,它工作得很好。目前我有一些限制,我无法删除这些值。

documentation中表示“state”是请求中包含的值,该值也将在令牌响应中返回。 它可以是您希望的任何内容的字符串。

回答

2

双< < >>显得语义上不正确,尽管这些字符在https://tools.ietf.org/html/rfc6749#appendix-A.5允许(参考ABNF语法这一领域,这基本上是所有可打印的字符,包括空间, VSCHAR,https://tools.ietf.org/html/rfc5234)。

但是,当我们查看state字段的预期用途时,它将用于从服务中发回令牌,以便您的应用程序能够验证本地状态以避免CSRF攻击。

在大多数情况下,一个简短的字符串应该就足够了,如果你保持字符串简短,节省了字节和附加的解析开销,你可能会为你自己一个忙。

有使用与这里的oauth2端点的一个很好的概述(诚然与Bing Ads广告,但校长和建议都适用于这种情况下):

https://msdn.microsoft.com/en-us/library/bing-ads-user-authentication-oauth-guide.aspx

如果我能找到确切的限制在国家领域,我会更新我的答案。

1

那么,文档似乎有点不对。我测试了各种状态字符串,并且它始终失败的原因是以%3C开始状态字符串。所以在字符串的某些地方,一个小于号的符号很好。

编辑:有一些非常奇怪的事情。

这种失败:

state=MUL%3CE_EVENT_ID%3D0-6cadfe22-e9ea-11e6-99ff-205120524153%3E%3E 

但这个工程:

state=MULE%3C_EVENT_ID%3D0-6cadfe22-e9ea-11e6-99ff-205120524153%3E%3E 

但是这也失败:

state=MULE_%3CEVENT_ID%3D0-6cadfe22-e9ea-11e6-99ff-205120524153%3E%3E 

我的理论是,它不允许任何看起来像一个有效的HTML标签。这就是为什么它会允许%3C _....%3D,但*%3Ca%3e不是。您可以用任何字符a-z代替a。所以HTML元素是一个没有没有:)

+0

太好了,我会看看我能做些什么。 –