使用OAuth2集成Keycloak单点登录

本文介绍如何使用keycloak作为认证中心,使用Quick BIOAuth2配置功能对接Keycloak单点登录。

场景说明

集成的Quick BI独立部署版本。

本文实践的keycloak版本为18.0.0,keycloak 是一个开源的、面向现代应用和服务的 IAM(身份认证和访问控制)解决方案。是Quick BI客户在选型时最常用的登录认证中心之一,在githubstar数也排名前列。操作步骤开始前默认您已搭建好Keycloak,并拥有Quick BI登录策略的配置权限。

操作步骤

步骤一:创建Keycloak realm(域),Client(客户端)

1.创建Keycloak realm

使用管理员账号登录Keycloak,单击右侧Select realm->add realm添加。弹出表单后输入name值即可。

image.png

image.png

2.创建keycloak client

进入刚刚创建的realm,单击左边栏的Client。之后选择右侧的create按钮创建client。

image.png

Client表单填写项参考值如上,Client Protocol固定选择openid-connect。Root URL填写Quick BI部署的地址。

步骤二:配置Keycloak客户端

单击表格中刚刚创建的client,进入配置。

image.png

access Type选择confidential;Authorization Enabled按钮打开。之后保存,可以看到上方tab页多出了Credentials选项。

image.png

复制这里的Secret值,之后在Quick BI平台上配置时会作为client secret被用到。

keycloak中一些可能有用的会话配置

realm setting中设置,token选项卡中

  • “SSO Session Max”: 设置单个 SSO 会话的最大有效时间。如果用户在此时间内没有操作,则会话将过期。

  • “SSO Session Idle”: 设置单个 SSO 会话的最大空闲时间。如果用户在此时间内没有任何活动,则会话将超时。

  • “Offline Session Max”: 设置离线会话的最大有效时间。离线会话是指用户在本地浏览器上保存的会话,即使用户已关闭浏览器,在一定时间内仍然可用。

步骤三:keycloak中添加测试用户

image.png

Users 中点选Add User按钮可以添加用户用于测试,这部分可以参照keycloak文档完成。

步骤四:在Quick BI进行登录配置

在配置前可以阅读OAuth2.0 协议对接及配置说明文档了解更多Quick BIOAuth2的配置细节。

进入开放平台->开放集成->登录认证。单击添加按钮添加登录策略。

image

image

配置时的填写范例如上图,填写项解释如下。

表单值

填写内容解释

策略唯一标识

唯一标识名称

策略配置

策略匹配策略

登录态

Quick BI域名

之后单击下一步,进入下一步配置。

image

打开OAuth2的按钮,进行配置。

image

配置值说明及参考值如下,[]内需要根据你的keycloak配置填写

配置值

参考值

登录地址

[keycloak地址]/realms/[keycloak realm名]/protocol/openid-connect/auth?client_id=[keycloak client id名称]&response_type=code&scope=openid&redirect_uri=[urlencode后的Quick BI域名]%2Flogin%2Foauth2%2Fcallback

登出地址

[keycloak地址]/realms/[keycloak realm名]/protocol/openid-connect/logout

client ID

[keycloak client id名称]

client secret

[keycloak 中的client secret]

scope

openid

请求 access_token 地址

[keycloak地址]realms/[keycloak realm名]/protocol/openid-connect/token

请求 access_token 传参形式

body

请求 access_token 额外参数

{"redirect_uri":"[urlencode后的Quick BI域名]/login/OAuth2/callback","grant_type":"authorization_code","client_id":"[keycloak client id名称]","client_secret":"[keycloak 中的client secret]"}

请求用户信息地址

[keycloak地址]/realms/[keycloak realm名]/protocol/openid-connect/userinfo

Authorization Header类型

Bearer

用户账户 ID 解析

$.preferred_username

用户账户名称解析

$.preferred_username

用户昵称解析

$.name

Cookie 失效时间(秒)

86400

Session 失效时间(秒)

86400

至此配置步骤已执行完毕。