Keycloak 配置的一个关键方面是安全领域,它包含与一个安全上下文相关的所有配置(用户、角色、客户端策略等)。当您第一次启动 Keycloak 时,它将只包含一个领域:master 领域。这是领域层次结构中的最高级别。您不应使用此领域来配置组织中的用户和服务。相反,请考虑为负责定义组织中其他领域的管理员使用主领域。
本章的 GitHub 存储库包含一个名为 Quarkus 领域 的应用程序领域,这对我们的目的很有用。我们将向您展示如何导入它,然后我们将逐步完成其配置,以便您能够基于此模板创建新领域。让我们继续以下步骤:
- Start by connecting to the Keycloak console, which is available at http://localhost:8180. An authentication challenge will be displayed. Log in with admin/admin:
- Now, from the top-left panel, choose to add a new realm, as shown in the following screenshot:
- Choose to Import a realm and point to the JSON file (quarkus-realm.json) that contains an export of Quarkus' realm:
- Click on Create to continue. Now, let's look at a short overview of the realm's options.
在领域设置窗口中,您将能够定义一些核心设置,例如域名和登录设置,预定义令牌的生命周期和超时等等:
出于我们学习路径的目的,我们不会更改这些设置。在领域面板中,您将能够验证我们是否包含了相同的角色(admin 和 user),以便他们匹配我们现有的安全约束:
在这里,我们重新创建了我们在基于文件的 Elytron 域中测试过的相同用户列表:
在 Role Mappings 选项卡中,您可以检查 test 用户是否是 用户角色:
另一方面,admin 用户将同时分配给 admin 和 用户 角色:
现在我们已经查看了用户和角色,让我们讨论领域客户端配置的一个关键方面,它显示在以下 UI 中:
让我们看一下客户端配置的一些关键方面。首先,我们必须定义客户端协议。有两种类型的客户端身份验证协议:
- OpenID Connect (OIDC) is an authentication system where the client requests an access token that's used to call other services on behalf of the authenticated user.
- SAML authentication requires Keycloak to provide an SSO for the users of your organization.
对于我们的需求,我们需要基于 OIDC 令牌的身份验证来授予对我们服务的访问权限。我们还需要选择是使用标准流程还是隐式流程进行身份验证。
默认选项(启用标准流程)涉及到/来自 OIDC 提供程序 (Keycloak) 的初始浏览器重定向,以进行用户身份验证和同意。然后,需要第二个反向通道请求来检索 ID 令牌。此流程提供了最佳的安全性,因为令牌不会显示给浏览器,并且客户端可以安全地进行身份验证。
让我们以序列图的形式来描述这个流程:
为了提供更好的性能,Keycloak 还支持隐式流,在成功验证后立即发送访问令牌时会发生这种情况。尽管此选项可能会更好地扩展(因为没有额外的请求将代码交换为令牌),但您将负责监控令牌何时过期,以便您可以发布新的令牌。
由于我们选择使用标准流程,我们将指定一个适当的 有效重定向 URI,它需要设置为我们在 Quarkus 上运行的应用程序的默认 HTTP 端口。
对于 Access Type,我们已将其配置为 confidential,这需要客户端应用程序提供秘密才能获得 ID 令牌。当您将 Access Type 设置为 confidential 时,您将能够选择 Client Authenticator 来自 Credentials 选项卡,该选项卡定义了您将用于客户端的凭据类型及其机密。为此客户端 ID 定义的密钥是 mysecret,如以下屏幕截图所示:
如果您想更改默认密码,只需单击 Regenerate Secret 按钮并相应地更新您的客户端应用程序。
现在我们已经配置了 Keycloak,我们将使用这个领域来执行一个使用不记名令牌认证的测试。但是,在此之前,我们将相应地配置我们的 Quarkus 服务。