【问题标题】:Building a Java OAuth2.0 authorization server with Keycloak使用 Keycloak 构建 Java OAuth2.0 授权服务器
【发布时间】:2018-08-15 10:55:25
【问题描述】:

TL;DR

  • 目标:Java 授权服务器:
    • 具有细粒度权限的 OAuth2.0 授权代码授予流程(不仅仅是 SSO 服务器)
    • 用户管理和身份验证:自定义数据库
    • 客户端管理和身份验证:Keycloak
  • 问题:在 Keycloak 上实现具有应用权限处理的 Java 授权服务器的最佳做法是什么?
    • 我应该在开发中使用什么 Keycloak 适配器/API?
    • 如果用户要出现在 Keycloak 中,应该如何管理/出现?

预警

我是 Keycloak 的初学者,虽然我认为我了解主要原理,但它似乎是一个丰富的工具,我担心我可能仍然对使用它的最佳方式的某些方面有误解。请不要犹豫,纠正我。

上下文

我们正在考虑实施一种 API,要求我们的用户(以下简称“用户”)向第三方应用程序(以下简称“客户”)授予权限。

我们的用户存储在一个自定义的现有基于数据库的用户管理系统中。至于我们的客户,我们正在考虑使用Keycloak

将使用 OAuth2.0 授权码授予流程授予用户同意。他们将登录,指定他们授予和拒绝哪些权限,然后客户端检索将用于访问 API 的访问令牌。

据我了解,Keycloak 可以处理授权令牌,但它不应该知道任何应用程序,即我们的权限。因此,我想构建一个自定义授权服务器,它将使用 Keycloak 解决所有身份/身份验证问题,但会自行处理应用权限。

然后,我们将使用 Keycloak 进行客户端身份验证和授权码/访问令牌管理,应用部分将检查权限。

问题

除了我的第一次实验之外,我已经在互联网上漫游了一周,我很惊讶,因为我认为这将是一个相当标准的案例。然而我几乎没有找到,所以也许我没有正确搜索。

我找到了很多关于如何制作“简单授权服务器”的 Spring/Spring Boot 教程1。这些主要是 SSO 服务器,很少管理权限,除了this SO answer2 中提到的那些。我认为我们可以处理。

我遇到的真正问题是以下几点:

如何将 Keycloak 集成到此授权服务器中?

我一直在看available Java Adapters。在进行身份验证时,它们看起来不错,但我没有看到有关如何从自定义授权服务器管理客户端(即管理领域)的提示。

因此我假设我应该使用管理 API。我是否正确,这是一种好习惯吗?我没有看到任何适配器,所以我想我应该使用 REST API。

我也想知道我们应该如何将我们的用户整合到设计中?他们应该在 Keycloak 中复制吗?在这种情况下,我们应该使用 Keycloak 的 admin API 从授权服务器推送数据还是有更好的方法?

最后,我是否遗漏了其他一些明显的观点?

对不起,长消息和许多问题,但最终都归结为一个问题:

使用 Keycloak 作为主干构建授权服务器时的最佳做法是什么?


1。一些例子: Spring Boot OAuth2 tutorial - A blog post - Another blog post

2。我主要关注the sample app provided by Spring Security OAuth

【问题讨论】:

    标签: java oauth-2.0 keycloak


    【解决方案1】:

    使用 Keycloak 构建 Java OAuth2.0 授权服务器

    这是可能的,但有点棘手,需要定制的东西很多。

    你可以从下面的回购中获得一些动力。

    keycloak-delegate-authn-consent

    使用MITREid构建自定义Java OAuth2.0授权服务器

    如果您愿意使用 Oauth 和 OIDC 的其他实现,我可以建议您使用 MITREid,它是 OIDC 的参考实现,可以进行大量定制。以下是其 repo 和开源的链接。

    我自己用这个来满足与你类似的需求,它是高度可定制且易于实现的。

    https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server

    MITREid Connect 使用 Spring Security 进行身份验证,因此您可以将任何您喜欢的组件放入该空间。网上有很多关于如何为自定义身份验证机制编写和配置 Spring Security 过滤器的好资源。

    您需要查看 user-context.xml 文件以了解定义用户身份验证的位置。在核心项目中,这是针对本地数据库的简单用户名/密码字段。在 LDAP 覆盖项目等其他项目中,它连接到 LDAP 服务器。在某些系统中,例如 MIT 的“oidc.mit.edu”服务器,实际上有一些不同的身份验证机制可以并行使用:LDAP、kerberos 和证书。

    请注意,在所有情况下,您仍然需要在某处访问 UserInfo 数据存储。这可以来自数据库、LDAP 或其他来源,但它需要可供每个登录用户使用。

    MITREid Connect 服务器可以同时充当 OpenID Connect 身份提供者 (IdP) 和 OAuth 2.0 授权服务器 (AS)。服务器是一个 Spring 应用程序,其配置文件位于 openid-connect-server-webapp/src/main/webapp/WEB-INF/ 并以 .xml 结尾。配置已拆分为多个 .xml 文件,以方便覆盖和自定义配置。

    【讨论】:

      猜你喜欢
      • 2019-03-20
      • 2021-10-04
      • 2017-11-13
      • 2021-11-07
      • 2019-11-27
      • 2016-06-07
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多