Google 登录或 OpenID Connect

Posted

技术标签:

【中文标题】Google 登录或 OpenID Connect【英文标题】:Google Sign-In or OpenID Connect 【发布时间】:2018-09-19 06:42:47 【问题描述】:

我一直在尝试在我的网络应用上添加使用 Google OpenID Connect 的身份验证。我从文档https://developers.google.com/identity/protocols/OpenIDConnect 的 OpenID Connect 页面开始。步骤很清楚,我已经能够生成一个可以对用户进行身份验证的 URL。一切似乎都很好。用户点击链接,被定向到她进行身份验证的谷歌;然后她被重定向到我的应用程序的端点,它将auth_code 交换为access_token,返回的state 与她在session['openid_state'] 中的内容相匹配,等等。

我现在的问题是制作一个合适的品牌按钮。 Google 的 OIDC 文档提供了有关如何创建身份验证 URL 的提示,但并未向您展示如何制作按钮。我认为您必须使用 css、html 和一些静态文件。如果可能的话,我宁愿避免这种情况。

在 OIDC 文档中,从一开始就告诉您,如果您想要“使用 Google 登录”,您应该使用 Google 登录。那是什么意思?我是否应该使用 Google 登录而不是 OIDC 并放弃 OIDC 文档中当前描述的所有步骤?或者我应该使用它作为快速处理浏览器端的替代方式?

当我查看 Google Sign-In API 时,我不明白我的 OIDC 网址如何匹配,或者我可以在哪里放置参数,例如 state。据说 Google Sign-In 是建立在 OIDC 之上的,如何?

【问题讨论】:

您好,我有一个关于state 参数的问题。我已经发布了一个问题,但它被否决了。我想知道它是否应该在会话变量中创建到服务器后返回到 html。如果是,我应该何时以及如何退货?如果两个状态相等,我还应该检查客户端吗?非常感谢。 【参考方案1】:

OpenIDConnect 是一种协议。它只描述了一种获取 id_token 的方法,但没有告诉您如何进行整个生命周期管理。例如当用户回来时会发生什么等。当然,如果您愿意,您可以自己实现它,但考虑一下您在互联网上进行开发时实现 TCP/IP 协议的频率。

Google 登录为您提供了一个界面简单的封装库。您只需要调用该函数,它会负责与 Google 的整个交互,除了传递配置之外,您不需要关心。

由于您进行了 JS 调用,您可以保留您拥有的“状态”,而无需将其传递给 Google 并返回。在纯协议中,当一个完整的页面重定向到谷歌时,它被描述和需要,因此返回 url 可以带回状态。但是您没有对库进行整页重定向。我确定你看到了这个reference doc

【讨论】:

以上是关于Google 登录或 OpenID Connect的主要内容,如果未能解决你的问题,请参考以下文章

仅向 Google 网站登录请求“openid”范围

使用不同的 redirect_uri 和 openid.realm 参数从 Google OpenID 2.0 迁移到 OpenID Connect

Google OpenID Connect:如何验证 id_token?

OpenId Connect登录流程图

验证 Google OpenID Connect JWT ID 令牌

验证 Google OpenID Connect JWT ID 令牌