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; ...
随机推荐
- Iperf3网络性能测试工具详解教程
Iperf3网络性能测试工具详解教程 小M 2020年4月17日 运维 本文下载链接 [学习笔记]Iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保 ...
- python基础之变量类型和数据运算
一.变量的类型 程序中,为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型的. 怎样知道一个变量的类型呢? 在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了 ...
- Linux中级之ansible配置(playbook)
一.playbooks 如果用模块形式一般有幂等性,如果用shell或者command没有幂等性 playbooks相当于是shell脚本,可以把要执行的任务写到文件当中,一次执行,方便调用 task ...
- IDEA 2019.2.4 破解安装教程
将下载的 IDEA 压缩包解压,找到 idealIU-2019.2.4.exe 安装文件,然后双击进行安装 安装完后不要运行,打开解压包中破解补丁与激活码文件夹,找到 jetbrains-agent. ...
- selenium多表单切换以及多窗口切换、警告窗处理
selenium表单切换 在做UI自动化,有时候要定位的元素属性在页面上明明是唯一的.却怎么也不执行对元素的操作动作,这时候多半是iframe表单在作怪. 切入表单:iddriver.switch_t ...
- Python3.x 基础练习题100例(71-80)
练习71: 题目: 编写input()和output()函数输入,输出5个学生的数据记录. 程序: N = 5 # stu # num : string # name : string # score ...
- 收购公司、孵化(产品)和被收购的20个短篇故事-BI产品的历史
原文地址: 20 short tales of acquiring companies, incubating (ideas into products) and being acquired. | ...
- LESS语法学习笔记
LESS 通过编写less文件来快速生成css文件,对css的语法进行了扩展 Less语法 注释 单行注释不会被编译,多行才会被编译 变量 less:定义变量用@ scss:定义变量用$ @num: ...
- Git 上传基本命令
注意:操作要保证在对应文件夹中打开Git bash here (例如:clone项目后要cd到文件中,否则报"git提示没有git存储库") 1.创建一个git裸服务器 (git ...
- 004:ZYNQ_AXI总线学习笔记(1)
1. WHAT IS AXI? AXI是一种高级可扩展接口,是ARM AMBA的一部分. 2. WHAT IS AMBA? AMBA是高级微控制器总线架构,开放的片内互联总线标准. 3.A ...