Identity: Keycloak
- TAGS: Identity
架构:https://www.keycloak.org/docs/26.0.2/authorization_services/
目录结构:https://www.keycloak.org/server/directory-structure
安装
kubectl create -f https://raw.githubusercontent.com/keycloak/keycloak-quickstarts/latest/kubernetes/keycloak.yaml
账号密码:admin/admin
nginx keycloak代理变量
KC_PROXY_HEADERS=xforwarded KC_HOSTNAME=https://keycloak.online.local KC_HTTP_ENABLED=true
server { listen 80; server_name keycloak.online.local; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; location / { proxy_pass http://10.2.22.94:8080; } }
配置
文档:https://www.keycloak.org/documentation.html
container配置: https://www.keycloak.org/server/containers
支持数据库类型:https://www.keycloak.org/server/db
KC_DB=dev-file (默认)、 dev-mem 、 mariadb 、 mssql 、 mysql 、 oracle 、 postgres
可选功能:https://www.keycloak.org/server/features
KC_FEATURES=xxx,xxxx
实验
创建realm
默认realm(领域)是master,一般不用,这里可以创建一个新realm,如myrealm
创建用户
在领域下创建用于登录的用户
Users–>Create new user –Name(save) –>Credentials(Set password)
如用户test
Username: test Email: [email protected] Firt name: my Last name: test
设置密码时,取消勾选“Temporary”,否则下次登录还要重新设置密码
登录:http://localhost:8080/realms/myrealm/account
创建第一个应用程序
- 打开Keycloak 管理控制台。
- 单击左上角的master一词,然后单击myrealm 。
- 单击“Clients” 。
- 单击Create client
- 使用以下值填写表格:
- 客户端类型: OpenID Connect
- Client ID : myclient
- 点击 Next
- 确认 Standard flow 是启动的.
- 点击 Next.
- 在登录设置下进行这些更改、
- Set Valid redirect URIs to https://www.keycloak.org/app/*
- Set Web origins to https://www.keycloak.org
- 点击 Save.
打开https://www.keycloak.org/app/
验证角色权限
curl --location 'http://10.0.0.128:8080/realms/myrealm/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=password' \ --data-urlencode 'client_id=grafana-oauth' \ --data-urlencode 'client_secret=PagYQZ2PhITlVVgw6A6KP5Nr3GEUYMK3' \ --data-urlencode 'username=test' \ --data-urlencode 'password=123456'
将得到的access_token解析, 使用token转换:https://jwt.io/
中文
Realm setting –> Localization –> Locales 启动
在支持的语言中选择简体中文,本地默认选择中文,刷新页面即可。
认证
grafana 认证
参考:
keycloak配置
1.在领域下创建用于登录的用户
如用户test
2.创建Clients
grafana-oauth
Client ID: grafana-oauth Name: grafana-oauth Client authentication: On Standard flow: On Direct access grants: On Implicit flow: OFF Root URL: http://10.0.0.128:3000 Home URL: http://10.0.0.128:3000 Valid redirect URIs: http://10.0.0.128:3000/login/* #用于重新登录grafana接口验证 Web origins : http://10.0.0.128:3000 Admin URL: http://10.0.0.128:3000
完成后可在Credentials看到Client Secret密钥信息。
Client ID: grafana-oauth Client Secret: PagYQZ2PhITlVVgw6A6KP5Nr3GEUYMK3
3.添加角色引用
Clients–>grafana-oauth–>Client scopes–>grafana-oauth-dedicated–>Mappers
添加一个映射器 Add mapper –> By configuration –> User Real Role
name: grafana roles #随意 Token Cliam Name: roles
保存
4.添加领域角色
Realm roles –> Create role
创建3个角色:admin, editor, viewer
5.用户绑定角色
Users 选择一个用户,如test,选择"Role mapping" –> Assign role–>过滤条件选择Filter by realm roles
绑定领域角色,如editor
6.验证角色权限
curl --location 'http://10.0.0.128:8080/realms/myrealm/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=password' \ --data-urlencode 'client_id=grafana-oauth' \ --data-urlencode 'client_secret=PagYQZ2PhITlVVgw6A6KP5Nr3GEUYMK3' \ --data-urlencode 'username=test' \ --data-urlencode 'password=123456'
将得到的access_token解析, 使用token转换:https://jwt.io/
grafana配置
root_url在docker环境变量为GF_SERVER_ROOT_URL
grafana.ini
[server] root_url = http://10.0.0.128:3000 [auth.generic_oauth] enabled = true name = OAuth allow_sign_up = true client_id = grafana-oauth client_secret = PagYQZ2PhITlVVgw6A6KP5Nr3GEUYMK3 scopes = openid email profile offline_access roles email_attribute_path = email login_attribute_path = username name_attribute_path = full_name auth_url = http://10.0.0.128:8080/realms/myrealm/protocol/openid-connect/auth token_url = http://10.0.0.128:8080/realms/myrealm/protocol/openid-connect/token api_url = http://10.0.0.128:8080/realms/myrealm/protocol/openid-connect/userinfo redirect_url = http://10.0.0.128:8080/login/generic_oauth role_attribute_path = contains(roles[*], 'admin') && 'Admin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer' #role_attribute_path = contains(realm_access.roles[*], 'Admin') && 'Admin' || contains(realm_access.roles[*], 'editor') && 'Editor' || 'Viewer' signout_redirect_url = http://10.0.0.128:8080/realms/myrealm/protocol/openid-connect/logout?post_logout_redirect_uri=http%3A%2F%2F10.0.0.128%3A3000%2Flogin use_refresh_token = true
访问grafana地址,验证用户登录。
jenkin认证
1.登录Keycloak,在对应Realm领域中创建Client客户端, 如jenkins
配置好,在右上角操作选项中点击下载配置(Download adapter config),复制内容。
{ "realm": "myrealm", "auth-server-url": "http://10.0.0.128:8080/", "ssl-required": "external", "resource": "jenkins", "credentials": { "secret": "hoQVgcYlc4cK76XzpPUNJWoTkavimwKk" }, "confidential-port": 0 }
2.登录jenkins
安装插件keycloak。在【系统管理】-【全局安全配置】点击安全域选择配置keycloak,将keycloak客户端 配置粘贴到Keycloak JSON中, 授权策略可选做任何事或者安全矩阵。