2017-02-03 108 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

太好了,我會看看我能做些什麼。 –