keycloak~OIDC&OAuth2&自定义皮肤
1 OpenID & OAuth2 & SAML
1.1 相关资料
https://github.com/keycloak/keycloak
https://www.keycloak.org/docs/latest/server_development
https://docs.cbioportal.org/2.2-authorization-and-authentication/authenticating-and-authorizing-users-via-keycloak
https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.3/html/server_developer_guide/providers
https://www.baeldung.com/java-keycloak-custom-user-providers
1.2 OpenID
OpenID是一种认证标准,互联网上有很多账户都是支持OpenID比如谷歌、雅虎、PayPal等等。
用户要使用OpenID就必须先在OpenID身份服务器(Identity Provider, IDP)获得OpenID 账号(比如Google账户)。用户可以使用OpenID账户来登录任何一个接受OpenID认证的服务应用(the relying party,RP,依赖方)。OpenID协议标准就是提供一个框架用来IDP和RP之间通信。
本质而言,用户的OpenID是一个为用户个人所拥有的特殊URL(比如 alice2016.openid.com),所以有些网站甚至会提供选项让用户自己去填写OpenID。
1.3 OAuth2
准确来讲,OAuth2是一个授权的标准协议。也许会令人困惑,OAuth2是OpenID-Connect的基础,但是OpenID-Connect是认证协议(在OpenID-Connect中,ID-Token也被当做是一种资源)。
让我们回到OAuth2,OAuth2提供了一种代理访问机制,也就是说一个应用(可以被称为客户端)可以代替用户到资源服务器上获得属于用户的资源或是进行符合用户权限的操作 ,而用户不用将自己的用户名和口令等身份凭据分享给客户端。OAuth2是通过IDP给第三方应用颁发令牌(Token)来实现以上功能的,第三方应用通过使用令牌向资源服务换取对应的资源。
在Twitter的OAuth指导手册中说OAuth2是一种认证协议,实际上,这是基于授权的“伪认证”。
1.4 SAML
SAML协议是三者中时间最长的协议,最初版本制定于2001年,并于2005年修改。作为一种安全性断言标记语言,SAML协议既可以用于认证也用于授权。
所谓的安全性断言,就是关于认证、授权以及用户属性(比如用用户的有效或者住址等信息)的声明集合,在SAML中,这些断言以XML的格式传输。
1.5 三者对比

2 OIDC
OIDC是OpenID Connect的简称,OIDC=(Identity, Authentication) + OAuth 2.0。它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。我们都知道OAuth2是一个授权协议,它无法提供完善的身份认证功能(关于这一点请参考[认证授权] 3.基于OAuth2的认证(译)),OIDC使用OAuth2的授权服务器来为第三方客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端,且可以适用于各种类型的客户端(比如服务端应用,移动APP,JS应用),且完全兼容OAuth2,也就是说你搭建了一个OIDC的服务后,也可以当作一个OAuth2的服务来用。
2.1 场景图

2.2 OIDC 核心概念
OAuth2提供了Access Token来解决授权第三方客户端访问受保护资源的问题;OIDC在这个基础上提供了ID Token来解决第三方客户端标识用户身份认证的问题。OIDC的核心在于在OAuth2的授权流程中,一并提供用户的身份认证信息(ID Token)给到第三方客户端,ID Token使用JWT格式来包装,得益于JWT(JSON Web Token)的自包含性,紧凑性以及防篡改机制,使得ID Token可以安全的传递给第三方客户端程序并且容易被验证。此外还提供了UserInfo的接口,用户获取用户的更完整的信息。
2.3 OIDC 主要术语
- EU:End User:一个人类用户。
- RP:Relying Party ,用来代指OAuth2中的受信任的客户端,身份认证和授权信息的消费方;
- OP:OpenID Provider,有能力提供EU认证的服务(比如OAuth2中的授权服务),用来为RP提供EU的身份认证信息;
- ID Token:JWT格式的数据,包含EU身份认证的信息。
- UserInfo Endpoint:用户信息接口(受OAuth2保护),当RP使用Access Token访问时,返回授权用户的信息,此接口必须使用HTTPS。
2.4 OIDC 工作流程
从抽象的角度来看,OIDC的流程由以下5个步骤构成: - RP发送一个认证请求给OP;
- OP对EU进行身份认证,然后提供授权;
- OP把ID Token和Access Token(需要的话)返回给RP;
- RP使用Access Token发送一个请求UserInfo EndPoint;
- UserInfo EndPoint返回EU的Claims。

3 登录统一
对于用户的登陆,keycloak是统一控制的,如果希望做个性化的处理,需要自己去开发css文件,生成对应的皮肤,然后在helm配置中去指定。
3.1 自定义皮肤
对于多个客户端来说,只要对接了keycloak,这们都会跳到统一的keycloak登陆页去认证。
3.1.1 Realm作用域皮肤

3.1.2 Client客户端的皮肤

3.2 登录重定向
在客户端配置时,需要指定客户端的重定向地址,当登录完成后,会重定向回来,这个配置我们可以是通配符或者是指定的地址,如下:

当你设置时指定地址后,你无法在客户端进行重写,如果你的重定向地址与keycloak配置的不同时,将出现下面错误:

而如果你设置为通配符时,你是可以在客户端程序里去重写它的。

我们可以在程序的配置里重写这个地址,只要符合通配符规则即可。

keycloak~OIDC&OAuth2&自定义皮肤的更多相关文章
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十三)之附加功能-自定义皮肤
前言 本篇要讲的算是一个layim代码功能扩充.在原来的laim中已经有自带的换肤功能,而且在skin配置中,你可以添加自己想要的皮肤图片路径.这些内容在接下来都不会涉及,本篇要讲的是自定义皮肤功能, ...
- 如何使用XE2及更高版本中提供的自定义皮肤(样式)功能
源:如何使用XE2及更高版本中提供的自定义皮肤(样式)功能 1. 制作样式文件: 点击 XE2+ 的 IDE 菜单上的 Tools-->Bitmap Style Designer, 打开设计器. ...
- 在WPS绿色版中增加自定义皮肤
在WPS绿色版中增加自定义皮肤小俊的博客:http://xiaojun911.com/WPS绿色版:http://xiaojun911.com/xiazai/469.html小俊精简的WPS2016 ...
- asp.net core系列 57 IS4 使用混合流(OIDC+OAuth2.0)添加API访问
一.概述 在上篇中,探讨了交互式用户身份验证,使用的是OIDC协议. 在之前篇中对API访问使用的是OAuth2.0协议.这篇把这两个部分放在一起,OpenID Connect和OAuth 2.0组合 ...
- 把cnblogs变成简书 - cnblogs博客自定义皮肤css样式
吐槽 博客园cnblogs作为老牌的IT技术博客类网站,为广大的开发者提供了非常不错的学习交流平台. 虽然博客内容才是重点,但是如果有赏心悦目的页面不更好吗! cnblogs可以更换博客模板,并且提供 ...
- Spring Security Oauth2 自定义 OAuth2 Exception
付出就要得到回报,这种想法是错的. 前言 在使用Spring Security Oauth2登录和鉴权失败时,默认返回的异常信息如下 { "error": "unauth ...
- Cnblogs自定义皮肤css样式-星空观测者
不知不觉来Cnblogs也这么久了,然而Blogs提供的主题还是依旧那么复古,总觉得阅读起来难免枯燥,虽然我认为做技术不可以太过浮躁,但是一个美观的主题终究是吸引人眼的第一要素. 毕竟这么久了,在博客 ...
- easyui自定义皮肤及缺陷修改
引言: 一个商业项目的需要,又因为时间紧迫的关系,准备购买一套简洁,易用,可定制化强的UI,经过对国内外多家UI产品进行了对比, 包括:FineUI, EasyUI, EXT.NET, EXTJS, ...
- layui 弹出框改变按钮颜色样式 自定义皮肤
1.在layer下新建文件夹和css 文件: 2.123.css body .layui-ext-yourskin .layui-layer-btn0{ border-color: #55ff83; ...
随机推荐
- 解析CentOS 8上的Xrdp服务器安装
解析CentOS 8上的Xrdp服务器安装 Linux系统技术交流QQ群(915246)验证问题答案:刘遄 导读 Xrdp 是 Microsoft 远程桌面协议 (RDP) 的开源实现,允许您以图 ...
- 利用rsync备份生产应用(二)
概述 上节主要是针对rsync服务端进行的配置和详解,本节主要针对在客户端上的rsync配置进行讲解. rsync用法 本地到本地 语法:rsync [OPTION...] SRC... [DEST] ...
- elk搜集日志,实现logstash根据message中结构不同动态创建索引并扩展功能,区分message中json和非json数据简单方式
搜集日志,但是框架本身也会打印很多日志是字符串的.我们自己希望的日志用json,但是又需要json字段可以扩展,logstash收集日志后都放在了message字段中,我们自定义打印的是json串,s ...
- tar压缩文件 .tar.gz
打包并压缩文件 tar -zcf ansible.tar.gz ansible/* z gzip属性 c 建立压缩文件 f 指定文件名 v 显示过程 解压文件 tar xzf ...
- Python for循环 - Python零基础入门教程
目录 一.for 循环语法 二.for 循环实战 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python ...
- HTML中option的单页调用
我们在用到下拉列表框select时,需要对选中的<option>选项触发事件,其实<option>本身没有触发事件方法,我们只有在select里的 onchange方法里触发. ...
- 微信小程序setdata修改数组或对象
1.this.setdata修改数组的固定一项的值 changeItemInArr: function() { this.setData({ 'arr[0].text':'changed data' ...
- LR: GLU-Net: Global-Local Universal Network for Dense Flow and Correspondences
Abstract 在图像中简历稠密匹配是很重要的任务, 包括 几何匹配,光流,语义匹配. 但是这些应用有很大的挑战: 大的平移, 像素精度, 外观变化: 当前是用特定的网络架构来解决一个单一问题. 我 ...
- 稀疏自编码器及TensorFlow实现
自动编码机更像是一个识别网络,只是简单重构了输入.而重点应是在像素级重构图像,施加的唯一约束是隐藏层单元的数量. 有趣的是,像素级重构并不能保证网络将从数据集中学习抽象特征,但是可以通过添加更多的约束 ...
- 如何选择视觉CV光源颜色
如何选择视觉CV光源颜色 一.光源颜色分类 光源颜色的选择对机器视觉光源有什么影响及意义呢,常用的光源颜色有白色(W).蓝色(B).红色(R).绿色(G).红外光(IR).紫外光(UV),这六种颜色. ...