如何使用 Node 服务器验证 Android Google 登录

Posted

技术标签:

【中文标题】如何使用 Node 服务器验证 Android Google 登录【英文标题】:How to authenticate Android Google sign in with Node server 【发布时间】:2016-11-07 16:05:45 【问题描述】:

我正在尝试在我的 android 应用上实现 Google 帐户登录并在我的节点服务器中对其进行身份验证。

我按照tutorial 成功在 Android 上实现了 Google 登录按钮,但我不知道如何在我的后端进行身份验证。

从这个documentation,我假设我需要获取并发送getIdToken()getServerAuthCode(),但我不确定我应该发送哪一个,所以投票发送getServerAuthCode()

在我的节点服务器部分,我安装了这个library 并使用了这个方法:

var google = require('googleapis'); 
var plus = google.plus('v1'); 
var OAuth2 = google.auth.OAuth2; 
var oauth2Client = new OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);

// Retrieve tokens via token exchange explained above or set them:
oauth2Client.setCredentials(   
  access_token: 'ACCESS TOKEN HERE',  
  refresh_token: 'REFRESH TOKEN HERE' 
);

plus.people.get( 
userId: 'me', 
auth: oauth2Client , 
function(err,response)    // handle err and response );

我认为这是正确的方法,但后来我找到了this,我意识到getServerAuthCode()返回的数据需要换成真正的访问令牌才能从用户那里获取信息。

我的问题是:

1) 我应该从 Android 向 Node 发送哪些数据? (在 Node 上,我得到一些基本信息,例如电子邮件和用户名)。

2) 如果我发送正确的数据,我用于 Node 的库是正确的吗?如果我没有发送正确的数据,您建议我使用哪个库来验证 getIdToken()

3) 在节点上,我应该如何交换来自getServerAuthCode() 的数据以获得正确的访问和刷新令牌?

欢迎提供有关如何进行身份验证和示例的任何其他信息。

谢谢。

【问题讨论】:

【参考方案1】:

这可能是您正在寻找的解决方案。 https://developers.google.com/identity/sign-in/android/backend-auth

这允许您使用 HTTPS 将 ID 发送回您的服务器。然后,在服务器上,验证 ID 令牌的完整性,并使用令牌中包含的用户信息来建立会话或创建新帐户。..

【讨论】:

以上是关于如何使用 Node 服务器验证 Android Google 登录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Firebase 身份验证服务并在我们自己的数据库中拥有用户?

如何在 Node/Express 中使用 CAC 对用户进行身份验证

如何使用 aws-amplify 验证 node/express 中的 accessToken?

我可以使用 passport-google 回调来验证 android/ios 用户吗?

如何使用activedirectory / ldapjs模块正确验证Node.js应用程序?

Angular/Node 验证用户