我有一个Web应用程序,用户可以在其中sign in with Google
。
在登录过程中,我添加了一个能够访问Google日历的范围。
现在用户已登录,我想-在服务器端-获取其当前的Google访问令牌,以便发出请求并获取其事件列表。
是否有一种方法可以获取当前的OAuth令牌(无需刷新令牌),以便我在服务器端完全实现此目的?
答案 0 :(得分:0)
我想您可以检查此article并特别注意网站的建议。
我了解您已经配置了同意屏幕,这是using OAuth 2.0上基本步骤的第一步。因此,我知道您只需执行以下步骤:
我想您也可以看看其他doc来获得更多GCP见解,以了解您使用用户令牌授权请求的目标
已编辑: 关于Firebase身份验证,我知道这是在用户设备上发生的,您可以使用一些代码来检索令牌,然后将其发送到此处所述的后端服务器。
作为示例,下面是在Android中检索令牌的示例代码:
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
.addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (task.isSuccessful()) {
String idToken = task.getResult().getToken();
// Send token to your backend via HTTPS
// ...
} else {
// Handle error -> task.getException();
}
}
});
答案 1 :(得分:0)
每当用户通过Google或第3方(Authorization Code
)登录您的应用/网站时,此授权码就会交换为AccessToken
和RefreshToken
。
通过Google发送的AccessToken
通常有效期为60分钟。
我们将其分为两部分:
您可以将firebase和gapi一起使用来实现。您将获得AccessToken
,可以将其发送回服务器以添加到日历。
Firebase&gapi的大多数方法在内部处理AuthorizationCode
流。他们甚至在60分钟后进一步刷新AccessToken
。对于大多数开发人员而言,这是有益的,因为他们将不必担心管理所有令牌。
此方法可对开发人员隐藏RefreshToken
和AuthorizationCode
。即使您的服务器具有访问令牌,它也无法刷新它,并且将被视为无用。
要实现完全脱机访问,在获取AuthorizationCode
的初始请求中,您需要将HTTP GET参数access_type
发送到offline
GAPI为您提供了grantOfflineAccess() method,它返回了AuthorizationCode
,以后可以在服务器上使用它来获取访问令牌和刷新令牌。
注意:如果要在数据库中存储AuthorizationCode
,请确保它是安全的。由于安全原因而设置了Firebase中的限制。通常不与AuthorizationCode对话会更安全。
更多链接