Firebase管理员-获取Google OAuth令牌
我有一个web应用程序,用户可以Firebase管理员-获取Google OAuth令牌,firebase,firebase-authentication,google-cloud-functions,Firebase,Firebase Authentication,Google Cloud Functions,我有一个web应用程序,用户可以使用Google登录 在登录过程中,我添加了一个能够访问谷歌日历的范围 现在用户已经登录,我想在服务器端获取他们当前的Google访问令牌,以便发出请求并获取他们事件的列表 有没有办法获取当前的OAuth令牌(不需要刷新令牌)以便我完全在服务器端完成此操作?我想你可以检查一下,并特别注意网站推荐 我知道您已经配置了同意屏幕,这是上的基本步骤的第一步。因此,我理解您只需执行以下步骤: 从Google授权服务器获取访问令牌 检查用户授予的访问范围 将访问令牌发送到AP
使用Google登录
在登录过程中,我添加了一个能够访问谷歌日历的范围
现在用户已经登录,我想在服务器端获取他们当前的Google访问令牌,以便发出请求并获取他们事件的列表
有没有办法获取当前的OAuth令牌(不需要刷新令牌)以便我完全在服务器端完成此操作?我想你可以检查一下,并特别注意网站推荐
我知道您已经配置了同意屏幕,这是上的基本步骤的第一步。因此,我理解您只需执行以下步骤:
从Google授权服务器获取访问令牌
检查用户授予的访问范围
将访问令牌发送到API
我认为,您还可以查看另一个,以了解有关您使用用户令牌授权请求的目标的更多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();
}
}
});
FirebaseUser mUser=FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(真)
.addOnCompleteListener(新的OnCompleteListener(){
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
字符串idToken=task.getResult().getToken();
//通过HTTPS将令牌发送到后端
// ...
}否则{
//Handle error->task.getException();
}
}
});
我想说的是,您可以检查这一点,并特别注意网站推荐
我知道您已经配置了同意屏幕,这是上的基本步骤的第一步。因此,我理解您只需执行以下步骤:
从Google授权服务器获取访问令牌
检查用户授予的访问范围
将访问令牌发送到API
我认为,您还可以查看另一个,以了解有关您使用用户令牌授权请求的目标的更多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();
}
}
});
FirebaseUser mUser=FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(真)
.addOnCompleteListener(新的OnCompleteListener(){
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
字符串idToken=task.getResult().getToken();
//通过HTTPS将令牌发送到后端
// ...
}否则{
//Handle error->task.getException();
}
}
});
了解一下OAuth 2.0
每当用户通过Google或第三方注册到您的应用程序/网站时,授权码
,此授权码将被交换为AccessToken
&RefreshToken
通过Google发送的AccessToken
通常有效期为60分钟
脱机访问(服务器端)
让我们将其分解为两部分:
如果您需要在用户上次活动的60分钟内更新
您可以使用firebase和gapi来实现这一点。您将获得AccessToken
,可以将其发送回服务器以添加到日历中
如果您需要在用户上次活动60分钟后更新
Firebase&gapi最常用的方法是在内部处理AuthorizationCode
流。他们甚至在60分钟后进一步刷新AccessToken
。这对大多数开发人员都是有益的,因为他们不会为管理所有令牌而头疼
但是,此方法对开发人员隐藏了refreshttoken
&AuthorizationCode
。也就是说,即使您的服务器拥有访问令牌,它也无法刷新它,并且将被视为无用
要实现完全脱机访问,在获取AuthorizationCode
的初始请求中,您需要向offline
发送一个HTTP get参数
GAPI为您提供了一个返回AuthorizationCode
的函数,稍后可在您的服务器上使用该函数获取访问令牌和刷新令牌
注意:如果要在数据库中存储AuthorizationCode
,请确保它是安全的。由于安全原因,在Firebase中设置了限制。通常不与授权代码交谈更安全
更多链接
了解一下OAuth 2.0
每当用户通过Google或第三方注册到您的应用程序/网站时,授权码
,此授权码将被交换为AccessToken
&RefreshToken
通过Google发送的AccessToken
通常有效期为60分钟
脱机访问(服务器端)
让我们将其分解为两部分:
如果您需要在用户上次活动的60分钟内更新
您可以使用firebase和gapi来实现这一点。您将获得AccessToken
,可以将其发送回服务器以添加到日历中
如果您需要在用户上次活动60分钟后更新
Firebase&gapi最常用的方法是在内部处理AuthorizationCode
流。他们甚至在60分钟后进一步刷新AccessToken
。Th