【发布时间】: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
【问题讨论】: