keycloak关于社区认证它有统一的设计,社区认证包括了github,microsoft,wechat,qq,dingtalk等等,当然你还可以扩展很多实现了oauth2协议的第三方社区,将它们对接到keycloak上面来,这变得十分容易;社区认证一般由3个提供者社区,主要如下:

  1. 社区服务提供者,继承了AbstractOAuth2IdentityProvider抽象类,实现了SocialIdentityProvider接口
  2. 社区服务First Login Flow,当社区用户与keycloak用户没有建立关联时,会走这个流程
  3. 社区服务Post Login Flow,当社区用户与keycloak建立关系后,在执行完社区服务提供者回调方法后,会走这个流程,完成社区认证最后的步骤

社区认证流程

  1. 用户在keycloak认证平台,点击第三方社区登录链接
  2. 跳转到第三方之后,用户在第三方完成登录
  3. 第三方让用户进行确认,是否公开自己的信息,用户同意之后,302重定向到keycloak社区接口
  4. 社区接口中通过第三方传回的code进行用户token的获取
  5. 根据用户token,调用第三方用户接口,获取第三方用户公开的信息
  6. 完成keycloak社区认证
  7. 根据用户属性信息
  8. 走post login flow流程
  9. 走token生成流程,根据client scope的mapper进行token字段的构建
  10. 完成登录后,302到目标页,带上keycloak颁发的授权码
  11. 目标网站,根据授权码,获取keycloak的token接口获取token

社区绑定事件FEDERATED_IDENTITY_LINK的扩展

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

社区认证绑定用户属性的方式

当社区用户绑定keycloak用户后,社区的信息在登录后,可以自动将它们写到用户属性表里,我们可以通过以下方式来实现

  1. AbstractJsonUserAttributeMapper的实现类,并通过META-INF/services/org.keycloak.broker.provider.IdentityProviderMapper 来注入它
  2. 直接在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]);
}

社区认证中用户同步的模式

  1. LEGACY(传统模式):

    • 在传统模式下,Keycloak 会尝试从外部身份提供程序导入用户,但如果在 Keycloak 中找不到匹配的用户,则会创建新用户。
    • 如果在外部提供程序中删除了用户,Keycloak 不会自动删除相应的用户帐户,而是将其标记为禁用状态。
  2. IMPORT(导入模式):

    • 在导入模式下,Keycloak 会从外部身份提供程序导入用户,但不会创建新用户。它只会更新现有用户的属性,确保与外部提供程序同步。
    • 如果在外部提供程序中删除了用户,Keycloak 不会自动删除用户帐户,而是将其标记为禁用状态。
  3. FORCE(强制模式):

    • 在强制模式下,Keycloak 会强制执行与外部身份提供程序的完全同步。这意味着它会创建新用户,更新现有用户的属性,同时还会禁用或删除在 Keycloak 中找不到的用户。
    • 强制模式确保Keycloak中的用户与外部提供程序中的用户保持完全同步。

keycloak~关于社区认证的总结的更多相关文章

  1. keycloak~账号密码认证和授权码认证

    用户名密码登录 POST /auth/realms/demo/protocol/openid-connect/token 请求体 x-www-form-urlencoded grant_type:pa ...

  2. ionic + asp.net core webapi + keycloak实现前后端用户认证和自动生成客户端代码

    概述 本文使用ionic/angular开发网页前台,asp.net core webapi开发restful service,使用keycloak保护前台页面和后台服务,并且利用open api自动 ...

  3. keycloak文章汇总

    keycloak文章汇总 Keycloak是一个致力于解决应用和服务身份验证与访问管理的开源工具.可以通过简单的配置达到保护应用和服务的目的. 用户管理 你的应用不需要开发登录模块,验证用户和保存用户 ...

  4. sau交流学习社区--songEagle开发系列:Vue.js + Koa.js项目中使用JWT认证

    一.前言 JWT(JSON Web Token),是为了在网络环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519). JWT不是一个新鲜的东西,网上相关的介绍已经非常多了.不是很了解的 ...

  5. jenkins 集成 keycloak 认证

    keycloak 是很不错的sso 工具,当然也有Jenkins 的插件,我们可以使用jenkins 插件,方便用户账户的管理 环境准别 docker-compose version: "3 ...

  6. ParrotSec 中文社区 QQ群认证 Openssl解密

    ParrotSec 中文社区 QQ群认证 Openssl解密 下载Key.txt 打开parrot 系统,复制文件到系统.打开命令行输入 openssl enc -aes-256-cfb -d -in ...

  7. 开源认证和访问控制的利器keycloak使用简介

    目录 简介 安装keycloak 创建admin用户 创建realm和普通用户 使用keycloak来保护你的应用程序 安装WildFly client adapter 注册WildFly应用程序 安 ...

  8. Keycloak 13 自定义用户身份认证流程(User Storage SPI)

    Keycloak 版本:13.0.0 介绍 Keycloak 是为现代应用程序和服务提供的一个开源的身份和访问管理的解决方案. Keycloak 在测试环境可以使用内嵌数据库,生产环境需要重新配置数据 ...

  9. Laravel 5.2 使用 JWT 完成多用户认证 | Laravel China 社区 - 高品质的 Laravel 开发者社区 - Powered by PHPHub

    Json Web Token# JWT代表Json Web Token.JWT能有效地进行身份验证并连接前后端. 降地耦合性,取代session,进一步实现前后端分离 减少服务器的压力 可以很简单的实 ...

  10. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

随机推荐

  1. Windows系统安装使用Scoop包管理器

        前言 Scoop是Windows的命令行安装程序. 如果用过Linux系统,使用apt-get工具安装过软件,或者用过Python,知道pip工具用于管理Python各种依赖包,那么理解Sco ...

  2. 零基础学习人工智能—Python—Pytorch学习(十三)

    前言 最近学习了一新概念,叫科学发现和科技发明,科学发现是高于科技发明的,而这个说法我觉得还是挺有道理的,我们总说中国的科技不如欧美,但我们实际感觉上,不论建筑,硬件还是软件,理论,我们都已经高于欧美 ...

  3. COSBrowser文件编辑-随时随地在线编辑

    本文介绍如何通过COSBrowser文件在线编辑功能更方便的使用云上存储的数据. 痛点分析 日常工作和生活中,我们需要把记录的文档.编写的文案.音视频文件保存管理好,又担心设备损坏.文件丢失或是更换设 ...

  4. js面试题-代码实现

    新 API 最新的 url 参数获取的 API? URLSearchParams // 有如下一个url: http://localhost?a=1&b=2 function getUrlPa ...

  5. ngrx 4: 创建 ngrx 4.x 项目

    创建 @ngrx 4.x 项目 @ngrx 4.x 相比上一个版本有了一些变化,该文介绍了如何在 Angular 中集成 @ngrx r.x 实现状态管理. 一.创建基本项目 使用 Angular C ...

  6. 【Javaweb】【Js】【Servlet】Js与Servlet交互 - Js请求Servlet与响应Servlet

    [原生JS][POST]请求和响应(一) 虽然效率有点低,但是作为初学者,可以先看看这个,然后再去看后面用Json处理. XMLHttpRequest介绍 XMLHttpRequest 对象用于在后台 ...

  7. intellij idea 自动生成test单元测试

    1. 创建测试类 打开IDEA,在任意类名,任意接口名上,按ctrl+shift+t选择Create New Test   image 然后根据提示操作(默认即可),点击确认,就在项目的/test/j ...

  8. Qt编写的项目作品15-皮肤生成器+UIDemo

    一.功能特点 自带17套精美皮肤样式,其中包括黑色.灰色.扁平等. 皮肤生成器只需要简单几步就可以生成一套自定义的皮肤. 自带了26种uidemo,非常漂亮美观,涵盖了主界面布局.菜单切换等各种效果, ...

  9. Qt音视频开发6-ffmpeg解码处理

    一.前言 采用ffmpeg解码,是所有视频监控开发人员必备的技能,绕不过去的一个玩意,甚至可以说是所有音视频开发人员的必备技能.FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开 ...

  10. 直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践

    本文由vivo互联网技术团队LinDu.Li Guolin分享,有较多修订和改动. 1.引言 IM即时消息模块是直播系统的重要组成部分,一个稳定.有容错.灵活的.支持高并发的消息模块是影响直播系统用户 ...