我們正在使用應用服務身份驗證來保護Web API並將Google用作身份驗證提供程序。它的工作原理,當我們火從瀏覽器的請求(當會話信息的cookie中)使用Google oAuth 2.0承載令牌進行Azure應用服務身份驗證
IIS日誌按預期:
2016-05-29T13:51:19 PID放牧收到[3600]請求:GET https://XXXXXX.azurewebsites.net/api/user 2016-05-29T13:51:19 PID [3600] Verbose爲站點 'XXXXXX.azurewebsites.net'找到'AppServiceAuthSession'cookie。長度:728. 2016-05-29T13:51:19 PID [3600]詳細使用'Session Cookie'認證成功驗證了[email protected] 。
但是,當我們使用API測試工具,如郵差,並設置授權頭與承載令牌,它總是導致重定向。
IIS日誌:
2016-05-29T13:53:38 PID [3600]詳細接收的請求:POST https://XXXXX.azurewebsites.net/api/user 2016-05-29T13:53:38 PID [3600]信息重定向: https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=XXXXXXX-XXXXX7attpunn9smo4.apps.googleusercontent.com&redirect_uri=https%3A%2F%2FXXXXXX.azurewebsites.net%2F.auth%2Flogin%2Fgoogle%2Fcallback&scope=openid+profile+email&state=nonce%3De5f4aabe11cb4544bf18d00920940d47_20160529135838%26redir%3D%2Fapi%2Fuser
我們還試圖設置 X-謨-AUTH頭具有相同的承載道理,我們會看到錯誤作爲標記不是預期的格式。顯然它期望編碼的JWT令牌。
IIS日誌:
016-05-29T13:51:52 PID [3600]詳細接收的請求:POST https://XXXXXX.azurewebsites.net/api/user 2016-05-29T13:51:52 PID [3600]警告JWT驗證失敗:IDX10708: 'System.IdentityModel.Tokens.JwtSecurityTokenHandler' 無法讀取該 字符串: '承載 ya29.XXXXXXXXXX_RDrX_zsuvMx49e_9QS5ECz9F1yhDHe5j4H9gRN6opkjLXvN1IJZjHXa_Q'。 字符串需要在緊湊JSON格式,它是以下形式: '..' .. 2016-05-29T13:51:52 PID [3600] 信息重定向: https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=XXXXXXX-k5nj6dkf987attpunn9smo4.apps.googleusercontent.com&redirect_uri=https%3A%2F%2FXXXXXX.azurewebsites.net%2F.auth%2Flogin%2Fgoogle%2Fcallback&scope=openid+profile+email&state=nonce%3De15b0915406142378XXXXX_20160529135652%26redir%3D%2Fapi%2Fuser
注: 從Google獲取的不記名令牌有效,因爲我們可以通過撥打電話 https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=[token]
驗證詳情請建議。
Chris,我們從未到達第3步,因爲服務器返回內部服務器錯誤。 –
使用Google,我們首先獲取auth_code,然後在隨後的請求中使用它來獲取id_token。 https://developers.google.com/identity/protocols/OpenIDConnect#server-flow IIS日誌: 警告呼叫HTTP端點https://www.googleapis.com/oauth2/v4/token失敗:400(錯誤的請求)。部分響應:{ 「錯誤」:「invalid_grant」, 「error_description」:「代碼已被兌換。」 } ..如果重播先前使用的認證碼,也會發生這種情況。 –
錯誤是有道理的。您可以使用Google的授權流程,在一個響應中返回授權碼和id_token嗎?例如「response_type = code id_token」? https://developers.google.com/identity/protocols/OpenIDConnect#authenticationuriparameters。或者,如果您使用Android,是否可以通過一些Android API調用獨立獲取auth_code和id_token? –