事实上,主要准备工作都在 Keycloak 侧。如果还未准备好 Keycloak,可以参考本文进行部署:在 Kubernetes 中部署 Keycloak。
配置 Keycloak
图文可能有助于理解,这里不会给出可导出导入的配置文件。
必要时,新建 Realm
根据需要,可以考虑新建一个 Realm 进行隔离。
需要注意的是,用户不能跨 Realm 共享。

新建用户和组
我们可以利用 Keycloak 中 Groups 的特性,后续配置 Harbor 可以将特定组成员视为管理员。
这里将新建一个用户,名为 domain:

然后新建一个 harbor 组,在它下级再新建 admin 组。

别忘了,将用户加入对应组:

新建 Client scopes 和 Mapper
默认情况下,组信息不会被带出,因此我们需要配置 Client scopes 和 Mapper 使得 Keycloak 可以在用户信息中体现用户组信息。
新建一个名为 groups 的 Client scope,考虑到不是所有 Client 都需要透出用户的所属组信息,所以这里配置为 Optional 类型。

然后新建一个 Group Membership 类型的 Mapper,透出用户所属组:

只需要在用户信息里带上所属组信息:

Token Claim Name 可以根据需求起名,后续需要告知 Harbor 从该字段确认是否管理员组。
新建 Client 并关联 Client scope
这里新建一个名为 harbor 的 Client,回调地址需要正确配置否则无法登录。


关联刚才新建的 Client scope,类型可选择 Default,这样 Harbor 不需要显式指定。

配置 Harbor
这侧只需要按文档配置就可以了:Harbor docs | Configure OIDC Provider Authentication。下面给出示例:

调试
这类配置一般不会一帆风顺,因此合适的调试手段可以有效帮助我们解决问题。
Keycloak 用户信息
Client -> Client scopes -> Evaluate 中可以模拟登录回调后生成的用户信息。有助于我们检查用户信息字段映射的结果是否符合预期。

harbor-core 日志
登录流程中产生的非预期行为一般会在这里输出错误或警告日志,我们针对性找到根因处理即可。

发表回复