2017-08-15 298 views
0

我有多個通過Microsoft Graph進行身份驗證的頁面。一個不行。它返回一個(400) Bad Request,與AADSTS70000: The provided 'code_verifier' input value does not match the original 'code_challenge.'Microsoft Graph身份驗證錯誤AADSTS70000 code_verifier與code_challenge不匹配

的ERROR_DESCRIPTION所有重定向URL的下我的Microsoft應用程序被定義。除了URI之外,它們是相同的。

我找不到任何實際上說明他們的意思是code_verifiercode_challenge。由於我從來沒有通過這些名稱傳遞任何參數,所以它們必須指的是在登錄前後傳入的其中一個參數。但我真的需要知道他們所指的是什麼,所以我可以試圖找出真正的問題似乎是什麼。

我已經看到幾個帖子聲稱需要一個尾部斜線,但我沒有任何我的重定向URI的,並且他們大多數工作。

這裏是發起請求:

href="https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={redacted}&response_mode=form_post&response_type=code&redirect_uri=https://wrmatthiesen.com/ApprovedContact/InviteeSignup.aspx&scope=openid offline_access User.Read Calendars.ReadWrite Contacts.Read Mail.Send& nonce=mauth:-6:Y:Y;1b803d44-f70b-4fed-b6c3-bc3afdb55646& state=mauth:-6:Y:Y;1b803d44-f70b-4fed-b6c3-bc3afdb55646"

這是一次我收到驗證碼跟進要求:

code=Mabb3f2bb-25b0-8e3b-541e-9763dd1e4136&redirect_uri=https%3a%2f%2fwrmatthiesen.com%2fApprovedContact%2fInviteeSignup.aspx&grant_type=authorization_code&client_id={redacted}&client_secret={redacted}&scope=openid+offline_access+User.Read+Calendars.ReadWrite+Contacts.Read+Mail.Send

+0

您是否正在使用狀態參數,並將此值與初始和輔助令牌請求一起傳遞? –

+0

是的,我爲每個請求以相同的方式傳遞狀態參數。我相信我正在使成功的請求和失敗的請求完全相同。 (顯然不是,因爲錯誤)。這就是爲什麼我試圖通過code_verifier和code_challenge來縮小他們特別指的是什麼。這可能是我只能俯瞰的東西。 –

+0

你可以添加你打給你的問題的HTTP URI嗎?這個錯誤意味着在兩個認證步驟之間有所改變。通常情況下,當您在狀態參數中進行了更改或者您使用了不同的重定向URI時會發生這種情況。 –

回答

0

1)您最初的要求包括幾個未編碼字符串包括特殊字符。

2)你有一對夫婦的空間,你的查詢字符串:& nonce& state

你是第一個URL應該是這樣的:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=00000000-0000-0000-0000-000000000000&response_mode=form_post&response_type=code&redirect_uri=https://wrmatthiesen.com/ApprovedContact/InviteeSignup.aspx&scope=openid+offline_access+User.Read+Calendars.ReadWrite+Contacts.Read+Mail.Send&nonce=mauth%3A-6%3AY%3AY%3B1b803d44-f70b-4fed-b6c3-bc3afdb55646&state=mauth%3A-6%3AY%3AY%3B1b803d44-f70b-4fed-b6c3-bc3afdb55646

的位置組件是:

  • client_id:00000000-0000-0000-0000-000000000000
  • response_mode:form_post
  • RESPONSE_TYPE:code
  • REDIRECT_URI:https%3A%2F%2Fwrmatthiesen.com%2FApprovedContact%2FInviteeSignup.aspx
  • 範圍:openid+offline_access+User.Read+Calendars.ReadWrite+Contacts.Read+Mail.Send
  • 現時:mauth%3A-6%3AY%3AY%3B1b803d44-f70b-4fed-b6c3-bc3afdb55646
  • 狀態:mauth%3A-6%3AY%3AY%3B1b803d44-f70b-4fed-b6c3-bc3afdb55646

在第二次通話時,您POST身體看起來是正確的:

  • 代碼:Mabb3f2bb-25b0-8e3b-541e-9763dd1e4136
  • REDIRECT_URI:https%3A%2F%2Fwrmatthiesen.com%2FApprovedContact%2FInviteeSignup.aspx
  • grant_type:authorization_code
  • CLIENT_ID:00000000-0000-0000-0000-000000000000
  • client_secret:00000000-0000-0000-0000-000000000000
  • 範圍:`的OpenID + offline_access + User.Read + Calendars.ReadWrite +聯繫人.Read +郵件。發送
+0

不幸的是,這些差異也來自於工作頁面和我的測試工具。 –

+0

對不起,趕快輸入。 - 參數之前的空格來自複製並粘貼到此處,因此它們不存在。不幸的是,所有其他的編碼差異也來自工作頁面和我的測試工具。在第一次請求時,我一直在範圍之間使用空格,並且它們是「或」%20,它們都有效。與&parm分隔符一樣。無論它是&或者&它的作品。 –

0

我一直在傳遞一個nonce參數,因爲我一直這樣做。我只是讓它與我的狀態參數相符。在這種情況下,我的隨機數看起來像這樣:「nonce = mauth:-6:Y:Y; b5a41fdb-4b42-494e-85e1-8c193006d444」。

當我放棄除「mauth:」之外的所有內容時,它就起作用了。

然後我放棄了所有的一致性,它仍然有效。所以,現在,我不會通過nonce。