我在Android上GoogleAuthUtil
使用Google Play Services
。在致电GoogleAuthUtil.getToken(context, userName, scope)
后,我得到了一个这样的代币:
ya29.wQBWztab5kcgMLcMbAI0LwFzHC_DPrxauSWbX4P6KOnBEOgjcm9V7OI9AFr6JGxDY54gP00RemzzgML56_gWRHn8Q5jK16BLY-0y83Gc5vfe3xN-QpyM4d7z
这是一个access_token,可用于调用Google Apis。然后,我如何获得刷新令牌以刷新此access_token,因为我在我的Android项目中也使用Google oauth java library和YouTube Java Library,我想使用这两个库来维护/管理{{1} },access_token
和refresh token
值。 (使用Google oauth java库时,其返回的expires_in
包含TokenResponse
,access_token
和refresh token
)
提前致谢。
答案 0 :(得分:2)
您无法使用GoogleAuthUtil.getToken()
直接获取refreshToken,但如果您在每次收到401错误时致电getToken()
,GoogleAuthUtil会在需要时为您返回新的有效令牌。
答案 1 :(得分:2)
要获取刷新令牌,请确保您的范围采用以下格式:
Account account = new Account(mEmail, GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
mScope="oauth2:server:client_id:"+ OAUTH_WEBCOMPONENT_ID+":api_scope:"+"https://www.googleapis.com/auth/userinfo.email";
return GoogleAuthUtil.getToken(mActivity, account, mScope);
这将为您提供授权代码,该代码可以发送到您的Web组件。
您的webcomponent只能使用此授权代码一次获取访问令牌并使用此代码刷新令牌。您必须在数据库中保存刷新令牌,这样当访问代码不再有效时,您可以在需要时获得新的访问令牌。
POST /oauth2/v3/token HTTP/1.1
Host: www.googleapis.com
Content-length: 233
content-type: application/x-www-form-urlencoded
user-agent: google-oauth-playground
code=4%2FVL2YMuPMheOP2-0vyKBSfGd-4er5GsMY17Ecp8ITK4U&redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&client_id=407408718192.apps.googleusercontent.com&client_secret=************&scope=&grant_type=authorization_code
您可以在此处模拟其工作原理:
答案 2 :(得分:0)
调用requestServerAuthCode(String, true)
而不是requestServerAuthCode(String)
,该请求将在请求成功时强制其包含一个refresh_token。
val task = GoogleSignIn.getSignedInAccountFromIntent(data);
task.addOnSuccessListener {
val account = task.getResult(ApiException::class.java)
val authCode = account!!.serverAuthCode
// Send authcode to server to exchange access and refresh tokens.
exchangeAuthCodeForAccessToken(authCode)
}