CAS 5.3.X授权第三方(码云)登录

多系统使用CAS实现SSO登录案例 实现SSO有很多种方案,比较简单且可行的一般都是如上两种再加上CAS,一般企业内部多个系统之间如果想实现SSO,比较推荐的方式就是今天要介绍的CAS,Central Authentication Service,中央身份认证服务。CAS Server,作为认证服务的中心,需要单独部署;CAS Client,指需要单点登录的各个系统,官方支持10+类型的客户端;如下是一个多系统完整进行CAS SSO的流程:SSO登录流程。 阅读详情

针对单点登录的配置,可以看我上一篇:CAS 5.3.x 单点登录https://blog.youkuaiyun.com/Coder_Knight/article/details/120720018

Cas作为国外的 项目,所有集成了外网的很多第三方,github 、goole 等,但是国内的第三方需要自己去配置,Cas也确实提供了配置,下面就去实现该功能吧

# cas.authn.pac4j.oauth2[0].authUrl=
# cas.authn.pac4j.oauth2[0].tokenUrl=
# cas.authn.pac4j.oauth2[0].profileUrl=
# cas.authn.pac4j.oauth2[0].profilePath=
# cas.authn.pac4j.oauth2[0].profileVerb=GET|POST
# cas.authn.pac4j.oauth2[0].profileAttrs.attr1=path-to-attr-in-profile
# cas.authn.pac4j.oauth2[0].customParams.param1=value1
# cas.authn.pac4j.oauth2[0].usePathBasedCallbackUrl=false
# cas.authn.pac4j.oauth2[0].principalAttributeId=

第三方设置

如图,现在我以码云(gitee)为例,本来想用CSND的,但是找不到优快云的配置

首先:登录码云

打开设置->第三方应用

 

 创建以后出现以下页面

Cas Server设置

添加cas-server-support-pac4j-webflow依赖

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-pac4j-webflow</artifactId>
    <version>${cas.version}</version>
</dependency>

设置WEB-INF/classess/application.properties的配置,

#gitee
cas.authn.pac4j.oauth2[0].id=c556cb01c02ddd50e369468284304a4a2625c3e907f8a0fbb378bb3ea375186f
cas.authn.pac4j.oauth2[0].secret=ecdac017645beb7eb38bad298067c03505453303ecb1a8aa1ebe9473676a20c1
cas.authn.pac4j.oauth2[0].clientName=gitee
cas.authn.pac4j.oauth2[0].authUrl=https://gitee.com/oauth/authorize
cas.authn.pac4j.oauth2[0].tokenUrl=https://gitee.com/oauth/token
cas.authn.pac4j.oauth2[0].profileUrl=https://gitee.com/api/v5/user
cas.authn.pac4j.oauth2[0].profileVerb=GET
cas.authn.pac4j.oauth2[0].usePathBasedCallbackUrl=false
cas.authn.pac4j.oauth2[0].principalAttributeId=id
#cas.authn.pac4j.oauth2[0].customParams.scope=user_info
#cas.authn.pac4j.oauth2[0].autoRedirect=false
#cas.authn.pac4j.oauth2[0].profilePath=#GitHubProfile#

重新启动Cas Server 

可以看到已经多了一个Gitee的连接了,点击以后出现码云的登录页面,输入你自己的用户名密码登录以后,哎,出现错误了吧。。。

无效的登录回调地址,可以看一下URL,明细路径不对呀

 原来Cas的配置文件中设置了服务地址和服务前缀,需要自定义自己的地址

在WEB-INF/classess/application.properties添加配置

#覆盖默认路径
cas.server.name=https://sso.test.com
cas.server.prefix=https://sso.test.com/cas

重启访问,这样才对

 然后,出错了。。。

其实到这里已经成功了大部分,但是就是这个小部分的错误,导致我止步不前好多天

然后通过debug发现了问题所在,虽然这里只有几句话,但是调查超级费事。。。

首先错误出现的位置在cas-server-support-pac4j-authentication这个jar包中AbstractPac4jAuthenticationHandler中的createResult方法如下

    protected AuthenticationHandlerExecutionResult createResult(final ClientCredential credentials, final UserProfile profile, final BaseClient client) throws GeneralSecurityException {
        if (profile == null) {
            throw new FailedLoginException("Authentication did not produce a user profile for: " + credentials);
        } else {
            String id = this.determinePrincipalIdFrom(profile, client);
            if (StringUtils.isBlank(id)) {
                throw new FailedLoginException("No identifier found for this user profile: " + profile);
            } else {
                credentials.setUserProfile(profile);
                credentials.setTypedIdUsed(this.isTypedIdUsed);
                Principal principal = this.principalFactory.createPrincipal(id, new LinkedHashMap(profile.getAttributes()));
                LOGGER.debug("Constructed authenticated principal [{}] based on user profile [{}]", principal, profile);
                return this.createHandlerResult(credentials, principal, new ArrayList(0));
            }
        }
    }

可以看到有一个id为空的判断,默认取值来自pac4j的UserProfile中的id,但是该熟悉的默认值来自于org.pac4j.oauth.profile.generic.GenericOAuth20ProfileDefinition的方法extractUserProfile

    @Override
    public OAuth20Profile extractUserProfile(final String body) {
        final OAuth20Profile profile = new OAuth20Profile();
        final JsonNode json = JsonHelper.getFirstNode(body, getFirstNodePath());
        if (json != null) {
            if (getProfileId() != null) {
                profile.setId(ProfileHelper.sanitizeIdentifier(profile, JsonHelper.getElement(json, getProfileId())));
            } 
            for (final String attribute : getPrimaryAttributes()) {
                convertAndAdd(profile, PROFILE_ATTRIBUTE, attribute, JsonHelper.getElement(json, attribute));
            }
            for (final String attribute : getSecondaryAttributes()) {
                convertAndAdd(profile, PROFILE_ATTRIBUTE, attribute, JsonHelper.getElement(json, attribute));
            }
            for (final Map.Entry<String, String> entry : getProfileAttributes().entrySet()) {
                final String key = entry.getKey();
                final String value = entry.getValue();
                convertAndAdd(profile, PROFILE_ATTRIBUTE, key, JsonHelper.getElement(json, value));
            }

        } else {
            raiseProfileExtractionJsonError(body);
        }
        return profile;
    }

因为pac4j需要设定属性profileId,但是CAS提供的对外熟悉不存在该字段无法直接赋值ID,以我现在使用的Gitee为例,返回用户属性中ID作为唯一性区分字段,不太好设置,其实cas提供了另外的设置方式

# 默认值false,设定true后,下面的principalAttributeId=email将作为类似主键替代ID
cas.authn.pac4j.typedIdUsed=true
#gitee
cas.authn.pac4j.oauth2[0].id=c556cb01c02ddd50e369468284304a4a2625c3e907f8a0fbb378bb3ea375186f
cas.authn.pac4j.oauth2[0].secret=ecdac017645beb7eb38bad298067c03505453303ecb1a8aa1ebe9473676a20c1
cas.authn.pac4j.oauth2[0].clientName=gitee
cas.authn.pac4j.oauth2[0].authUrl=https://gitee.com/oauth/authorize
cas.authn.pac4j.oauth2[0].tokenUrl=https://gitee.com/oauth/token
cas.authn.pac4j.oauth2[0].profileUrl=https://gitee.com/api/v5/user
cas.authn.pac4j.oauth2[0].profileVerb=GET
cas.authn.pac4j.oauth2[0].usePathBasedCallbackUrl=false
cas.authn.pac4j.oauth2[0].principalAttributeId=email
#cas.authn.pac4j.oauth2[0].profileAttrs.created_at=created_at
#cas.authn.pac4j.oauth2[0].profileAttrs.updated_at=updated_at
#cas.authn.pac4j.oauth2[0].profileAttrs.name=name
#cas.authn.pac4j.oauth2[0].customParams.scope=user_info
#cas.authn.pac4j.oauth2[0].autoRedirect=false
#cas.authn.pac4j.oauth2[0].profilePath=#GitHubProfile#

如上设置以后,重新登录

发现已经可以登录了,这算是比较简便的方式了,麻烦的方式就是自己去改源码。。。

后续如果有其他发现,继续追加 

CAS单点登录-第三方登录[QQ、微信、优快云、GitHub](十四) 总的来说,面试是有套路的,一面基础,二面架构,三面个人。最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!内容对你有帮助,可以扫码获取!!(备注Java获取)**总的来说,面试是有套路的,一面基础,二面架构,三面个人。最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友。 阅读详情

相关推荐

CAS方式实现单点登录

单点登录,英文是 Single Sign On,缩写为 SSO。 多个站点(192.168.1.20X)共用一台认证授权服务器(192.168.1.110,用户数据库和认证授权模块共用)。用户经由其中任何一个站点(比如 192.168.1.201)登录后,可以免登录访问其他所有站点。而且,各站点间可以通过该登录状态直接交互。 CAS Server 为需要独立部署的 Web 应用。CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Jav...

monologuezjp的博客 1万+

第三方终端如何接入CAS

话不多说,上代码: package org.jasig.cas.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.Malfo

AVATAR 2418

CAS单点登录从入门到部署

当我们访问其他的应用,与前面的步骤也是基本相同,首先用户访问受保护的资源,跳转回浏览器,浏览器含有先前登录的CASTGC cookie,CASTGC cookie包含了TGT并发送到CAS认证中心,CAS认证中心校验TGT是否有效,如果有效分发浏览器一个带ST参数的资源地址URL,应用程序拿到ST后,再发送给CAS认证中心,如果认证了ST有效后,结果会返回一个包含成功信息的XML给应用。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。PGT是ST签发的。

cgk_ALEM的博客 1998

cas service 第三方认证登陆并跳转

cas service 本身支持用户名、密码登陆 也支持第三方qq、微信等认证方式,这里我们完整介绍自定义第三方登陆验证的实现方式。这里就是为了介绍使用方法 所以一切从简,第三方认证的接口替换这个userId的获取方式就可以了。5、自定义认证拦截器(主要作用是从证书里获取登陆人员信息,校验是否合法 合法跳转)6、拦截器配置(修改deployerConfigContext.xml)到这里 接收请求 生成证书就完毕了,下面接着需要获取证书、认证。3、配置开放接口(修改cas-servlet.xml)

风林火山 1194

单点登录协议有哪些?CAS、OAuth、OIDC、SAML有何异同?

单点登录实现中,系统之间的协议对接是非常重要的一环,一般涉及的标准协议类型有 CAS、OAuth、OpenID Connect、SAML,本文将对四种主流 SSO协议进行概述性的介绍,并比较其异同,读者亦可按图索骥、厘清关键概念。 一、认证与授权的区别 在介绍具体协议之前,有必要先说明“认证(Authentication)”和“授权(Authorization)”的区别。 认证(Authentication)即确认该用户的身份是他所声明的那个人; 授权(Authorization).

nidengxia的博客 7047

CAS5.3单点登录服务端搭建与整合springboot

什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 SSO是概念,实现SSO需要用到CAS框架 使用cas框架实现单点登陆 有多个不同服务器的web层需要登陆。就要使用cas。在一个web层页面登录,其他页面都不需要登录就能访问 如www.tao...

YZX2018的博客 3916

springboot-cas单点登录

/1、 maven项目转为eclipse项目 进入到项目中,通过eclipse插件转为eclipse可以识别的maven项目。 mvn eclipse:eclipse 2、 将maven项目转为idea工具能识别的项目 进入到项目中,通过idea插件转为idea可以识别的maven项目。 转换前: 转换后如下: 3、单点登录 单点登录(Single Sign On),简称为 SSO,是目前...

奋斗的小鸟专栏 1万+

CAS学习笔记一:CAS 授权服务器简易搭建

什么是CAS CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。CAS 是 耶鲁大学(Yale University)发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。 简单来说,就是开源的企业级单点登录(SSO)服务。 CAS Server 搭建思路 CAS 官方提供了一种使用 Apereo CAS WAR Overlay Template 的方式(开发

拾级而上 2256

CAS 5.3.x 单点登录

最近在网上搜索CAS 单点登录及第三方授权登录的功能,网上一搜一大堆,使用到处都是坑,那么多抄袭的,我也只能苦笑。。。 自己动手丰衣足食,所有还是把自己的正确功能记录一下,给大家做个参考 Cas server 搭建 CAS提供了模板 Overlay Template,方便使用https://github.com/apereo/cas-overlay-template,当前版本是5.3.16,JDK 1.8+ IDEA导入下载的模板,暂时不修改任何熟悉,添加Tomcat 启动Cas Se..

Coder_Knight的博客 1452

cas单点登录场景

CAS单点登录,5.1.X 一、使用场景 现实使用中,很多系统只会维护一套用户信息,所使用的登录信息验证是一致的,这时,在一般情况下若在同一个浏览器中登录这些系统则需要每个系统登录一次,这样就造成了操作的复杂化,而且不便于账号管理。而cas则很好的解决了这一点。 二、Session 和 Cookie HTTP 是无状态协议,客户端与服务端之间的每一次通讯都是独立的,而会话机制可以让服务端鉴...

u014540082的博客 982

cas、第三方接口登录

cas、第三方接口登录,cas单点登录,qq,微博第三方接口接入,快速登录

CAS5.3.x 单点登录一--集成其他OAuth,ID格式简化

cas5.3 委托认证后ID信息不正确的处理办法

gujianxin的专栏 780

RISC-V内核移植实战:从零开始手把手实现RT-Thread上下文切换(附GD32VF103代码解析)

本文详细解析了在RISC-V架构上移植RT-Thread实时操作系统的核心步骤,重点聚焦于上下文切换机制的实现。通过对比ARM Cortex-M与RISC-V在中断处理和寄存器管理上的关键差异,并以GD32VF103开发板为例,手把手指导开发者完成libcpu抽象层适配、线程栈初始化以及三种上下文切换方式的代码编写与调试,为嵌入式开发者从ARM转向RISC-V平台提供了实战指南。

fern8的博客 739

CAS授权码模式单点登录

SSO-X单点登录系统提供了一种安全可靠的多系统间CAS登录方案。该系统采用MySQL+Redis架构,包含服务端(sso-provid)和客户端(sso-x-third)两个模块。集成方只需引入starter依赖并实现SsoService接口即可快速集成,系统会自动初始化数据库表。第三方平台通过标准的OAuth2流程实现SSO登录,支持授权码获取、令牌交换和统一登出功能。项目已开源并附带使用demo,支持通过阿里云Maven仓库快速部署,可有效解决跨系统用户体系不一致的痛点问题,同时最大程度减少对现有系统

学海无涯,我用JAVA 573

关于MII、RMII、GMII、RGMII、PHY、网络变压器、RJ45的硬件总结

文章目录前言一、网络传输结构及原理1.以太网的工作原理2.TCP/IP协议3.数据链路层(MAC)二、介质独立接口MII,RMII,GMII,RGMII1.MII(Media Independent interface)2.RMII(Reduced Media Independent Interface)3.GMII(Gigabit Medium Independent)4.RGMII(Reduced Gigabit Media Independent Interface)三、物理层芯片(PHY)二、使用步

weixin_44415816的博客 3万+

用Isaac Sim复现经典案例:手把手教你写Python脚本控制机械臂抓取(附避障算法调试心得)

本文详细介绍了如何使用NVIDIA Isaac Sim仿真系统复现机械臂抓取经典案例,包括Python脚本编写、避障算法调试等关键步骤。通过URDF模型导入、关节控制逻辑实现和RMPFlow避障配置等实战演示,帮助开发者快速掌握机器人仿真技术,特别分享了官方文档未提及的实用调试技巧和性能优化策略。

weixin_30632089的博客 407

springboot + shiro + cas 实现 登录 + 授权 + sso单点登录 (三)

一、host文件 host文件配置DNS映射 127.0.0.1 sso.maple.com 二、Tomcat配置SSL 1、生成证书 keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass 123456 -validity 365 -keystore D:\beijing\develop\apache-tom...

蓝天之枫 8685

微信小程序 - 接入腾讯地图 SDK 及详细使用教程,结合小程序 mpa 地图组件展示腾讯地图(基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆地址解析 / 坐标系的转化)

微信小程序使用腾讯地图完整流程,微信小程序 接入腾讯地图,如何在微信小程序中接入腾讯地图,微信小程序引入腾讯地图API方法,腾讯地图小程序SDK,微信小程序实现使用腾讯地图SDK步骤详细介绍,微信小程序接入腾讯地图(线路规划、逆解析)、高德地图,微信小程序之使用腾讯地图,微信小程序 接入第三方地图,小程序服务器配置地图,微信小程序接入腾讯地图,微信小程序插入腾讯地图教程,微信小程序如何调用腾讯地图,如何在微信小程序中接入腾讯地图,微信小程序腾讯地图SDK使用方法,在微信小程序上创建一个简单的腾讯地图,微信小

✅ 精选推荐文章 1万+

03单点登录CAS5.3.4集成客户端

参照网址 参照网址 server代码地址 client1代码地址 client2代码地址 之前一直是server端登录验证。所谓单点登录(SSO),只当企业用户同时访问多个不同(类型的)应用时,他们只需要提供自身的用户凭证信息(比如用户名/密码)一次,当用户在不同的应用间切换时,他们不用再重复地输入自身的用户凭证了。所以此章写一下cas如何整合客户端 1.配置Host #cas服务端 127.0....

Amy的博客 1483

HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:安全测试

通过对HarmonyOS应用生命周期建模和应用攻击面建模,采用静态数据流分析技术,提高漏洞发现的准确率,同时覆盖20余种攻击面,65+漏洞测试项,帮助开发者提前发现和识别漏洞隐患。在检测报告中,会针对每一项漏洞风险项给出明确的修复建议,可以帮助开发者快速修复漏洞。

斌擎科技 1181

【即插即用模块】注意力篇 | TGRS 2025 | MFA聚特征+HPDown保细节+HFF融层级,三大模块各司其职,性能翻倍!

本文介绍了MTMLNet网络中的三大核心模块:MFA(多阶段特征聚合)、HPDown(混合池化下采样)和HFF(分层特征融合)。MFA通过双尺度深度卷积和注意力机制增强特征提取能力;HPDown结合平均池化和最大池化,有效保留下采样过程中的特征信息;HFF采用三注意力机制实现自适应特征融合。这三个模块协同工作,在红外小目标检测与分割任务中取得了SOTA效果。实验表明,各模块在特征提取、信息保留和融合方面均优于传统方法,可灵活应用于各类视觉任务中。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 285

第5章 认证授权:需求分析,Security介绍(OAuth2,JWT),用户认证,微信扫码登录,用户授权

1 模块需求分析 1.1 什么是认证授权 截至目前,项目已经完成了课程发布功能,课程发布后用户通过在线学习页面点播视频进行学习。如何去记录学生的学习过程呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什么课程,如果用户要购买课程也需要知道用户的身份信息。所以,去管理学生的学习过程最基本的要实现用户的身份认证。 认证授权模块实现平台所有用户的身份认证与用户授权功能。 什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的

aa35434的博客 3803

如何通过插值法计算cell delay?

插值法的公式:Z = A + B * X + C * Y + D * X * Y,其中X为input transition,Y为output load,A、B、C、D为四个参数,Z为delay值。从而得到Z=-0.086176 + 11.5493 * x + 0.65917 * y - 24.859 * x * y,当X=0.014930、Y=0.296311时,得到Z=0.1716ns。从而得到A = 0.08075,B = 3.47539,C = 0.04008,D = 0.01648。

芯冰乐 1076

CAS单点登录

单点登录(Single Sign On),是目前比较流行的企业业务整合的解决方案之一。sso是指在多个应用系统中,用户只需要登录一次就能访问所有相互信息的应用系统。一个组织里会有多个系统,进入每个系统都需要用户进行单独登录,这种方式对用户体验、账号管理、账号安全等方面都不具备优势。如果能用让用户只需要登录一次就能进入多个系统,这不仅仅给用户带来了更好的体验更重的是方便了各个系统之间的整合以及降低了安全风险和管理的消耗。账号管理系统结构图如下:

slightly1的博客 1379

基于YOLOv8的表面裂痕等缺陷检测:深度学习与UI界面的实践

本文详细介绍了如何使用YOLOv8进行表面裂痕等缺陷检测,并结合图形用户界面展示检测结果。通过YOLOv8的强大能力,我们可以实现高效、准确的表面缺陷检测,提升工业产品的质量控制水平。未来,随着深度学习技术和数据集的不断发展,表面缺陷检测的精度和速度将不断提升,应用领域也将进一步拓展。希望本文的实践能够为深度学习在工业检测领域的应用提供一些启示。

YOLO 550

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

cas5.2 gradle mysql_CAS 5.2.x 单点登录 - 搭建服务端和客户端

一、简介单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS 是一个开源的企业级单点登录系统,目前最新版本为 5.2.x。CAS 包含两个部分:CAS Server 和 CAS Client,它们之间独立部署。CAS 客户端拦截未认证的用户请求,并重定向至 C...

weixin_30197101的博客 337

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: CAS 5.3.x 单点登录
Coder_Knight
博客等级 码龄9年 7粉丝 5原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值