如何将OpenAM用于OAuth 2.0 / OIDC联盟?

时间:2018-11-10 16:39:14

标签: oauth-2.0 openam oidc

这里是情况:

  • 我们有一些旧系统。使用简单的用户/密码身份验证+会话cookie。 (并且不使用OpenAM)
  • 我们正试图为另一个组织提供新的服务,除其他外,我们有义务在从其Web应用程序重定向后自动接受其用户作为身份验证。我们需要联合身份。我们选择了OpenAM作为新的IAM,但是我们的用户数据仍在旧系统中,并且他们的用户也将注册到旧系统中。目前,用户不会被汇总到OpenAM的数据库中

因此,对于我们而言,任何联盟方案的大致想法都是这样的:

他们将用户重定向到我们的OpenAM端点,该端点采用由其“ IdP”签名并由其IdP签名的JWT(OIDC令牌?),并基于此内容,以某种方式,OpenAM发行另一个JWT令牌并重定向用户再次使用新的承载令牌到旧系统。

旧系统的开发人员将创建一些自定义代码,以验证和读取JWT令牌内的声明。根据声明,它们为用户创建一个经过身份验证的特权会话。

我查看并找到了两种可能的解决方案:

  1. IdP中的JWT用于使用其OAuth2.0 implicit flow(根据JWT for client authentication)开始 RFC-7523 + 。然后,用户将使用访问令牌。 但是:

    • 我想将第一个JWT中的声明(其中一些是自定义的)放入访问令牌中,以便旧系统使用该信息在旧DB中查找用户并创建会话。 如何告诉OpenAM在访问令牌中包含这些声明?请注意,OpenAM数据库中没有有关其用户的信息。只是令牌中的声明。
    • 看起来我们正在验证其IdP,而不是用户。因为JWT客户端身份验证使用其IdP的公钥来验证令牌的签名。 我如何告诉OpenAM该令牌用于该JWT的“子”?
  2. 在OpenAM(OIDC-> OIDC)中使用 Rest STS(Security Token Service) 。这看起来更适合我们的情况,但我不知道如何告诉OpenAM验证其令牌。 文档似乎没有提供任何措施来验证令牌? (也许是添加公钥的地方?)

0 个答案:

没有答案