LDAP JWT OAuth方案说明

VB_*_*VB_ 8 security openid oauth token jwt

我正在尝试系统化我对oauth + jwt + LDAP授权的了解.我已经阅读了多篇优秀文章(即这篇文章)但仍有疑问:

我的理解:

  1. JWT是允许单点登录(SSO)的令牌.它比简单的令牌身份验证更安全,因为它加密所有用户特定的信息(例如userName,password,clientAppId,ip address等).此信息使用内部授权服务器密钥签名,攻击者无法更改. 在此输入图像描述
  2. 这里,看下面的短语.据我所知,这意味着每个HTTP前端服务器都不需要查找会话数据.但它需要查找权限服务器.有什么好处?这不是同一个故障点吗?为什么JWT被认为是无国籍的?JWT仍然需要在权限服务器上保留用户数据,对吗?

    服务器端存储问题消失了.

  3. 如果您需要在有效期之前注销用户使用JWT - 您需要保留黑名单.那么没有SSO的简单令牌uath的好处是什么?
  4. JWT是OpenID的实现(仅限身份验证)吗?
  5. 在没有OAuth的情况下,使用JWT(令牌)对服务器2服务器进行自动登录是不可能的.当您无需用户参与即代表用户授权来自某些服务的请求时,将使用Oauth.为什么令牌不可能与OAuth一起使用?
  6. OAuth还用于配置灵活的访问策略,如角色,组等.但为什么你不能基于令牌/ JWT自己实现它们?
  7. LDAP服务器对于小的非互连数据片段的读取操作非常快,作为用户凭证.LDAP在jwt-oauth方案中(或在OppenID Connect中)在哪里?LDAP用于身份验证(JWT)还是授权(OAuth)?

Dar*_*eye 4

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

Oauth 和 OpenID Connect (OIDC)本身只是身份验证机制。JWT 只是在两方之间传递经过身份验证的信息的一种方式。因此,您必须努力分离关注点。当对如何识别用户并确保确实是他/她有疑问时,请检查凭据等......去检查 OIDC 或 Oauth 标准。如果对如何在各方之间安全地传递用户相关信息有疑问,请查看 JWT RFC 和相关内容(JWS、JWK、JWE 和相关内容)。

话虽如此:

  1. 完全正确。你理解正确。

  2. 这取决于实现,但是存在一些有状态的方法,并且一些实现是无状态的。使用 JWT 的服务器(Oauth 术语中的资源服务器)可能在缓存或预配置的. 这样,它就可以验证来自 IdMS 的 JWT 访问令牌,而无需执行任何请求。IdMS 可能会关闭,但不会影响系统。对于某些 VPN 背后有 IdMS 且其外部有资源服务器的架构来说,情况正是如此。除此之外,可能有一种更有状态的方法来根据IdMS 的内省端点检查访问令牌。通过这种方式,对于资源服务器上所需的每次验证,都会向 IdMS 发出请求以检查访问令牌是否仍然有效并提取相关声明。当访问令牌不是 JWT 因此不透明时,也会使用后一种机制。

  3. 黑名单可能是一种方法,但更常见的是通过刷新令牌机制来完成。您为访问令牌指定了非常短的生命周期,例如 1 分钟,然后依靠刷新机制在会话被撤销时失败。

  4. 从技术上讲,OpenIDOpenID Connect (OIDC)是不同的东西。简而言之,我们可以说 OpenID 是身份联合的一种旧实现,并未得到广泛采用。OpenID Connect 是Oauth 2.0 的演变,添加了 JWT、ID Token 和其他一些细节。但不,JWT 和 OIDC 绝不是排他性的实现。确实,OIDC 暗示强制使用 JWT,但 JWT 存在于 OIDC 之外。

  5. 如果您想在两个服务器之间授权请求,在基本级别上,可以使用简单的令牌来完成(只需保持它们的秘密,并使用 TLS)。但使用 JWT 后,服务器可以信任中央 IdMS,而不必完全信任彼此。在您指出的这种情况下使用 Oauth,因为例如 Google 信任自己和用户,但不信任您的服务器。因此,身份验证发生在充当 IdMS 的 Google 和用户之间,这会生成一个 JWT(并非总是如此,因此您可以看到我之前声明的情况),您的服务器(信任外部 IdMS)可以使用该 JWT 与 Google 进行通信。

  6. 如前所述,组/角色管理独立于使用的 JWT/令牌。JWT/普通令牌只是传递身份验证信息的方式。

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

参考: