LDAP JWT OAuth方案解释

11

我试图系统化我的oauth + jwt + LDAP授权知识。我已经阅读了多篇优秀的文章(例如这篇),但仍有以下问题:

我的理解:

  1. JWT是一种令牌,允许单点登录(SSO)。它比简单的令牌认证更安全,因为它加密了所有用户特定信息(例如用户名、密码、客户端应用程序ID、IP地址等)。此信息使用内部授权服务器密钥进行签名,攻击者无法更改。 enter image description here
  2. 这里看下面的短语。据我所知,这意味着每个HTTP前端服务器不需要查找会话数据。但它需要查找授权服务器。好处是什么?这不还是同一个故障点吗?为什么JWT被认为是无状态的?JWT仍然需要在授权服务器上保存用户数据,对吗?

    服务器端存储问题已经解决。

  3. 如果您需要在JWT过期前注销用户,则需要保留黑名单。那么相对于没有SSO的简单令牌认证,有何好处?
  4. JWT是OpenID(仅限身份验证)的实现吗?
  5. 使用JWT(令牌)在服务器之间进行自动登录是不可能的,除非使用OAuth。当您想要代表用户授权某个服务的请求而无需用户参与时,使用OAuth。 为什么使用令牌不可能实现,但使用OAuth则可以?
  • OAuth也可用于配置灵活的访问策略,如角色、组等。但为什么不能基于令牌/ JWT自己实现呢?
  • LDAP服务器在小型非互联数据片段(如用户凭据)的读操作方面非常快速。JWT-OAuth方案(或OppenID Connect)中LDAP在哪里?LDAP是用于身份验证(JWT)还是授权(OAuth)?
  • 1个回答

    4

    我将尝试在这里澄清一些概念:

    OAuth和OpenID Connect(OIDC)本身只是身份验证机制。JWT只是在两个方之间传递已认证信息的一种方式。因此,您需要分离关注点。如果对于如何识别用户并确保其真实性有疑问,请查看OIDC或OAuth标准。如果不确定如何在各方之间安全地传递与用户相关的信息,请参阅JWT RFC及其相关的JWS、JWK、JWE等。

    话虽如此:

    1. 完全正确。你理解的很对。

    2. 这取决于具体的实现方式,但一些有状态的方法是存在的,也有一些无状态的实现方式。JWT消费服务器(在Oauth术语中称为资源服务器)可能会将IdMS(在Oauth术语中称为授权服务器(名称不太准确))的签名密钥存储在缓存中,或预先配置好。这样,它可以验证来自IdMS的JWT访问令牌而无需进行任何请求。即使IdMS宕机也不会影响系统正常运行。在某些架构中,IdMS位于某个VPN后面,而资源服务器则在VPN外部。此外,还可以使用更有状态的方式针对introspection端点检查访问令牌。通过这种方式,在需要在资源服务器上进行每次验证时,都会向IdMS发出请求,以检查访问令牌是否仍然有效,并提取相关声明。当访问令牌不是JWT而是不透明对象时,也会使用后一种机制。

    3. 黑名单可能是一种方法,但通常使用Refresh Token机制。您可以给访问令牌设置一个非常短的生命周期,如1分钟,然后依赖刷新机制,以防会话被撤销。

    4. 从技术上讲,OpenIDOpenID Connect (OIDC)是不同的实现。简而言之,我们可以说OpenID是身份联合的旧实现,没有得到很大的采用。OpenID Connect是Oauth 2.0的演进版本,增加了JWT、ID令牌和其他一些好处。但是,JWT和OIDC不是独家实现方式。虽然OIDC强制使用JWT,但JWT也存在于OIDC之外。

    5. 如果您想在两个服务器之间授权请求,在基本级别上,可以使用简单的令牌(只需保持机密,并使用TLS)。但使用JWT所启用的是服务器可以信任中央IdMS而无需完全互相信任。在这种情况下使用Oauth是因为例如Google会相信自己和用户,但不会相信您的服务器。因此,认证发生在Google作为IdMS和用户之间,并生成一个JWT(并非总是如此,因此您可以看到我之前的陈述),您的服务器(信任外部IdMS)可以使用该JWT与Google通信。

    6. 正如已经提到的,组/角色管理与使用JWT/令牌是独立的。JWT/普通令牌只是传达身份验证信息的方式。

    7. Oauth/OIDC上的LDAP位于身份验证阶段。当用户将其凭据发送到IdMS时,不是检查本地数据库,而是检查LDAP。某些高级IdMS还可以使用LDAP来检索策略、组或其他权限。但授权完成后,其余过程与通常相同。

    References:


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接