我可以使用 passport-google 回调来验证 android/ios 用户吗?
Posted
技术标签:
【中文标题】我可以使用 passport-google 回调来验证 android/ios 用户吗?【英文标题】:Can I use the passport-google callback to authenticate android/ios users? 【发布时间】:2016-05-08 12:29:27 【问题描述】:我有一个使用 google-passport-oauth2 进行身份验证的 node.js 服务器。我的服务器端代码与the documentation 中的代码类似:
app.get('/auth/google',
passport.authenticate('google', scope:
[ 'https://www.googleapis.com/auth/plus.login',
, 'https://www.googleapis.com/auth/plus.profile.emails.read' ]
));
app.get( '/auth/google/callback',
passport.authenticate( 'google',
successRedirect: '/auth/google/success',
failureRedirect: '/auth/google/failure'
));
我认为/auth/google
重定向到 google 的登录,当收到权限时,google 配置文件和令牌被发送到回调 /auth/google/callback
。
现在我正在制作一个想要使用此 API 进行身份验证的 android 应用程序。我正在使用directions for integrating Google Sign-In 在谷歌端进行身份验证。现在我的 android 应用程序具有配置文件和令牌,并且想要 verify it with my server。
我尝试过使用passport-google-token
和passport-google-id-token
执行此操作(不确定区别...),但无论出于何种原因它都不起作用。现在我正在寻找其他可能性,例如 node.js 的 Google 客户端 API 库,但它看起来很笨重。然后是 tokeninfo 端点,它涉及额外的请求和更多的延迟。或者我应该看看express-jwt
?
突然间,我想知道...我不能将令牌从我的 android 应用程序传递到auth/google/callback
的服务器吗?这会让事情变得简单一些。我认为这一定是一个白日梦,因为我还没有找到任何关于这样做的信息。但是如果可能的话,我应该如何格式化请求中的令牌/配置文件数据以便passport.authenticate()
方法识别它? (JSON、表单数据、标题)
如果这不能完成,我正在为节点提供有据可查的令牌验证库的建议......
【问题讨论】:
我仍然遇到一些麻烦,您是否同时使用passport-google-oauth
和 passport-google-plus-token
在不同的路线上相互结合使用。如果我只使用 passport-google-plus-token
我如何才能在浏览器中工作(不是 Android 或 ios 应用程序)。
我从未使用过passport-google-plus-token
。
【参考方案1】:
我仍然不知道如何重用google-passport-oauth2
路由,但我确实知道如何使用passport-google-id-token 验证Google 的idToken。
The documentation 说:
对该路由的发布请求应包含一个 JSON 对象,其 键 id_token 设置为客户端从 Google 收到的那个(例如 成功登录 Google+ 后)。
但它仅在作为查询字符串发送时才有效(GET 或 POST 有效)。
https://localhost:8888/auth/googletoken?id_token=xxxxxxxxxx
我有a feeling 这不是最安全的方法,但我稍后会处理它。
编辑:事实证明,如果没有客户端 ID(在您的应用程序中),令牌是无用的,因此可以通过查询字符串发送它。
编辑 2:google-id-token
开发人员has reminded me 之一,只有在安装了body-parser
时才会收到 JSON。
【讨论】:
我和你的处境相似。事情进展如何? 恐怕这仍然是我正在使用的方法。如果你有什么发现,请告诉我。 我什至无法让它工作。出于某种原因,当我发布或获取查询字符串中的令牌时,我只会得到 invalid_token ...... 显然我的 url 中有 access_token 而不是 id_token。谷歌说在这里把它放在查询字符串中,所以我认为我们不应该担心。 developers.google.com/identity/sign-in/android/… 是的,好像是the token is worthless without the client ID。这很好:现在我不需要修复任何东西。以上是关于我可以使用 passport-google 回调来验证 android/ios 用户吗?的主要内容,如果未能解决你的问题,请参考以下文章