.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)
上一篇 2021年7月2日 上午8:00
下一篇 2021年7月2日 上午9:00


相关推荐

  • java 调用scp命令,scp命令的使用

    java 调用scp命令,scp命令的使用scp 命令 scp 命令用于在 Linux 下进行远程拷贝文件的命令 和它类似的命令有 cp 不过 cp 只是在本机进行拷贝不能跨服务器 而且 scp 传输是加密的 可能会稍微影响一下速度 当你服务器硬盘变为只读 readonlysyst 时 用 scp 可以帮你把文件移出来 另外 scp 还非常不占资源 不会提高多少系统负荷 在这一点上 rsync 就远远不及它了 虽然 rsync 比 scp 会快一点 但当小文件众多的情

    2026年3月16日
    2
  • Typora——MarkDown学习笔记

    Typora——MarkDown学习笔记一级标题:# 文字二级标题:## 文字三级标题:### 文字字体粗体:文字两边加**斜体:文字两边加*斜体并加粗:文字两边加***删除文字:两边加~~引用:>+空格分割线:— 或者***图片:![截图](图片路径)超链接:点击跳转排序:排序号:1. 2. 3.无序:·回车表格名字性别生日张三男19990513代码:skdsldl…

    2022年8月8日
    9
  • stm32的unique ID全球唯一码[通俗易懂]

    stm32的unique ID全球唯一码[通俗易懂]我经常把STM32的全球唯一码作为网卡的MAC地址,但有一天我发现我发现,我的2个板子的MAC地址一样,造成只能有一个ping通。我查看这2个板子的单片机的UNIQUEID,发现非常接近。uniqueid只有前4个字节不一样,而我用的MAC地址是uniqueid的后6个字节,这就造成生成的MAC地址一模一样,可能是这2个片子是同一批买的,同一批生产的,ID号…

    2025年7月2日
    4
  • 敏捷软件开发中的配置管理

    敏捷软件开发中的配置管理敏捷软件开发方法目的是适应需求的快速响应 能够快速的发布和快速的交付使用 在敏捷中的如何实现配置管理 如何通过配置管理来管理敏捷开发过程中的需求 代码 版本等 这是应该是一个专向的课题 敏捷中的配置管理有如下几个方面需要考虑 1 适应敏捷需求的变化 快速的纳入需求版本管理 2 适应频繁的代码构造和频繁的发布 3 能够提供准确的发布版本的内容 4 如何和持续集成结合 做好持续集成的最后的结果输出 提高持续的交付能力

    2025年8月29日
    4
  • 花了两天时间用html+css+js做了一个网页版坦克大战游戏

    花了两天时间用html+css+js做了一个网页版坦克大战游戏纯前端实现坦克大战游戏

    2026年3月18日
    2
  • c语言删除数组中重复元素

    c语言删除数组中重复元素原题:把一个数组中的重复元素去掉。如a[12]={1,1,2,7,3,2,3,4,5,8,7,4},输出为:1,2,7,3,4,5,8在csdn上查了一下,发现给出的方法都很复杂,对新手很不友好,于是写了一个比较简单的,源码如下:#include<stdio.h>#defineN12intmain(){inti,j,n=N,k;intnum[N]…

    2022年7月11日
    26

发表回复

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

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