Drollery Medieval drollery of a knight on a horse

🏆 欢迎来到本站: https://xuchangwei.com/希望这里有你感兴趣的内容

flowery border with man falling
flowery border with man falling

Identity: Keycloak

官网: https://www.keycloak.org/

架构: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

导入导出领域配置: https://www.keycloak.org/server/importExport

实验

创建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

创建第一个应用程序

  1. 打开Keycloak 管理控制台。
  2. 单击左上角的master一词,然后单击myrealm 。
  3. 单击“Clients” 。
  4. 单击Create client
  5. 使用以下值填写表格:
    • 客户端类型: OpenID Connect
    • Client ID : myclient
  6. 点击 Next
  7. 确认 Standard flow 是启动的.
  8. 点击 Next.
  9. 在登录设置下进行这些更改、
  10. 点击 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中, 授权策略可选做任何事或者安全矩阵。