我收到了Google接受的有效OAuth2令牌,但GoogleIdTokenVerifier甚至無法解析它。有效的Google OAuth2令牌無法解析?
令牌是ya29.1.AADtN_XcjzHgauKetBvrbgHImGFg1pjiHRQAKHyTglBDjEZsTPUMQJ5p-xAKtk955_4r6MdnTe3HZ08
(不用擔心,它已經過期)。
它使用
accountManager.blockingGetAuthToken(account, "oauth2:https://www.googleapis.com/auth/userinfo.email", true);
當我打電話https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=...
我得到這樣
{
"issued_to": "34951113407.apps.googleusercontent.com",
"audience": "34951113407.apps.googleusercontent.com",
"scope": "https://www.googleapis.com/auth/userinfo.email",
"expires_in": 3175,
"email": "[email protected]",
"verified_email": true,
"access_type": "offline"
}
理智的結果,所以它必須是一個有效令牌在Android上獲得的。 但是,當我打電話
new GoogleIdTokenVerifier(new UrlFetchTransport(), JacksonFactory.getDefaultInstance())
.verify(authToken)
它給了我
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('É' (code 201)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: [email protected]; line: 1, column: 2]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1378)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:599)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:520)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2275)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:788)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:674)
at com.google.api.client.json.jackson2.JacksonParser.nextToken(JacksonParser.java:55)
at com.google.api.client.json.JsonParser.startParsing(JsonParser.java:213)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:372)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:328)
at com.google.api.client.json.JsonParser.parseAndClose(JsonParser.java:158)
at com.google.api.client.json.JsonParser.parseAndClose(JsonParser.java:140)
at com.google.api.client.json.JsonFactory.fromInputStream(JsonFactory.java:206)
at com.google.api.client.json.webtoken.JsonWebSignature$Parser.parse(JsonWebSignature.java:480)
at com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.parse(GoogleIdToken.java:57)
at com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier.verify(GoogleIdTokenVerifier.java:190)
通過調試JsonWebSignature似乎令牌有效載荷僅僅是1
。
- 的Android 4.4.2
- com.google.http客戶端:谷歌-HTTP-客戶jackson2:1.17.0-RC
- com.fasterxml.jackson.core:傑克遜 - 芯:2.3 .0(也試過包含google-http-client-jackson的臨時依賴2.1.3) 也試過GsonFactory,異常是不同的,但也明顯無法通過JsonWebSignature.parse()解析。
我做錯了什麼?那裏有不同的令牌格式嗎?
謝謝。是的,我已在[我的應用](https://github.com/dlazerka/mf)中切換到[Google登錄](https://developers.google.com/identity/sign-in/android/) /blob/master/android/src/main/java/me/lazerka/mf/android/auth/SignInManager.java),這似乎是目前推薦的方法。 –