代码之家  ›  专栏  ›  技术社区  ›  Kartik Chauhan

OpenID提供者如何对最终用户进行身份验证?

  •  0
  • Kartik Chauhan  · 技术社区  · 5 年前

    /user_info /me 以获取请求的声明作为回报。

    部门 3.1.2.3 OpenID Connect 1.0 规范说明了对最终用户进行身份验证的过程。然而,它明确指出

    授权服务器用于验证最终用户的方法(例如用户名和密码、会话cookies等)超出了本规范的范围。

    这些方法的实施正是我的问题。另外,还有 OAuth2.0 规范也没有提供关于实现的任何信息。

    我的疑问是我们如何认证最终用户?我能想到的可能的情况是:

    1. 我们在授权服务器上保存一些用户的数据,如配置文件信息、用户名、密码以及其他与用户相关的信息。
    2. 我们将所有内容保存在资源服务器上,并通过发送 POST 向资源服务器上的内部restapi请求以及用户凭据。
    3. 授权和资源服务器共享同一个数据库实例,因此没有API调用。

    我知道每个OpenID提供者的实现方式都会有所不同,但是我想知道这些方法是否都是OpenID提供者所遵循的?

    在某些情况下,授权服务器和资源服务器可以是相同的,在这种情况下,共享数据库实例将变得很容易。但是当服务器是两台不同的机器时会发生什么呢。

    假设我正在尝试编写自己的OpenId Connect实现。你能给我什么建议来认证最终用户?

    我试着浏览 node-oidc-provider 库,但库不验证用户身份并跳过该部分。如果有人能在这方面提供任何建议,那会有很大的帮助。最佳实践是什么?其他OpenID提供者正在使用什么方法?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Gnudiff    5 年前

    正如您从这张有用的图片中看到的,从关于 OpenId/OAuth 2.0 architecture from article by Takahiko Kawasaki @ Medium

    Oid/oauth2.0 auth

    身份验证机制被明确声明为超出范围是有原因的,因为身份验证及其要求是通过完全独立的方式实现的。完全可以通过您选择的任何类型的身份验证机制来完成,唯一的要求是身份验证实现对OpenID/OAuth请求的正确响应。

    假设您想让一个页面针对您的activedirectory进行身份验证。您所要做的就是用适当的OAuth和OpenID插件扩展现有的activedirectory系统(假设有这样的插件),配置它们,在这些协议可用于身份验证和授权之后,您可以将您的广告指定为OpenID/OAuth提供程序给任何准备接受它们的人。

    将授权信息存储在何处的问题仍然很模糊,但通常将其存储在使用的身份验证机制附近是有意义的,因为您正在使用此身份验证机制来授予授权,因此使用此特定身份验证跟踪您已授权的内容是有意义的。

    注意,OAuth允许经过身份验证的用户处于驱动位置,这通常是公共webapps的情况。

    在非公共资源的情况下,通常情况下,资源持有者只订阅OpenID或其他联合身份规定,但他们自己根据用户来自何处和/或在特定身份方案中是谁来决定用户可以访问哪些资源。

    一个例子是大学A图书馆系统,它可能允许大学B的学生登录,基于B的联邦身份认证服务器,但不给予他们对图书馆的相同权利,因为它自己的学生由universisty A认证系统认证。