Keycloak是开源的身份及访问控制管理软件,提供开箱即用的认证、授权、单点登录、用户管理等功能。本文档的介绍包括应用的安全配置,Keycloak Server管理与运行时配置。
应用的安全配置:主要描述如何使用Keycloak保护应用的安全。
Keycloak Server管理与运行时配置:主要描述如何使用Keycloak管理控制台进行管理与配置。
Keycloak管理控制台的访问地址为http://{IP}:{PORT}/auth/admin。
应用是放在Tomcat中的,要想使用Keycloak对应用进行安全配置,一是需要将应用的访问地址注册在Keycloak中并为给应用设置一个唯一的标识,每个受保护的应用都需要作为一个client注册在这里;二是需要Tomcat与Keycloak版本适配
Keycloak支持OpenID Connect和SAML2.0,本文档目前仅描述Java应用中OpenID Connect的使用方法。
Keycloak保护应用的安全,需要Keycloak的Client Adapters,它是平台和框架相关的一些库,本文档目前仅描述如何在Tomcat中安装Keycloak Tomcat Adapter。
在左侧菜单中点击“Clients”,在页面上会看到Create按钮
添加Client
在添加客户端界面中,添加相应的内容,其中,Client ID 和 Root URL是必填项。这里的ClientID是填写应用的名称,使用英文字母,这里填写之后在后面配置keycloak.json时对应那里的resource后面的内容。对于InData中的应用,Client ID使用已经配置好的keycloak.json中的“resource”。
Client Protocol选择“openid-connect”。
Root URL填写应用的访问地址,如“http://localhost:8080/myapp”。填写完成后点击“Save”,将保存成功并打开设置页面。
所有的Keycloak client adapters都支持使用JSON文件进行配置,通常被命名为keycloak.json,内容为:
{ "realm": "master", "auth-server-url": "http://localhost:9080/auth", "ssl-required": "none", "resource": "demo", "public-client": true } |
这里是一些配置项的详细描述:
realm:Realm名称。
auth-server-url:Keycloak server地址,通常为http://{host}:{port}/auth。
ssl-required:与Keycloak server通信的协议,目前值为none,即使用HTTP。
resource:应用的Client ID。需要将受保护的应用注册在Keycloak Clients中,Client ID即为注册时所填写的应用的唯一标识。
public-client:值为true时,应用不需要向Keycloak server提供credentials。
对于InData平台中的应用,应用的WAR中通常已经配置了keycloak.json文件,部署时只需要修改部署环境相关的项,如auth-server-url。
Keycloak.json文件也可以从Keycloak管理控制台获取,先进入“Clients”菜单下并点击相应的client,然后在打开的页面上切换到“Installation”选项卡,最后选择“Keycloak OIDC JSON”。
关于client的注册,可参照上面的一。
这里的配置只要分为四步:1.安装Tomcat版本对应的Tomcat Adapter;2.定义keycloak valve;3.修改keycloak.json;4.修改web.xml,其中前两步是对Tomcat容器直接进行的操作,后两步是对部署在Tomcat容器中的应用进行的操作
1.安装Tomcat Adapter
访问http://www.keycloak.org/archive/downloads-3.4.0.html,按照Tomcat的版本选择下载OPENID CONNECT下的Tomcat Adapter。
将adapter解压,然后放在Tomcat的lib/目录中,如下:
2.修改valve
修改${TOMCAT_HOME}/conf/context.xml,添加:
3.修改keycloak.json
将“Adapter Config”一节中的keycloak.json添加到WAR的/WEB-INF目录下,或者在已存在的文件中修改。
4.修改web.xml
如果是InData平台中的应用,通常已经配置好了。修改内容包括:
添加Keycloak认证相关的配置:
All Resources
/service/*
*.jsp
*
KEYCLOAK
indata
*
如果WAR中需要使用security-sdk.jar的接口获取会话信息,还需要添加:
SDKFilter
sdk.security.filter.SDKFilter
SDKFilter
/*
SDKAuthzFilter
sdk.security.filter.SDKAuthzFilter
SDKAuthzFilter
/service/*
SDKAuthzFilter
*.jsp
至此,就完成了Tomcat adapter的配置。重启Tomcat使配置生效。
这边描述了Realm管理、客户端管理、用户管理和角色管理。
Keycloak预定义了“Master”realm。目前,InData中的应用大多是在Master realm下进行管理,用户也是如此。
前面的一基本就是对客户端Clients的管理
用户管理,用于管理用户、用户密码等属性,只有合法的用户才能访问受保护的应用。本节主要描述如何管理用户及其密码。
(1)查看用户
点击左侧菜单的“Users”,打开用户列表页。点击“View all Users”可显示已有的用户数据。
(2)创建用户
点击上一小节打开的用户列表页中的“Add user”,开始创建用户。Username是必填项。点击“Save”,将保存成功并打开该用户的编辑页面。
(3)用户密码
用户密码,也称用户凭证。打开用户编辑页面的“Credentials”tab页,可以设置用户的密码。
“Temporary”,点击切换为OFF。如果开启,那么该用户在首次登录时会被要求重置密码。
角色标识用户的一种类型或类别。通常应用将权限分配给角色,因为直接分配给用户的方式粒度过于细微会难以管理。本节主要描述如何管理角色以及角色用户映射。
(1)Realm角色
Realm级角色是定义角色的全局命名空间。点击左侧菜单“Roles”,可以看到已存在的角色数据
点击“Add Role”,填写Role Name并点击“Save”,即可创建新角色。
(2)用户角色映射
用户角色映射,即将角色分配给用户。通过“Role Mappings”,RoleMapping在users中可将角色分配给某一个用户。在Available Roles内选中角色,点击“Add selected”。
Effective Roles中显示已经生效的角色映射。将developer角色分配给Johndoe用户后,developer角色将会显示在Effective Roles中。
参考文档:http://idatalake.inspur.com/jsp/indata/docs/product/intelligentQA.jsp?li=nav-doc