【问题标题】:OpenID Connect use caseOpenID 连接用例
【发布时间】:2016-10-19 15:47:41
【问题描述】:

最近我发现了 OpenID Connect 标准,现在我正在努力寻找正确的使用方法。

假设我正在构建一个非常标准的 Web 应用程序,它必须具有经过身份验证的用户的概念。所以我的第一个意图是用用户表构建一个本地数据库,包含用户 ID、电子邮件、名字和姓氏、密码、盐等。 这意味着我需要实现所有相关功能,例如注册、登录、更改/忘记密码等。

我没有这样做,而是选择使用 OpenID 连接并利用存储在其他地方(例如 Google)的用户信息。

然后我可以执行通常的 OAuth2 魔术来重定向用户、请求同意等等。

从这一点开始,我有点迷失了方向。在 Google(或其他任何 AS)将基本用户信息(电子邮件、姓名、电话)返回到我的后端应用程序 ID 令牌之后 我该怎么办?我还应该从这些字段中填充一个本地用户数据库(没有密码)吗?在这种情况下,OpenID Connect 只是一个花哨的自动注册程序?那么会话和注销呢?如果用户在 Google 网站上更改了他的手机,而我仍然保存旧版本怎么办?

我在网上阅读了很多 OpenID Connect 文章,但它们似乎都描述了获取令牌的基本流程,所以我对进一步的阶段感到困惑。

我非常感谢有关此问题的任何提示/建议。

【问题讨论】:

    标签: jwt openid-connect


    【解决方案1】:

    我同意您的观点,这些现代身份验证方案最有趣的方面是您可以轻松地将身份验证委托给第三方提供商,而不必编写和支持所有样板文件,但围绕管理的高度敏感的代码用户身份。

    关于你的,接下来会发生什么问题让我们一一解决;我会尽量不要开始每个答案都取决于它。


    Q1我是否仍然需要从这些字段中填充本地用户数据库(无密码)?

    这取决于,如果您的应用程序在用户不在线与应用程序交互时不需要了解用户信息,那么您几乎不必存储任何内容。最多您希望将唯一的用户标识符存储到用户创建的数据中。

    另一方面,如果您的应用程序在发生(真正)有趣的事情时通过电子邮件通知用户,那么您需要将用户电子邮件存储在您的数据库中。


    Q2(如果我需要复制数据库中几乎所有的信息)OpenID Connect 只是一个花哨的自动注册程序?

    有点,只是作为一个允许您将应用程序身份验证委托给第三方的标准,您已经从它的存在中获得了巨大的利益。身份验证并非易事,如果您可以将其卸载给其他人,请执行此操作。通过这样做,您也是在帮助最终用户,因为(取决于您选择的提供商的受欢迎程度)他现在可以登录到您的应用程序,而无需记住另一组凭据。


    Q3会话和注销呢?

    如果您想要一个独立的会话,这里没有实质性的变化。在您的应用程序验证凭据并启动会话之前,现在它将验证可能由第三方提供的令牌,然后启动会话。注销只会结束您的会话。

    如果您想要一个同步会话,以便用户仅在您的应用程序中处于活动状态,而他在第三方提供商中也有一个会话,那么您还有更多工作要做。看看,如果你还没有这样做,OpenID Connect Session Management 1.0 了解更多信息。


    Q4如果用户在 Google 网站上更换了他的手机,而我仍然保存旧版本怎么办?

    这不是问题,因为如果您没有使用 OpenID Connect 并且必须管理特定于应用程序的用户身份,您也会遇到同样的问题。用户会在 Google 上更换他们的手机,除非他也主动在您的应用中更换手机,否则它就会过时。

    正如 fiddur 所指出的,如果有更新的信息,也可以主动与提供商核实。这是大多数供应商都支持的东西,并且有一个附带好处,它还可以为最终用户提供良好的用户体验。


    总结,如果您有机会将身份验证委托给外部提供商,请这样做。实施您自己的自定义身份验证,甚至将自己确立为符合所有可用标准的身份验证提供商是一项非常耗时的挑战,并且充满了安全隐患。

    如果您认为您需要更好地控制身份验证过程,而不是社交身份验证提供商为您提供的,那么您仍然可以选择使用更灵活的提供商,Auth0 浮现在脑海中,但我'我有偏见我是一名Auth0工程师。这种类型的选项将为您提供更多控制权,同时仍然承担实施您背部身份验证标准的负担。

    【讨论】:

    • Q2:它还为用户提供了单点登录的机会,尤其是在更多提供商也提供 OpenID Connect 动态注册的情况下。
    • Q4:还可以选择定期从提供商处重新检查用户信息,这样用户就不必在所有网站上更新相同的信息。
    • @fiddur,没错,这对最终用户有很大好处。我将更新这两点以从用户角度提及收益。谢谢。
    • 谢谢你们,现在更有意义了。我想我只是没有从正确的角度看这个。
    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2017-12-01
    • 2018-05-15
    • 2017-04-09
    • 2021-01-29
    相关资源
    最近更新 更多