我可以使用 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-tokenpassport-google-id-token 执行此操作(不确定区别...),但无论出于何种原因它都不起作用。现在我正在寻找其他可能性,例如 node.js 的 Google 客户端 API 库,但它看起来很笨重。然后是 tokeninfo 端点,它涉及额外的请求和更多的延迟。或者我应该看看express-jwt

突然间,我想知道...我不能将令牌从我的 android 应用程序传递到auth/google/callback 的服务器吗?这会让事情变得简单一些。我认为这一定是一个白日梦,因为我还没有找到任何关于这样做的信息。但是如果可能的话,我应该如何格式化请求中的令牌/配置文件数据以便passport.authenticate() 方法识别它? (JSON、表单数据、标题)

如果这不能完成,我正在为节点提供有据可查的令牌验证库的建议......

【问题讨论】:

我仍然遇到一些麻烦,您是否同时使用 passport-google-oauthpassport-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 用户吗?的主要内容,如果未能解决你的问题,请参考以下文章

在构建Android库时,我可以使用什么模式来支持Activity中已配置的回调

jQuery 插件:使用回调来改变插件的行为

我可以用啥来替换嵌套的异步回调?

我可以使用池回调实现多处理计数器吗?

是否可以在线程中对非托管函数执行C#回调?

用于回调的 iOS NSError/NSDictionary