keycloak~关于社区认证的总结
keycloak关于社区认证它有统一的设计,社区认证包括了github,microsoft,wechat,qq,dingtalk等等,当然你还可以扩展很多实现了oauth2协议的第三方社区,将它们对接到keycloak上面来,这变得十分容易;社区认证一般由3个提供者社区,主要如下:
- 社区服务提供者,继承了AbstractOAuth2IdentityProvider抽象类,实现了SocialIdentityProvider接口
- 社区服务First Login Flow,当社区用户与keycloak用户没有建立关联时,会走这个流程
- 社区服务Post Login Flow,当社区用户与keycloak建立关系后,在执行完
社区服务提供者回调方法后,会走这个流程,完成社区认证最后的步骤
社区认证流程
- 用户在keycloak认证平台,点击第三方社区登录链接
- 跳转到第三方之后,用户在第三方完成登录
- 第三方让用户进行确认,是否公开自己的信息,用户同意之后,302重定向到keycloak社区接口
- 社区接口中通过第三方传回的code进行用户token的获取
- 根据用户token,调用第三方用户接口,获取第三方用户公开的信息
- 完成keycloak社区认证
- 根据用户属性信息
- 走post login flow流程
- 走token生成流程,根据client scope的mapper进行token字段的构建
- 完成登录后,302到目标页,带上keycloak颁发的授权码
- 目标网站,根据授权码,获取keycloak的token接口获取token

社区绑定事件FEDERATED_IDENTITY_LINK的扩展
- 具体执行的方法:org.keycloak.services.resources.IdentityBrokerService.afterFirstBrokerLogin方法
- 添加自定义事件元素:event.detail(Details.IDENTITY_PROVIDER_USERNAME, context.getBrokerUserId());

社区认证绑定用户属性的方式
当社区用户绑定keycloak用户后,社区的信息在登录后,可以自动将它们写到用户属性表里,我们可以通过以下方式来实现
- AbstractJsonUserAttributeMapper的实现类,并通过META-INF/services/org.keycloak.broker.provider.IdentityProviderMapper 来注入它
- 直接在SocialIdentityProvider具体社区实现类中,重写
updateBrokeredUser方法,进行两种用户模块的映射
社区认证时的state参数构成
1 社区登录回调state参数,默认由3个参数的拼接而组成,分别是state随机数,tableId和clientId,而如果我们希望扩展它,让它支持4个参数,可以这样操作:
- org.keycloak.broker.provider.util.IdentityBrokerState类中encoded方法

2 构建社区登录地址时添加自定义state参数
- AbstractOAuth2IdentityProvider类中createAuthorizationUrl方法,修改state参数的拼接
String state = request.getState().getEncoded();
if (request.getAuthenticationSession().getAuthNote("g") != null &&
request.getAuthenticationSession().getAuthNote("g").trim() != "") {
state = state + "." + request.getAuthenticationSession().getAuthNote("g");
}

3 在认证成功后federatedIdentityContext上下文添加参数
- AbstractOAuth2IdentityProvider类中Endpoint.authResponse方法,再返回之前为federatedIdentity添加groupId参数
// 添加集团代码
String[] decoded = DOT.split(state, 4);
if (decoded.length == 4) {
federatedIdentity.setUserAttribute("g", decoded[3]);
}

社区认证中用户同步的模式
LEGACY(传统模式):
- 在传统模式下,Keycloak 会尝试从外部身份提供程序导入用户,但如果在 Keycloak 中找不到匹配的用户,则会创建新用户。
- 如果在外部提供程序中删除了用户,Keycloak 不会自动删除相应的用户帐户,而是将其标记为禁用状态。
IMPORT(导入模式):
- 在导入模式下,Keycloak 会从外部身份提供程序导入用户,但不会创建新用户。它只会更新现有用户的属性,确保与外部提供程序同步。
- 如果在外部提供程序中删除了用户,Keycloak 不会自动删除用户帐户,而是将其标记为禁用状态。
FORCE(强制模式):
- 在强制模式下,Keycloak 会强制执行与外部身份提供程序的完全同步。这意味着它会创建新用户,更新现有用户的属性,同时还会禁用或删除在 Keycloak 中找不到的用户。
- 强制模式确保Keycloak中的用户与外部提供程序中的用户保持完全同步。
keycloak~关于社区认证的总结的更多相关文章
- keycloak~账号密码认证和授权码认证
用户名密码登录 POST /auth/realms/demo/protocol/openid-connect/token 请求体 x-www-form-urlencoded grant_type:pa ...
- ionic + asp.net core webapi + keycloak实现前后端用户认证和自动生成客户端代码
概述 本文使用ionic/angular开发网页前台,asp.net core webapi开发restful service,使用keycloak保护前台页面和后台服务,并且利用open api自动 ...
- keycloak文章汇总
keycloak文章汇总 Keycloak是一个致力于解决应用和服务身份验证与访问管理的开源工具.可以通过简单的配置达到保护应用和服务的目的. 用户管理 你的应用不需要开发登录模块,验证用户和保存用户 ...
- sau交流学习社区--songEagle开发系列:Vue.js + Koa.js项目中使用JWT认证
一.前言 JWT(JSON Web Token),是为了在网络环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519). JWT不是一个新鲜的东西,网上相关的介绍已经非常多了.不是很了解的 ...
- jenkins 集成 keycloak 认证
keycloak 是很不错的sso 工具,当然也有Jenkins 的插件,我们可以使用jenkins 插件,方便用户账户的管理 环境准别 docker-compose version: "3 ...
- ParrotSec 中文社区 QQ群认证 Openssl解密
ParrotSec 中文社区 QQ群认证 Openssl解密 下载Key.txt 打开parrot 系统,复制文件到系统.打开命令行输入 openssl enc -aes-256-cfb -d -in ...
- 开源认证和访问控制的利器keycloak使用简介
目录 简介 安装keycloak 创建admin用户 创建realm和普通用户 使用keycloak来保护你的应用程序 安装WildFly client adapter 注册WildFly应用程序 安 ...
- Keycloak 13 自定义用户身份认证流程(User Storage SPI)
Keycloak 版本:13.0.0 介绍 Keycloak 是为现代应用程序和服务提供的一个开源的身份和访问管理的解决方案. Keycloak 在测试环境可以使用内嵌数据库,生产环境需要重新配置数据 ...
- Laravel 5.2 使用 JWT 完成多用户认证 | Laravel China 社区 - 高品质的 Laravel 开发者社区 - Powered by PHPHub
Json Web Token# JWT代表Json Web Token.JWT能有效地进行身份验证并连接前后端. 降地耦合性,取代session,进一步实现前后端分离 减少服务器的压力 可以很简单的实 ...
- 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)
构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...
随机推荐
- Winform窗体控件双向绑定数据模拟读写PLC数据
1.用Modbus工具模拟PLC 2.创建一个实体类 点击查看代码 internal class Data : INotifyPropertyChanged { ushort[] ushorts = ...
- 用人工智能模型预测股市和加密货币的K线图
前一篇:<从爱尔兰歌曲到莎士比亚:LSTM文本生成模型的优化之旅> 前言:加密货币市场昨日大幅下跌,一天内市值蒸发逾70亿 人民币.有人可能会问,如果使用人工智能模型预测市场的涨跌,是否能 ...
- uniapp 坑 - sslVerify不支撑离线打包
uniapp 打包为Android的apk时,由于适用https和自签证书,离线打包不支撑sslVerify,导致出现Trust anchor for certification path not f ...
- 腾讯云 CHDFS 助力微信秒级异常检测
微信全景监控平台介绍 微信全景监控平台,是微信的多维指标 OLAP 监控以及数据分析平台.支持自定义多维度指标上报,海量数据实时上卷下钻分析,提供了秒级异常检测告警能力. 项目高效支撑了视频号.微信支 ...
- 题解:P10704 救赎(Redemption)
数论题,先看数据范围,发现 $n$ 和 $m$ 都非常大,但是 $\sum_{i=1}^{i=n}a_i \le 10^9$. 解以上不等式得不同的 $a_i$ 大约有 $40000$ 个.记有 $c ...
- 工欲善其事,必先利其器。如何玩转 VS Code?
Visual Studio Code 作为广受好评的开发工具,已经被越来越多的开发者当作首选的开发工具.然而,你真的了解 VS Code 了吗?你真的会使用 VS Code,把 VS Code 的强大 ...
- Qt编写的视频播放综合应用示例(qmedia/ffmpeg/vlc/mpv/海康sdk等)
一.功能特点 1.1 基础功能 支持各种音频视频文件格式,比如mp3.wav.mp4.asf.rm.rmvb.mkv等. 支持本地摄像头设备,可指定分辨率.帧率. 支持各种视频流格式,比如rtp.rt ...
- 《AutoCAD2020中文版基础教程》和《从零开始—AutoCAD 2020中文版基础教程》配套资源下载
<AutoCAD2020中文版基础教程>作者:姜春峰//武小紅//魏春雪中国青年出版社配套资源链接:https://pan.baidu.com/s/1kPGNKZEw2kOTGqZyXjp ...
- Golang基础-字节跳动青训营
Golang 安装 访问 https://go.dev/ ,点击 Download ,下载对应平台安装包,安装即可 如果无法访问上述网址,可以改为访问 https://studygolang.com/ ...
- linux服务器下 conda 配置清华源
安装miniconda 下载安装脚本 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Li ...