OpenID Connect用例

时间:2016-10-18 06:45:49

标签: jwt openid-connect

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

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

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

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

从这一点开始,我有点失去了赛道。谷歌(或任何AS)返回我的后端应用程序ID令牌与基本用户信息(电子邮件,名称,电话) 我该怎么办?我还有从这些字段填充的本地用户数据库(没有密码)吗?在这种情况下,OpenID Connect只是一个花哨的自动注册程序?那么如果用户在谷歌网站上更换手机而我保留旧手机版本会怎样?会议和注销会怎样?

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

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

1 个答案:

答案 0 :(得分:3)

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

关于你,接下来的问题会让我们逐一接近它们;我会尽量不依赖它来开始每一个答案。

Q1 我仍然从这些字段填充本地用户数据库(没有密码)吗?

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

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

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

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

Q3 会话和注销怎么样?

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

如果您想要同步会话,那么用户只在您的应用程序中处于活动状态,同时他还在第三方提供商中有会话,那么您还有更多工作要做。如果您还没有这样做,请参阅OpenID Connect Session Management 1.0以获取更多信息。

问题4 如果用户在Google网站上更换手机而我还保留旧版本会怎么样?

这不是问题,因为如果您不使用OpenID Connect并且必须管理特定于应用程序的用户身份,那么您将遇到同样的问题。用户可以在谷歌上更换手机,除非他还主动更换了您应用中的手机,否则它将会过时。

正如 fiddur 所指出的,如果有更新的信息,还有可能主动检查提供者。这是大多数提供商支持的,并且具有可以为最终用户提供良好用户体验的副作用。

总之,如果您有机会将身份验证委派给外部提供商,请执行此操作。实施您自己的自定义身份验证,甚至将自己建立为符合所有可用标准的身份验证提供程序,这是一个非常耗时的挑战,充满了安全隐患。

如果您认为您需要更好地控制身份验证过程,而不是社交身份验证提供商提供给您的身份,那么仍然可以选择使用更灵活的提供程序,Auth0可以考虑,但是我有偏见我是Auth0工程师。这种类型的选项将为您提供更多控制,同时仍然负担实施您背后的身份验证标准的负担。