.Net 接入CAS 遇到的坑

.Net 接入CAS 遇到的坑

关于CAS是个什么东西,就不多闲扯了,相信每个有过SSO经验的都听过CAS大名,百度百科地址:

https://baike.baidu.com/item/CAS/1329561?fr=aladdin

项目所用https:/github.com/apereo/dotnet-cas-client

在.Net 中集成CAS 网上也有很多的教程,关于无限重定向的解决方案,网上也有众多解决方案,第一点就是<sessionState>节点的配置,这个简单扯一下,在.Net 中,session有四种存储方式,而sessionState节点的mode模式有4种,分别为Off、InProc、StateServer、SqlServer。 四种存储方式分别为自定义数据存储、IIS进程、状态服务器、数据库。默认情况下,session保存在IIS进程中,其默认超时时间为20分钟。

说明

Custom

会话状态将使用自定义数据存储区来存储会话状态信息。

InProc

会话处于正在处理 ASP.NET 辅助进程的状态。

Off

会话状态被禁用。

StateServer

话状态将使用进程外 ASP.NET 状态服务来存储状态信息。

SQLServer

会话状态将使用进程外 SQL Server 数据库来存储状态信息。

 

一般情况下,解决无限重定向,我们只需要配置sessionState 节点为<sessionState mode=StateServer cookieless=UseCookies timeout=1440></sessionState> timeout 即为超时时间,单位为分钟,这个根据实际情况可自由配置。

关于其他的配置就不多说了,官方文档讲述的很详细。

这次所遇到的坑 就是,在对接其他公司提供的CAS平台时,我们需要获取到平台返回的用户信息,默认情况下,能够获取到的只是当前用户名,不太容易满足我们的需求。在CAS服务端进行配置,可以获取到用户的扩展属性,比如ID、类型、邮箱、头像等等。客户所提供的文档 有Java、Python、Php的实现方案,从attributes里获取用户的基本信息,.Net平台下官方文档对此没有介绍,开始盲人摸象。看源代码,发现在 Assertion 下有Attributes属性,开始尝试使用,起初获取信息代码为:

var user = HttpContext.Current.User;

var casPrincipal = (ICasPrincipal)user;

var dict= casPrincipal.Assertion.Attributes;

但是我发现,无论怎么整,获取的attributes总为null。所以一直在想,到底是我的代码不对,还是他们给的文档不对,网上没有找到对应的解决方案,无奈只有回到百科查看cas介绍。一张图点亮了我:

.Net 接入CAS 遇到的坑

这是百科上的cas协议图,结合实际情况,项目确实成功集成了CAS,登录成功后确实跳转到了我们的客户端,思路主要在第5步上,服务端在验证service ticket以后才会返回给我们用户信息,所以就在这里跟代码,看服务端到底返回给了我们什么信息。代码在TicketValidator这一块,

.Net 接入CAS 遇到的坑

可以看到,服务端确实成功返回给了我们用户扩展属性。在这里吐槽一下某公司,给的文档完全和这信息不匹配。

既然服务端成功返回给了我们数据,为什么没有格式化拿到数据呢,接着往下走

.Net 接入CAS 遇到的坑

发现在这里少了Attributes属性,故加上Attributes属性,格式如上,

[XmlElement(“attributes”)]

public object Attributes

{

get;

set;

}

代码接着往下走,如下图所示,在所处位置加上如下代码,解析attributes构造成一个字典,并附加到Assertion的Attributes中即可。

.Net 接入CAS 遇到的坑

还是起初获取用户信息的代码,在Attributes中便可获取到服务端返回的扩展信息。

这种解决方案不会适配所有情况,但是目前解决了我的问题,各位有好的解决方案希望能够提供。

 

到此结束,主要问题就是DotNetCasClient这个库在反序列化信息的时候,丢失了attributes,我们做的就是加上了这个属性,让其成功反序列化,从而获取结果。

转载于:https://www.cnblogs.com/ZyCoder/p/10486040.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101066.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c++ 0x8000ffff灾难性故障_硬盘出了故障就换?教你一招,不花一分钱就能修复!…[通俗易懂]

    c++ 0x8000ffff灾难性故障_硬盘出了故障就换?教你一招,不花一分钱就能修复!…[通俗易懂]前言目前市面上存在较多山寨的电脑店,为了大家的电脑安全,请一定前往电脑店官方地址进行下载,官方地址为u.diannaodian.com电脑故障出现的大部分原因都是由硬盘故障引起的。随着技术的进步,现在硬盘的容量越来越大,传输速度越来越快,体积也越来越小。但硬盘发生故障的概率比较高,因此我们掌握一些常见的硬盘故障排除方法是相当重要的。1硬盘故障的产生原因1、硬盘出现坏道硬盘出现坏…

    2022年9月24日
    0
  • 线性反馈移位寄存器的实现原理_线性移位寄存器序列

    线性反馈移位寄存器的实现原理_线性移位寄存器序列1、写出n阶线性反馈移位寄存器的实现过程2、假设一个GF(2)上的5阶线性反馈移位寄存器的反馈函数为f(x1,x2,x3,x4,x5)=x1+x5初始状态为10011,试写出该线性反馈移位寄存器的输出序列程序:#include#includeusingnamespacestd;voidGF(inta,intn){intb;

    2025年5月26日
    0
  • 分布式数据存储系统:CAP理论

    分布式数据存储系统:CAP理论分布式数据存储:CAP理论前言什么是CAP?CAP选择策略及应用保CA弃P保CP弃A保AP弃C对比分析知识扩展:CAP和ACID的“C”“A”是一样的吗?总结前言分布式系统处理的关键对象是数据,而数据其实是与用户息息相关的。CAP理论指导分布式系统的设计,以保证系统的可用性、数据一致性等特征。比如电商系统中,保证用户可查询商品数据、保证不同地区访问不同服务器查询的数据是一致的等。什么是CAP?假设某电商,在北京、杭州、上海三个城市建立了仓库,同时建立了对应的服务

    2025年6月10日
    0
  • Java判断回文字符串_java将字符串反转输出

    Java判断回文字符串_java将字符串反转输出java判断回文字符串几种简单的实现:1.将字符串倒置后逐一比较,实现如下:publicclassHuiWenTest{/***@SERLIN*/publicstaticvoidmain(String[]args){Stringstr=””;System.out.println(“请输入一个字符串”);Scannerin

    2022年5月3日
    45
  • 用计算机亩换算成平方,平方米亩换算(平方米换算亩计算器)

    1平方米(㎡)=0.0015亩1亩=666.6666667平方米(㎡)平方米(㎡,英文:Squaremeter),是面积的公制单位。定义为边长为1米的正方形的面积。在生活中平方米通.使用国家规定的换算公式来进行换算。基本单位数量换算(按使用频率排序)。1亩=666.67平方米100平方米=0.15亩——就是农民朋友口语说的一分半地。1000平方米=1..1亩=60平方丈,1米=0.3…

    2022年4月9日
    1.4K
  • 用python爬虫爬取网页信息_爬虫python

    用python爬虫爬取网页信息_爬虫python【一、项目背景】[蜜柑计划-MikanProject]:新一代的动漫下载站。是一个专门为喜欢动漫的小伙伴们打造的动漫视频在线播放网站,为大家第一时间分享最新动漫资源,每日精选最优质的动漫推荐。【二、项目目标】实现获取动漫种子链接,并下载保存在文档。【三、涉及的库和网站】1、网址如下:https://mikanani.me/Home/Classic/{}2、涉及的库:reques**ts、lxml、fake_useragent**3、软件:PyCharm【四、项目分析】…

    2022年10月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号