【问题标题】:Azure Active Directory OAuth 2.0 Authorization gives Bad RequestAzure Active Directory OAuth 2.0 授权给出错误请求
【发布时间】:2017-06-20 16:26:00
【问题描述】:

在请求授权码时,如果 state url 参数有以下值,https://login.microsoftonline.com/oauth2/authorize 会给我一个 Bad Request。

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

如果我删除编码值:<<>>,它运行良好。目前我有一些限制,我无法删除这些值。

documentation 中说“状态”是包含在请求中的值,也将在令牌响应中返回。 可以是任意内容的字符串。

【问题讨论】:

    标签: azure oauth active-directory oauth2


    【解决方案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 替换为任何字符 a-z。所以 HTML 元素是禁忌 :)

    【讨论】:

    • 太好了,我会看看我能做些什么。
    【解决方案2】:

    虽然https://www.rfc-editor.org/rfc/rfc6749#appendix-A.5 中允许使用这些字符(引用该字段的ABNF 语法,它基本上是所有可打印字符,包括空格、VSCHAR、https://www.rfc-editor.org/rfc/rfc5234),但双> 似乎在语义上不正确。

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

    在大多数情况下,一个短字符串就足够了,如果你保持字符串简短,你可能会帮自己一个忙,节省线路上的字节和额外的解析开销。

    这里有一个很好的使用 oauth2 端点的概述(诚然与 Bing Ads 一起使用,但原则和建议适用于这种情况):

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

    如果我能找到状态字段的确切限制,我会更新我的答案。

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2018-03-08
      • 1970-01-01
      相关资源
      最近更新 更多