如何刷新Google" accessToken"使用" refreshToken"在客户端上

时间:2018-03-06 22:00:47

标签: oauth oauth-2.0 firebase-authentication google-oauth expo

我有一个使用Expo.Google.logInAsync通过Google登录的React Native应用。这会返回accessToken(1小时后过期)和refreshToken

我将此accessToken传递给Firebase Web SDK:

const cred = firebase.auth.GoogleAuthProvider.credential(null, accessToken);
await firebase.auth().signInWithCredential(cred).catch(console.error);
const idToken = await firebase.auth().currentUser.getIdToken(true).catch(console.error);

我应该如何使用此Google refreshToken保持Firebase idToken有效并在一小时后登录?

我是否应该在下面提出请求并重新重新启动Firebase signInWithCredential

https://developers.google.com/identity/protocols/OAuth2WebServer#exchange-authorization-code

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=<your_client_id>&
client_secret=<your_client_secret>&
refresh_token=<refresh_token>&
grant_type=refresh_token

我可以从Google API凭据页面获取client_secret。如果可能的话,大多数人会说要将它保留在服务器上,但有些人说如果需要,你也可以将它嵌入到客户端代码中。

client_secret是否设计用于手机应用中的客户端代码?

2 个答案:

答案 0 :(得分:2)

Firebase会话无限期。 Firebase Auth在登录后返回ID令牌和刷新令牌,每次ID令牌到期时,刷新令牌用于获取新的ID令牌。客户端SDK将自行处理刷新。您只需调用getIdToken(),它将返回缓存的ID令牌(如果未过期)或使用基础刷新令牌检索新令牌。此处不需要您引用的Google OAuth刷新令牌。

答案 1 :(得分:0)

要澄清一下,现在无法通过Firebase Auth流程刷新Google OAuth令牌吗?