玩起来有点像是以前碰过的IdentityService
不需要自己实现验证/授权相关的实做逻辑,交给他就行了!
不过 Keycloak 跟 IdentityService 不同的是他不需要依附在.net身上
作为一个独立的服务,并且提供更完整的功能
这篇主要会把官方的介绍,浓缩一些认为重要的内容带进来
以及照着官方的练习跟着实做
功能
keycloak的重点在身份验证和授权,所以相关功能肯定有的
- 单一登入
- 透过keycloak进行身份验证,各个应用程式不用各自处理登入/登出跟验证服务
- 社交网站登入
- 例如 Google、Facebook,只有想不到没有做不到
- User Federation
- 将外部数据视为Keycloak的储存后端,依照需求载入或是同步到Keycloak
- 支持 OpenID Connect、OAuth 2.0、SAML
也提供了强大UI后台,免除自己刻画面或是直接动资料的困扰
- Admin UI
- 强大的UI工具,可以管理keycloak大多数的设定
名词
先认识一下名词,事后在操作才不会误会
Keycloak中,最大的单位是 Realm,用来区分不同的领域(租户),各自隔离且独立
每个 Realm 底下可以有各自的:
- Client 应用程式
- User 使用者
Keycloak
首先最重要的步骤,先把Keycloak run 起来,我选择用 podman 执行一个容器
getting-started-podman
Podman
podman run -p 8080:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.1.0 start-dev
- 指定 port 8080
- 指定 admin 的帐密
- 使用版本 26.1.0
执行后开启 localhost:8080,用 admin 登入
admin登入后,会提示应该要建立自己的使用者帐号,并且移除admin这个帐号
新增一个 user,并且设定Password(Credentials)和权限给他(Role mapping)
这边要注意,左上角的 filter 要选择 Filter by realm roles
才有admin相关的权限
新增后就可以尝试登入,确认权限没问题后,就可以把admin给移除了
接着回到realm,预设会有一个 Realm Master
,根据的官方描述,
Master
是用来管理Keycloak的地方,不是用来管理应用程式
所以我们要新增一个用来管理应用程式的realm
Realm
左上角的 master
点开,就有一个 Create Realm
新增一个 realm MyRealm
我希望可以透过应用程式访问 Keycloak
所以分别要建立 Client
和 User
Client
新增一个client MyClient
Client Type选择 OpenID Connect
启用 Standard flow
和 Direct access grants
,建立
(后面测试的需要,Valid redirect URIs
需要设定为
https://www.keycloak.org/app/*
)
User
现在有Client了,但是没有使用者,接着新增User
新增一个 user MyUser
Test
接着可以在Keyclock的测试网站测试登入能不能成功
https://www.keycloak.org/app/
参考资料
Keycloak