keycloak~关于社区登录的过程说明

news/2024/11/18 18:21:14/文章来源:https://www.cnblogs.com/lori/p/18349064

keycloak将第三方登录(社区登录)进行了封装,大体主要会经历以下三个过程:

  1. 打开社区认证页面,输入账号密码或者扫码,完成社区上的认证
  2. 由社区进行302重定向,回到keycloak页面
  3. keycloak与社区完成一次oauth2授权码认证,通过社区返回的code来获取token,再通过token来获取社区上的用户信息,在这个过程中,社区不需要向keycloak公开用户的密码,这也是oauth2的安全性的表现
  4. keycloak检查用户是否与自己本地用户绑定,如果未绑定,进入第一认证流进行注册或者绑定现在有用户,完成与社区的对应关系,在这个过程中,keycloak对发出FEDERATED_IDENTITY_LINK事件
  5. 用户完成绑定之后,进行后一认证流,完成登录之后再做的事,如果用户已经完成绑定,那么第一认证流就不会进入了

回调地址的扩展

  • 当社区认证成功后,会跳转到keycloak的社区认证流
  • 当keycloak社区认证流完成后,会走到标准认证流
  • 标准认证流完成后,会重写向到来源页,并带上keycloak的code码
  • 这时,来源页上有且只有code码这个参数,如果希望扩展url上的参数,我们需要以下步骤

在社区回调地址上添加loginType参数

  • org.keycloak.services.resources.IdentityBrokerService.finishBrokerAuthentication()方法添加对loginType的操作
private Response finishBrokerAuthentication(BrokeredIdentityContext context, UserModel federatedUser,AuthenticationSessionModel authSession, String providerId) {authSession.setAuthNote(AuthenticationProcessor.BROKER_SESSION_ID, context.getBrokerSessionId());authSession.setAuthNote(AuthenticationProcessor.BROKER_USER_ID, context.getBrokerUserId());this.event.user(federatedUser);context.getIdp().authenticationFinished(authSession, context);authSession.setUserSessionNote("loginType", providerId);...
}
  • org.keycloak.protocol.oidc.OIDCLoginProtocol.authenticated()方法中,获取loginType,并添加到回调路径的URL参数中
  code = OAuth2CodeParser.persistCode(session, clientSession, codeData);redirectUri.addParam(OAuth2Constants.CODE, code);// TODO: 登录成功后,将用户登录方式追加到回调页面上if (authSession.getUserSessionNotes().containsKey("loginType")) {String loginType = authSession.getUserSessionNotes().get("loginType");redirectUri.addParam("loginType", loginType);}

FEDERATED_IDENTITY_LINK的完善

  • 默认的绑定消息,内容比较少,不满足我们的需求
{"time": 1723099954167,"type": "FEDERATED_IDENTITY_LINK","realmId": "fabao","clientId": "pkulaw","userId": "e62a4ea6-c1c3-4f10-9136-8ceebba45339","sessionId": null,"ipAddress": "111.198.143.194","error": null,"details": {"identity_provider": "carsi","identity_provider_identity": "student@pku.edu.cn","code_id": "6668189e-4cd6-488e-8582-d28b87636b41","username": "phone202408081431274571"}
}

扩展消息,需要按以下步骤操作

  • 在org.keycloak.services.resources.IdentityBrokerService.afterFirstBrokerLogin方法中添加以下代码
  // 社区绑定现在有用户后,发的事件FEDERATED_IDENTITY_LINK,我们需要添加一些扩展信息event.detail(Details.IDENTITY_PROVIDER, providerId);event.detail(Details.IDENTITY_PROVIDER_USERNAME, context.getBrokerUserId()); //event.detail(Details.IDENTITY_PROVIDER_USERNAME, context.getUsername());event.detail("identity_provider_username", context.getUsername());
  • 添加之后,我们为FEDERATED_IDENTITY_LINK事件消息添加identity_provider_username
{"time": 1723101725866,"type": "FEDERATED_IDENTITY_LINK","realmId": "fabao","clientId": "pkulaw","userId": "347c9e9e-076c-45e3-be74-c482fffcc6e5","sessionId": null,"ipAddress": "10.10.80.81","error": null,"details": {"identity_provider": "carsi","identity_provider_username": "student@pku.edu.cn","identity_provider_identity": "6zETJRPrWiBi7B85cCHPoVD7dyI\u003d","code_id": "c344f279-9786-468b-a67e-fecf39c531b0","username": "test"}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/779778.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费项目管理软件:提高效率的顶级选择

国内外主流的10款免费项目管理工具对比:PingCode、Worktile、Jira 、Wrike 、ClickUp、Trello、Asana、飞书、Tapd、Teambition。在选择项目管理软件时,许多团队面临的最大挑战之一是成本。尤其是对于初创公司或小型企业来说,高昂的软件订阅费可能是一个沉重的负担。然而,市…

表达式(二)

后缀表达式由于其特殊性只需要操作数栈,不需要运算符栈,每当出现运算符就说明是对前面两个操作数进行操作 #include<bits/stdc++.h> using namespace std; char tok[30][20]; int tok_max; int pos=1;int main(){tok_max=0;int num1=0;for(;;){int c=getchar();if(c==@…

基于深度学习网络的人员行为视频检测系统matlab仿真,带GUI界面

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 2.算法涉及理论知识概要基于GoogLeNet深度学习网络的人员行为视频检测系统是一个高度复杂的计算机视觉应用,它利用深度神经网络的强大功能来识别和分类视频中的人员行为。GoogLeNet,也称为Inception网络,…

Forrester Wave™报告:天翼云三项产品能力获评最高分!

8月5日,国际权威研究机构Forrester发布了《Forrester Wave™: 中国公有云平台厂商评测,2024Q3》报告。中国电信天翼云凭借前瞻性的发展战略和领先的产品能力,跻身行业头部玩家阵营。同时,中国电信天翼云在数据治理服务、网络和内容交付服务、先进通讯和区块链服务三项产品能…

从理念到实践,解构HBlock降本增效黑科技!

天翼云存储资源盘活系统HBlock 2024年线上技术分享会来啦!“新存储 更轻量” 天翼云存储资源盘活系统HBlock 2024年线上技术分享会来啦! 在2023年HBlock分享会之后 不少小伙伴积极参与了1PB免费尝鲜活动 好评如潮的同时也对HBlock有了更多期待! 那么 2024年轻量存储技术有哪…

21.python函数(return)

return 一、return语句 1、return是指定一个返回值 2、在python中创建一个函数 ,可以用return语句指定返回的的值,这个返回值可以是任意的类型 3、return语句在同一个函数中可以出现多次,但是只有有一个得到执行,就会直接结束函数的执行。return后面的语句不执行了 4、retu…

C++ - 二级指针动态内存申请与释放

C语言描述: #include "stdio.h" #include "stdlib.h" #include "assert.h"void InitArray(int** Array, int row, int cols) {for (int i = 0; i < row; i++){for (int j = 0; j < cols; j++){Array[i][j] = i + j;}} } void PrintfArray…

一招致胜!天翼云对象存储攻克数据存、管、用难题!

天翼云对象存储(CT-ZOS,Zettabyte Object Storage)是一款海量、弹性、高可靠、高性价比的存储产品,也是专门针对云计算、大数据和非结构化数据的海量存储形态,通过S3协议和标准的服务接口,提供图片、音视频、文本等非结构化数据的云存储服务,助力企业高效应对数据存储挑…

一文搞懂C/C++常用编译器

1. C++ 编译器介绍1.1. MSVC1.1.1. Visual C++与Visual Studio的版本对应关系 1.1.2. 工具链的主要工具1.2. GCC1.2.1. GCC的主要优点 1.2.2. GCC的常用工具 1.2.3. MinGW1.3. Clang/LLVM1.3.1. Clang介绍 1.3.2. Clang与LLVM的关系 1.3.3. Clang/LLVM与GCC2. C++ 编译器的安装…

主打一个免费:英智LLM推理API,主流大模型API任你选!

人工智能(AI)技术的飞速发展已经成为各行各业的关键驱动力,尤其是大语言模型(LLM)正在成为推动下一波技术创新浪潮的颠覆性力量。开发者如何享受LLM带来的红利,创造出优秀的应用?实践证明,使用大语言模型API,可以有事半功倍的效果! 部署过大模型的小伙伴应该都清楚,…

阿里云微服务引擎及 API 网关 2024 年 6 月产品动态

阿里云微服务引擎及 API 网关 2024 年 6 月产品动态

docker 简单入门1

这里写自定义目录标题DockerDocker安装(centos) Docker启动、停止、查看状态 Docker其他命令(常用)查询镜像 安装镜像在线安装镜像 离线安装镜像(说明可能不标准)启动容器 重启容器 停止容器 修改容器中的配置文件(说明可能不标准) docker comimt docker save docker l…