关于cas:实践篇基于CAS的单点登录实践之路

作者:京东物流 赵勇萍 前言上个月我负责的零碎SSO降级,对接京东ERP零碎,这也让我想起了之前我做过一个单点登录的我的项目。想来单点登录有很多实现计划,不过最支流的还是基于CAS的计划,所以我也就分享一下我的CAS实际之路。 什么是单点登录单点登录的英文名叫做:Single Sign On(简称SSO)。SSO的定义是在多个利用零碎中,用户只须要登录一次就能够拜访所有相互信任的利用零碎。之前我做的零碎,须要须要设计一套反对单点登录的鉴权认证零碎,所有零碎都基于一套鉴权零碎进行登录,并且能够实现各个系统之间的互信和跳转。所以就采纳了CAS架构。 什么是CASCAS架构的外围是须要搭建一个CAS Server,该服务独立部署,领有独立三级域名,次要负责对用户的认证工作。他次要组成包含WEB前端提供登录页面,票据模块,认证模块。 外围票据: a. TGT(Ticket Grangting Ticket):TGT是CAS为用户签发的登录票据,有TGT就表明用户在CAS上胜利登录过。用户在CAS认证胜利后,会生成一个TGT对象,放入本人的缓存中(Session),同时生成TGC以cookie的模式写入浏览器。当再次拜访CAS时,会先看cookie中是否存在TGC,如果存在则通过TGC获取TGT,如果获取到了TGT则代表用户之前登录过,通过TGT及拜访起源生成针对起源的ST,用户就不必再次登录,以此来实现单点登录。 b. TGC(Ticket-granting cookie):TGC就是TGT的惟一标识,以cookie的模式存在在CAS Server三级域名下,是CAS Server 用来明确用户身份的凭证。 c. ST(Service Ticket):ST是CAS为用户签发的拜访某一客户端的服务票据。用户拜访service时,service发现用户没有ST,就会重定向到 CAS Server 去获取ST。CAS Server 接管到申请后,会先看cookie中是否存在TGC,如果存在则通过TGC获取TGT,如果获取到了TGT则代表用户之前登录过,通过TGT及拜访起源生成针对起源的ST。用户凭借ST去拜访service,service拿ST 去CAS Server 上进行验证,验证通过service生成用户session,并返回资源。 基于CAS的零碎实际计划1. 业务背景在我负责的我的项目零碎中,后盾业务采纳的是微服务架构,有对立的业务网关,所以基于对立的业务网关,整合客户其余零碎登录鉴权流程。具体业务架构图如下: 在此阐明一下,因为登录零碎的用户体系在不同的零碎中,所以我在设计SSO对立登录认证的时候,把SSO零碎与业务系统结构进去。而用户体系有两套,一套叫做采方用户体系,一套叫做供方用户体系。所以才会有如图所示的SSO Server服务,他自身不负责用户治理,但会通过对立标准接口的形式实现管制反转,实现对用户服务的调用。 2. 单点登录时序图时序图如下: 如图所示,时序图标识的是两个零碎通过SSO服务,实现了单点登录。 3. 单点登录外围接口阐明3.1 sso认证跳转接口调用阐明: 由利用侧发动调用认证核心的接口。 URL地址: https:// sso.com?appId=***&tenantType=1&redirectUri=***申请形式:302重定向 参数阐明: appId: 对接SSO认证核心的利用惟一标识,由SSO认证核心通过线下的形式颁发给各个利用零碎。 tenantType: 标记是供方登录还是采方登录。采方为1,供方为2. RedirectUri: 利用回调地址。 3.2 重定向获取长期令牌code接口调用阐明: 有认证核心发动,利用侧需实现的接口。认证核心通过302重定向,将code传给利用侧,利用侧自行发动通过长期令牌code换取accessTokenInfo。 URL地址: https://利用域名?code=***申请形式:GET 参数阐明: Code: 长期令牌,无效工夫5min 3.3 获取accessTokenInfo接口调用阐明 由利用侧发动调用认证核心的接口。通过该接口能够获取accessTokenInfo信息,而后零碎自行生成本零碎session信息。 URL地址: https://sso.com/api/token/create?grantType=authorization_code&appId=yuncai&code=***申请形式:GET 参数阐明: appId: 对接SSO认证核心的利用惟一标识,由SSO认证核心通过线下的形式颁发给各个利用零碎。 code: 长期令牌,需加密 ...

April 13, 2023 · 1 min · jiezi

关于cas:MaxKey单点登录认证系统v358GA发布

English|中文 概述MaxKey单点登录认证零碎,谐音马克思的钥匙寓意是最大钥匙,是业界当先的IAM身份治理和认证产品,反对OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供平安、规范和凋谢的用户身份治理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限治理和资源管理等。 官方网站官网|官网二线 官网QQ:1054466084 邮箱email:[email protected] 代码托管Gitee|GitHub 产品个性1.标准协议 序号协定反对1.1OAuth 2.0/OpenID Connect高1.2SAML 2.0高1.3JWT高1.4CAS高1.5FormBased中1.6TokenBased(Post/Cookie)中1.7ExtendApi低1.8EXT低2.登录反对 序号登录形式2.1动静验证码 字母/数字/算术2.2双因素认证2.3短信认证 腾讯云短信/阿里云短信/网易云信2.4登录易/Google/Microsoft Authenticator/FreeOTP/反对TOTP或者HOTP2.5Kerberos/SPNEGO/AD域2.6OpenLDAP/ActiveDirectory/规范LDAP服务器2.7社交账号 微信/QQ/微博/钉钉/Google/Facebook/其余2.8扫码登录 企业微信/钉钉/飞书扫码登录3.提供规范的认证接口以便于其余利用集成SSO,平安的挪动接入,平安的API、第三方认证和互联网认证的整合。 4.提供用户生命周期治理,反对SCIM 2协定;开箱即用的连接器(Connector)实现身份供应同步。 5.简化微软Active Directory域控、规范LDAP服务器机构和账号治理,明码自助服务重置明码。 6.IDaas多租户性能,反对团体下多企业独立治理或企业下不同部门数据隔离的,升高运维老本。 7.认证核心具备平台无关性、环境多样性,反对Web、手机、挪动设施等, 如Apple iOS,Andriod等,将认证能力从B/S到挪动利用全面笼罩。 8.基于Java EE平台,微服务架构,采纳Spring、MySQL、Tomcat、Redis、MQ等开源技术,扩展性强。 9.开源、平安、自主可控,许可证 Apache 2.0 License &MaxKey版权申明。 界面 下载以后版本百度网盘下载,历史版本 版本日期Docker网盘网盘提取码v 3.5.82022/10/10链接下载mxk9版本阐明MaxKey v 3.5.8 GA 2022/10/10 *(MAXKEY-221301) 新版LOGO更新 *(MAXKEY-221302) 角色属性dynamic - >category *(MAXKEY-221303) 角色列表减少"成员"和"拜访权限"按钮,不便管理员操作 *(MAXKEY-221304) 新增组织类型type=department,sortIndex=11 *(MAXKEY-221305) 组织列表编码和名称左对齐 *(MAXKEY-221306) 社交服务优化,socialsProvider 状态 hidden-->display, scanCode *(MAXKEY-221307) 提交登记地址回调内部URL地址 *(MAXKEY-221308) LDAP配置的测试性能 *(MAXKEY-221309) ActiveDirectory组织同步默认类型department,fullName=orgName *(MAXKEY-221310) LDAP组织同步默认类型department,fullName=orgName *(MAXKEY-221311) 拜访权限治理appName显示问题 *(MAXKEY-221312) 修复MFA的MfaAuthenticationProvider的getProviderName的BUG *(MAXKEY-221313) Cannot call sendRedirect() after the response has been committed 无权限拜访利用 *(MAXKEY-221314) 资源权限治理中的角色列表调整到右边,资源树列表调整到左边 *(MAXKEY-221315) 优化docker-compose部署计划,反对最新版v3.5.7疾速启动部署 @xiaojian *(MAXKEY-221316) 优化v3.3docker-compose部署计划,启动时不从新打包镜像,mysql服务名取代localhost @xiaojian *(MAXKEY-221317) 依赖项援用、更新和降级 springBoot 2.7.4 kafkaclients 2.8.9 hibernate 6.2.5.Final jackson 2.13.4 commonsbeanutils 1.9.4 commonsdbcp2 2.9.0 commonscompress 1.21 postgresql 42.4.1 minidevjsonsmart 2.4.5 snakeyaml 1.32 xmlsec 2.1.7 xstream 1.4.19

October 13, 2022 · 1 min · jiezi

关于cas:使用CAS技术实现无锁并发保证线程安全之单例模式应用

CAS是项乐观锁技术,当多个线程尝试应用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并能够再次尝试。实现单例的形式如下: import java.util.concurrent.atomic.AtomicReference;/** * 应用CAS保障线程平安 * @author shixiangcheng * 2019-12-20 */public class Singleton { private static final AtomicReference<Singleton> INSTANCE=new AtomicReference<Singleton>(); private Singleton(){} public static Singleton getInstance(){ for(;;){ Singleton singleton=INSTANCE.get(); if(singleton!=null){ return singleton; } singleton=new Singleton(); if(INSTANCE.compareAndSet(null, singleton)){ return singleton; } } }}用CAS的益处在于不须要应用传统的锁机制来保障线程平安,CAS是一种基于忙期待的算法,依赖底层硬件的实现,绝对于锁它没有线程切换和阻塞的额定耗费,能够反对较大的并行度。CAS的一个重要毛病在于如果忙期待始终执行不胜利(始终在死循环中),会对CPU造成较大的执行开销。另外,如果N个线程同时执行到singleton = new Singleton();的时候,会有大量对象创立,很可能导致内存溢出。

May 6, 2022 · 1 min · jiezi

关于cas:docker部署cas

一、首先装置cas镜像1.拉取casdocker镜像 docker pull apereo/cas2.启动容器: docker run--name cas -p 8443:8443 -p 8442:8080apereo/cas /bin/sh /cas-overlay/bin/run-cas.sh期待一会之后,启动失败了,报错是没有证书,局部谬误如下: Caused by: java.lang.IllegalArgumentException: /etc/cas/thekeystore (No such file or directory)at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:99)at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71)at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:216)at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1159)at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1245)at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:603)at org.apache.catalina.connector.Connector.startInternal(Connector.java:1064)... 27 moreCaused by: java.io.FileNotFoundException: /etc/cas/thekeystore (No such file or directory)at java.base/java.io.FileInputStream.open0(Native Method)at java.base/java.io.FileInputStream.open(Unknown Source)二、制作证书 keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000输出密钥库口令:再次输出新口令:您的名字与姓氏是什么[Unknown]:sso.castest.com您的组织单位名称是什么[Unknown]:sso您的组织名称是什么[Unknown]:cas您所在的城市或区域名称是什么[Unknown]:beijing您所在的省/市/自治区名称是什么[Unknown]:beijing该单位的双字母国家/地区代码是什么[Unknown]:CNCN=sso.castest.com, OU=sso, O=cas, L=beijing, ST=beijing, C=CN是否正确[否]:y正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):CN=sso.castest.com, OU=sso, O=cas, L=beijing, ST=beijing, C=CN[正在存储debug.keystore]其中密钥库命令输出的是changeit ...

July 26, 2021 · 1 min · jiezi

关于单点登录:MaxKey单点登录认证系统-v270GA-发布

English | 中文 概述MaxKey单点登录认证零碎(Single Sign On System),中文谐音马克思的钥匙寓意是最大钥匙,是业界当先的企业级开源IAM身份治理和身份认证产品,国内开源IAM第一品牌;反对OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供简略、规范、平安和凋谢的用户身份治理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限治理和资源管理等。 官方网站 官网 | 官网二线 QQ交换群:434469201 邮箱email: maxkeysupport@163.com 代码托管 GitHub | 码云(Gitee) 什么是单点登录(Single Sign On),简称为SSO? 用户只须要登录认证核心一次就能够拜访所有相互信任的利用零碎,无需再次登录。 次要性能: 1) 所有利用零碎共享一个身份认证零碎 2) 所有利用零碎可能辨认和提取ticket信息 产品个性规范认证协定:序号协定反对1.1OAuth 2.0/OpenID Connect高1.2SAML 2.0高1.3JWT高1.4CAS高1.5FormBased中1.6TokenBased(Post/Cookie)中1.7ExtendApi低1.8EXT低登录反对序号登录形式2.1动静验证码 字母/数字/算术2.2双因素认证2.3短信认证 腾讯云短信/阿里云短信/网易云信2.4登录易/Google/Microsoft Authenticator/FreeOTP/反对TOTP或者HOTP2.5Kerberos/SPNEGO/AD域2.6OpenLDAP/ActiveDirectory/规范LDAP服务器2.7社交账号 微信/QQ/微博/钉钉/Google/Facebook/其余提供规范的认证接口以便于其余利用集成SSO,平安的挪动接入,平安的API、第三方认证和互联网认证的整合。提供用户生命周期治理,反对SCIM 2协定,基于Apache Kafka代理,通过连接器(Connector)实现身份供应同步。认证核心具备平台无关性、环境多样性,反对Web、手机、挪动设施等, 如Apple iOS,Andriod等,将认证能力从B/S到挪动利用全面笼罩。多种认证机制并存,各利用零碎可保留原有认证机制,同时集成认证核心的认证;利用具备高度独立性,不依赖认证核心,又可用应用认证核心的认证,实现单点登录。基于Java平台开发,采纳Spring、MySQL、Tomcat、Apache Kafka、Redis等开源技术,反对微服务,扩展性强。开源、平安、自主可控,许可证 Apache 2.0 License & MaxKey版权申明。界面MaxKey认证 登录界面   主界面   MaxKey治理 拜访报表   用户治理   利用治理   下载以后版本百度网盘下载, 历史版本 版本日期下载地址提取码v 2.7.0 GA2021/04/15链接下载hf73Roadmap1.MaxKey Cloud(微服务版)-2021年 2.零信赖场景整合 版本阐明MaxKey v 2.7.0 GA 2021/04/15 ...

April 15, 2021 · 1 min · jiezi

关于golang:Go同步原语的基石

Go是一门以并发编程见长的语言,它提供了一系列的同步原语不便开发者应用,例如sync包下的Mutex、RWMutex、WaitGroup、Once、Cond,以及形象层级更高的Channel。然而,它们的实现基石是原子操作。须要记住的是:软件原子操作离不开硬件指令的反对。本文拟通过探讨原子操作——比拟并替换(compare and swap, CAS)的实现,来了解Go是如何借助硬件指令来实现这一过程的。 什么是CAS在看源码实现之前,咱们先了解一下CAS。 维基百科定义:CAS是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而防止多线程同时改写某一数据时因为执行程序不确定性以及中断的不可预知性产生的数据不统一问题。 该操作通过将内存中的值与指定数据进行比拟,当数值一样时将内存中的数据替换为新的值。 CAS的实现思维能够用以下伪代码示意 bool Cas(int *val, int old, int new) Atomically: if(*val == old){ *val = new; return 1; } else { return 0; }在sync/atomic/doc.go中,定义了一系列原子操作函数原型。以CompareAndSwapInt32为例,有以下代码 package mainimport ( "fmt" "sync/atomic")func main() { a := int32(10) ok := atomic.CompareAndSwapInt32(&a, 10, 100) fmt.Println(a, ok) ok = atomic.CompareAndSwapInt32(&a, 10, 50) fmt.Println(a, ok)}它的执行后果如下 $ go run main.go100 true100 falseCAS能做什么CAS从线程层面来说,它是非阻塞的,其乐观地认为在数据更新期间没有其余线程影响,因而也经常被称为是一种轻量级的乐观锁。它关注的是并发平安,而并非并发同步。 在文章结尾时,咱们就曾经提到原子操作是实现下层同步原语的基石。以互斥锁为例,为了不便了解,咱们在这里将它的状态定义为0和1,0代表目前该锁闲暇,1代表已被加锁。那么,这个时候,CAS就是治理状态的最佳抉择,以下是sync.Mutex中Lock办法的局部实现代码。 func (m *Mutex) Lock() { // Fast path: grab unlocked mutex. if atomic.CompareAndSwapInt32(&m.state, 0, mutexLocked) { if race.Enabled { race.Acquire(unsafe.Pointer(m)) } return } // Slow path (outlined so that the fast path can be inlined) m.lockSlow()}在atomic.CompareAndSwapInt32(&m.state, 0, mutexLocked)中,m.state代表锁的状态,通过CAS函数,判断锁此时的状态是否闲暇(m.state==0),是,则对其加锁(这里mutexLocked的值为1)。 ...

April 7, 2021 · 2 min · jiezi

关于cas:MaxKey单点登录认证系统-v260GA-发布

English | 中文 概述MaxKey单点登录认证零碎(Single Sign On System),中文谐音马克思的钥匙寓意是最大钥匙,是业界当先的企业级开源IAM身份治理和身份认证产品,国内开源IAM第一品牌;反对OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供简略、规范、平安和凋谢的用户身份治理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限治理和资源管理等。 官方网站 官网 | 官网二线 QQ交换群:434469201 邮箱email: maxkeysupport@163.com 代码托管 GitHub | 码云(Gitee) 什么是单点登录(Single Sign On),简称为SSO? 用户只须要登录认证核心一次就能够拜访所有相互信任的利用零碎,无需再次登录。 次要性能: 1) 所有利用零碎共享一个身份认证零碎 2) 所有利用零碎可能辨认和提取ticket信息 产品个性规范认证协定:序号协定反对1.1OAuth 2.0/OpenID Connect高1.2SAML 2.0高1.3JWT高1.4CAS高1.5FormBased中1.6TokenBased(Post/Cookie)中1.7ExtendApi低1.8EXT低登录反对序号登录形式2.1动静验证码 字母/数字/算术2.2双因素认证2.3短信认证 腾讯云短信/阿里云短信/网易云信2.4登录易/Google/Microsoft Authenticator/FreeOTP/反对TOTP或者HOTP2.5Kerberos/SPNEGO/AD域2.6社交账号 微信/QQ/微博/钉钉/Google/Facebook/其余提供规范的认证接口以便于其余利用集成SSO,平安的挪动接入,平安的API、第三方认证和互联网认证的整合。提供用户生命周期治理,反对SCIM 2协定,基于Apache Kafka代理,通过连接器(Connector)实现身份供应同步。认证核心具备平台无关性、环境多样性,反对Web、手机、挪动设施等, 如Apple iOS,Andriod等,将认证能力从B/S到挪动利用全面笼罩。多种认证机制并存,各利用零碎可保留原有认证机制,同时集成认证核心的认证;利用具备高度独立性,不依赖认证核心,又可用应用认证核心的认证,实现单点登录。基于Java平台开发,采纳Spring、MySQL、Tomcat、Apache Kafka、Redis等开源技术,反对微服务,扩展性强。开源、平安、自主可控,许可证 Apache 2.0 License & MaxKey版权申明。界面MaxKey认证 登录界面   主界面   MaxKey治理 拜访报表   用户治理   利用治理   下载以后版本百度网盘下载, 历史版本 版本日期下载地址提取码v 2.6.0 GA2021/03/05链接下载0x24Roadmap1.MaxKey Cloud(微服务版)-2021年 2.零信赖场景整合 版本阐明MaxKey v 2.6.0 GA 2021/03/05 ...

March 4, 2021 · 1 min · jiezi

关于cas:SSO单点登录

单点登录(Single Sign On)是指一次登录即可拜访相干的零碎网站。而实现的技术计划有很多种,针对不同场景需要计划也不一样。 场景1、只有一个域名只有一个零碎平台一个域名,如: example.com  登录流程: 登录生成Session,将SessionId设置到以后域名的cookie中毛病: 只限于单个零碎平台2、二级域名雷同多个零碎平台,然而二级域名雷同,如: xxx.example.com 、 yyy.example.com ,二级域名都是 example.com  登录流程: 登录生成Session,将SessionId设置到二级域名的cookie中同一个二级域名下的零碎,只有登录一次其余零碎即可免登毛病: 如果公司的二级域名比拟多,不同二级域之间无奈免登3、二级域名不同多零碎平台二级域名也不同,如: xxx.example.com 、 xxx.test.com 、 demo.com ,二级域名都不同,跨域无奈读取cookie。实现计划有很多种,咱们看下cas实现,这里就须要一个sso认证核心服务来实现单点登录。 登录流程: xxx.example.com 未登录跳转到sso服务的对立登录页 www.sso.com/login ,输出账号密码创立全局会话,设置tgc到cookie,并将生成tgt参数增加 xxx.example.com URL上跳回xxx.example.com 服务拿tgt参数去获取st,做这一步次要为了平安,而后用st去获取用户信息,st是一次性的,应用后生效,校验通过后设置Session,并设置SeesionId到cookiexxx.test.com 校验没有cookie跳到sso服务,sso服务发现用户曾经登录,生成tgt参数增加到 xxx.test.com 回跳登出流程: 登记以后服务session,革除cookie,并重定向sso服务登出页面sso服务登记全局会话,告诉其余服务销毁session登录页面不对立问:如果登录页面各个系统想不一样,二级域名也应用各个系统本人的,怎么办?答:能够每个零碎服务调用sso认证核心登录,登录后带着tgt参数重定向到不同二级域名去写入cookie,登出也须要重定向这些域名。然而如果二级域名很多体验就很差了。

January 25, 2021 · 1 min · jiezi

关于cas:Cas单点登录剖析

CAS简介CAS(Central Authentication Service) 是 Yale 大学发动的构建 Web SSO 的 开源我的项目SSO 是什么?SSO-Single Sign On就是 单点登录 也就是 多个网站程序 对立到一个网址进行登录身份验证次要特点是:SSO 利用之间应用 Web 协定 (如HTTPS) ,并且只有一个登录入口。咱们所讲的SSO,指 Web SSO 。SSO 的体系中,有上面三种角色:User(多个)Web利用(多个)SSO认证核心(一个)所有的登录都在 SSO 认证核心进行。SSO 认证核心通过一些办法来通知 Web 利用以后拜访用户到底是不是通过认证的用户。SSO 认证核心和所有的 Web 利用建设一种信赖关系。就是能达到 很多不同服务器的或者雷同服务器的网站 对立到某个中央登录 如果你是应用同一个浏览器登录的 那么 在这个浏览器再关上其余的网站 这个网站 就不必再登录了 CAS 的构造体系CAS ServerCAS Server 负责实现对用户信息的认证,须要独自部署,CAS Server 会解决用户名 / 明码等凭证 (Credentials) 。就是 装置在服务器端的一个web程序 目前有耶鲁大学的 也有其它机构开发的,它是复制认证的服务器CAS ClientCAS Client部署在应用程序中,当有对本地 Web 利用受爱护资源的拜访申请,并且须要对申请方进行身份认证,重定向到 CAS Server 进行认证。 术语解释TGT:用来存储登入用户身份的的重要票据,一旦用户胜利登入到CAS服务器后,CAS服务器就会生成一个TGT,并存储在CAS服务器端。最为重要的是确保TGT是全局惟一的TGC:是一个存储TGT的Cookie。当登入到CAS服务器后,CAS会在浏览器中存储它,这样下次登入时传回CAS服务器进行登入验证,只有借助Https传输通道,TGC才会被传回CAS服务器术语解释SSO-Single Sign On,单点登录TGT-Ticket Granting Ticket,用户身份认证凭证票据ST-Service Ticket,服务许可凭证票据TGC-Ticket Granting Cookie,寄存用户身份认证凭证票据的cookie ...

January 18, 2021 · 1 min · jiezi

关于cas:CAS单点登录浅析一实现思路

CAS是Central Authentiction Service 的缩写,地方认证服务,一种独立凋谢指令协定.CAS是Yale大学发动的开源我的项目.旨在为Web利用零碎提供一种牢靠的单点登录办法,CAS在2004年12月正式称为JA-SIG的一个我的项目. 特点: 1.开源的企业级单点登录解决方案. 2.CAS Service为须要独立部署的Web利用. 3.CAS Client 反对十分多的客户端(这里指单点登录零碎中的各个Web利用),包含Java .NET PHP等 首次登录验证,其原理如下图所示: 1、第一次跳转:客户端拜访利用零碎,利用零碎判断Session发现为定路,返回302跳转到sso登录页面,并传递service参数给sso,该service参数有两个作用:2、service个别传递利用零碎url地址,用于sso认证通过后回跳到利用零碎;3、service参数同时会被cas服务端的作为cas客户端的惟一标记记录下来,用于前期匹配相应的认证凭据;4、第二次跳转:浏览器显示登录页面,用户输出账号密码登录胜利后,sso会返回302跳转回到原来申请的利用零碎页面,并携带ticket参数,作为认证票据,同时通过Set-Cookie向浏览器记录TGT,(TGT的作用将在下一个利用零碎须要登录的时候体现进去,是防止反复登录的要害)5、一次后盾验证:利用零碎接管到带有ticket的申请后,向从后盾间接向sso服务器发动一个http申请,将service和ticket作为参数,用于验证ticket的有效性;如果ticket无效,sso服务器将返回该ticket对应的登录用户名。 已实现登录验证切换到其余零碎时,其原理如下图所示:1、当用户曾经登录过一个利用零碎当前,在同一个浏览器上拜访第二个利用零碎,依据单点登录的要求此时不应该再登录,而是间接进入第二个零碎。然而实际上还是须要通过两次前端跳转、一次后端验证,只不过此时的两次跳转是间断的,两头不会再呈现登陆页面,用户感触不到。判断的根据就是后面第4步通过Set-Cookie保留到客户端的TGT(Ticket Granted Cookie )。2、相比首次拜访,少了之前的第3步(不须要再呈现登录页面),因为此时在第二步跳转时,携带了之前保留的TGT,cas服务端通过TGT能够得悉用户信息,因而间接生成ticket返回给利用零碎。所以此时是两次间断的302跳转,用户看到的成果就是间接进入第二个利用零碎了。 CAS源码解析-cas相干的jar包CAS源码-cas配置文件1、spring-configuration是spring相干的外围配置,蕴含读取配置文件办法、springbean注册配置、ticket票据配置、Cookie配置等。2、view 页面目录:蕴含jsp、js、css等。3、cas.properties文件:cas服务的配置文件,能够寄存数据库配置、redis配置等。4、deployerConfigContext.xml:用于连贯数据库的配置。1、零碎接管到申请首先通过web.xml,通过web.xml中SafeDispatcherServlet进行映射找到cas-servlet.xml.2、cas-servlet.xml中次要蕴含了两种管制层映射形式。handlerMappingC和FlowHandlerMaping。依据两种不同的映射形式找到对应的服务。3、以退出登陆为例/logout,通过springbean关系能够找到退出的登陆页面。退出胜利后进入/login登陆页面。4、/login 采纳了FlowHandlerMaping形式,通过login-webflow.xml文件能够看到cas登陆的整个过程。on-start(start-state)流程开始,end-state流程完结 decision-state判断,相似于if,view-state对应jsp页面 action-state对应执行程序的某段。

December 24, 2020 · 1 min · jiezi

关于cas:Java中CAS原理分析volatile和synchronized浅析

CAS是什么?CAS英文解释是比拟和替换,是cpu底层的源语,是解决共享变量原子性实现计划,它定义了三个变量,内存地址值对应V,期待值E和要批改的值U,如下图所示,这些变量都是在高速缓存中的,如果两个线程A,B别离通过cas形式同时批改共享变量,假如当A线程先获取工夫片,如果发现V的值和E相等就将主内存值更新为U,如果不相等阐明线程B在线程A更新之前曾经胜利更新过,线程A会失败重试,此时依据缓存一致性协定,线程A的本地正本会生效,须要从主内存再同步最新的变量到本地内存正本,在Java中通过调用UnSafe的compareAndSet相似形式调用,底层是c,反编译后操作系统指令是cmpxchg指令。 保障i++原子性你肯定会有一个疑难,被volatile润饰的变量i,i++为什么会有线程平安问题呢,也就是原子性的问题,咱们还是举一个经典的i++案例一步步剖析吧!咱们晓得在多线程状况下volatile保障了共享变量的可见性,程序行,但唯独不能保障原子性,起因是i++是一个复合操作,大抵能够分成3步,1.先从主内存拿到最新的i值,2.将i加1这个操作保留到操作数栈,3.从栈中取出i加1的值写回到主内存。OK,当线程AB同时执行i++操作时,比方线程A先获取工夫片,执行完第2步,这是线程A还未执行完,工夫片调配给线程B,B顺利执行完所有操作后并同步了主内存,假如咱们i的初始值是1,那么此时主内存值是2,因为线程B执行结束,cpu工夫片又回到线程A手上,做第3步操作,此时同步到主内存的值还是2,看,线程A,B各做了一次加1的操作,但最终后果可能是2,cas的作用就来了,他能保障i++操作的原子性,为什么能保障原子性呢?cas能够把下面三个操作合并成一个操作,是原子的。 有什么益处?大家都晓得解决多线程平安须要用到锁的,能够用synchronized来解决,然而synchronized也有它的劣势,最次要是它是阻塞的,阻塞会有什么问题?性能啊,这是计算机人不能忍的,频繁内核外核切换,会重大节约系统资源,所以就提了cas这个乐观锁概念,它是非阻塞的,操作系统不必在内核态与用户态来回切换,相当于用while循环形式获取锁,在性能上有肯定晋升。即便这样,也会有肯定问题,上面咱们来看看。 有什么问题?1.ABA问题。 这个案例比较简单,线程A把共享变量i,从1变成2,再变成1,线程B想把i变成2,原本应该是不会胜利,因为即时变量i当初是1,然而它的状态变动了,他的解决方案是版本号。相当于批改胜利一次版本号减少1,就能够解决了,已经被面试官问到一个问题,cas是线程平安的吗?答案不是线程平安的。 2.自旋工夫过长。 如果一个线程拿到锁后,始终不开释,其余线程就只能始终循环期待。 3.只能保障一个共享变量的原子性。 像Automic包上面的基本上都只能保障一个变量的原子性。 JUC包上面应用!可能有些童鞋看JDK源码会比拟纠结一个点,发现volatile关键字个别都会和cas连用,如果不要volatile会怎么样呢?cas自身只作用于办法,cas对共享变量没有束缚,如果不对共享变量做volatile润饰,是不可见的,不可能保障共享变量的实效性,须要期待共享变量被动同步到主内存,这是须要花工夫的,效率更低下,所有在JUC并发包里始终能够看到这样的volatile关键字个别都会和cas组合。 总结这篇文章,咱们先引出了cas概念,并且阐明了它的优缺点,做了案例介绍,简略的和synchronized关键字做了比拟,最初,深刻的阐明了volatile关键字和cas连用的效率,这是我在深刻思考后失去的论断,分享给大家,文章有肯定浏览门槛,如果有想搞清楚童鞋,能够1v1私聊探讨交换。心愿大家喜爱。点赞哦! 我是叫练,边叫边练,欢送点赞和评论。

December 14, 2020 · 1 min · jiezi

关于cas:单点登录认证系统-MaxKey-v-210GA发布

MaxKey(马克思的钥匙)单点登录认证零碎(Sigle Sign On System),寓意是最大钥匙,是业界当先的企业级IAM身份治理和身份认证产品,反对OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供简略、规范、平安和凋谢的用户身份治理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限治理和资源管理等。 官方网站 官方网站 | 官方网站二线 代码托管 GitHub | 码云(Gitee) 什么是单点登录(Single Sign On),简称为SSO? 用户只须要登录认证核心一次就能够拜访所有相互信任的利用零碎,无需再次登录。 次要性能: 1.所有利用零碎共享一个身份认证零碎 2.所有利用零碎可能辨认和提取ticket信息 规范认证协定:序号协定反对1OAuth 2.0/OpenID Connect高2SAML 2.0高3JWT高4CAS高5FormBased中6TokenBased(Post/Cookie)中7ExtendApi低8EXT低登录反对序号登录形式1动静验证码 字母/数字/算术2双因素认证3短信认证 腾讯云短信/阿里云短信/网易云信4Google/Microsoft Authenticator/FreeOTP/反对TOTP或者HOTP5Kerberos/SPNEGO/AD域6社交账号 微信/QQ/微博/钉钉/Google/Facebook/其余提供规范的认证接口以便于其余利用集成SSO,平安的挪动接入,平安的API、第三方认证和互联网认证的整合。提供用户生命周期治理,反对SCIM 2协定,基于Apache Kafka代理,通过连接器(Connector)实现身份供应同步。认证核心具备平台无关性、环境多样性,反对Web、手机、挪动设施等, 如Apple iOS,Andriod等,将认证能力从B/S到挪动利用全面笼罩。多种认证机制并存,各利用零碎可保留原有认证机制,同时集成认证核心的认证;利用具备高度独立性,不依赖认证核心,又可用应用认证核心的认证,实现单点登录。基于Java平台开发,采纳Spring、MySQL、Tomcat、Apache Kafka、Redis等开源技术,反对微服务,扩展性强。许可证 Apache License, Version 2.0,开源收费。*界面MaxKey认证 登录界面   主界面   MaxKey治理 拜访报表   用户治理   利用治理   下载以后版本百度网盘下载, 历史版本 版本日期下载地址提取码v 2.1.0 GA2020/08/01链接下载9umvRoadmapSCIM 2 Support-System for Cross-domain Identity Management 动静用户组实现(基于用户属性或机构) 版本阐明MaxKey v 2.1.0 GA 2020/08/01 (MAXKEY-200701) 官方网站降级,清晰简洁的界面,全新的页面导航   (MAXKEY-200702) Mysql降级到8.0.21GA ...

August 6, 2020 · 1 min · jiezi