关于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介绍。一张图点亮了我:

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

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

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

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

[XmlElement("attributes")]

public object Attributes

{

get;

set;

}

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

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

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

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

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

.Net 接入CAS 遇到的坑相关推荐

  1. 单点登录cas常见问题(九) - android app怎么接入cas单点登录系统?

    cas-server-support-rest子项目有什么用:如果一个android app要接入cas中心系统,就需要用到这个子项目. 引入的前提条件是, cas项目已经启用了,通常不会启用一部分项 ...

  2. 京东api接入的几个坑(宙斯) 转载

    ===== [ 京东api接入的几个坑(宙斯) 原创 2014年10月30日 17:43:51 8719 写这篇文章为了发下牢骚,鄙视下京东api上的不足, 怀念下下午的2个小时..... http: ...

  3. javaweb项目接入CAS单点认证(含自身系统的三员过滤)

    一.搭建cas server 1.下载war包 2.打开cmd窗口执行以下命令,命令如下(指定ip): keytool -genkey -v -alias casbm -keyalg RSA -key ...

  4. spring mvc 接入cas登录

    费劲千辛万苦开发出来的系统要接入sso 让我头大还好有大佬帮忙 首先在配置文件中写入启动的ip地址 HOST=http://127.0.0.1:8080/ 地址写你的地址和端口 然后在pom文件中导入 ...

  5. springboot接入cas单点登录后跳转不到我需要跳转到页面_单点认证的一点心得

    最近项目要接入一批项目,接入必然涉及单点认证,在对接的单点认证主要分为几类,oauth .cas.还有一些其他的. 其实主要分为2类: 一类对方提供登录接口,我们做登录页面,用户输入用户名和密码,我们 ...

  6. 前端DEF部署和BUC接入的“跨域”坑

    背景 第一次尝试react框架,在本地调试前端npm start,调用后端接口采用设置host 127.0.0.1 local-fishci2.alibaba.net,前端代码配置如下可完美解决本地跨 ...

  7. iOS 平台 接入新浪微博 SDK 的坑(registerApp 的问题)

    转载:http://leenjewel.github.io/blog/2015/01/08/ios-ping-tai-cocos2d-x-xiang-mu-jie-ru-xin-lang-wei-bo ...

  8. SpringBoot 集成cas5.3 实现客户端接入cas认证中心

    前面我们讲解了很多关于cas认证中心的内容,今天我们说一说如何接入客户端 创建一个springboot项目,添加依赖包 <dependency><groupId>net.uni ...

  9. TBS腾讯浏览服务接入以及遇到的坑

    序言 腾讯浏览服务功能强大,稳定,集成还算是比较简单的,比原生的webview强.最主要的是可以浏览PDF,Word文档,方便不少.此篇文章主要不是在讲集成,虽然集成的篇幅多些,但是我写的最重要的目的 ...

  10. 手游接入Facebook的那些坑

     原文出处:http://blog.csdn.net/piao_polar/article/details/46742043 之前工作需要在手游中接入了facebook,并以此写了<手游接入 ...

最新文章

  1. 双方互GAN,不如来试试群体博弈?更快更强更自由 | ICLR 2021
  2. JDK13的新特性:AppCDS详解
  3. Android学习笔记:TabHost 和 FragmentTabHost
  4. php怎么获取用户所在地址,php获取客户端ip及获取ip所在地址
  5. mysql约束条件整型_MySQL 表的操作
  6. URL Scheme-短信、邮件、微信外网页等场景打开小程序
  7. U盘中的SanDiskSecureAccess可以删除么?删除后影响U盘的使用么?
  8. 两个很棒的爬虫智能解析库,通配大部分网页!
  9. 北方经贸杂志北方经贸杂志社北方经贸编辑部2022年第10期目录
  10. java 日程日历_java编程:我要做一个提醒日程的软件,不是要用到日历和时钟么,这要不要自己编,还是可以直接同步电脑上...
  11. 用python打开文件然后写个欢迎代码
  12. 快速打开 控制面板下网络和 Internet下的网络连接
  13. 华为无线网代理服务器端口是什么意思,华为ES1D2G48SFA0 48端口十兆/百兆/千兆以太网电接口板(FA,RJ45) (适用于华为S7700系列交换机)...
  14. python自动化ppt_python自动化办公手册之python操作PPT
  15. 【05】数据可视化:02-ECharts数据可视化案例_立可得智能看板
  16. 安卓快速入门系列1(通过插件使用java8的语法)
  17. 特斯拉充电电流设置多大_【干货】特斯拉电动汽车4种充电方式详解!
  18. 魔兽怀旧服一个服务器最多人数,魔兽怀旧服:比灰烬排队人数还多的服务器,仅此一个,过于平衡!...
  19. 详解IP分片与TCP分段的区别
  20. 使用sql语句在emp员工表中实现各种操作

热门文章

  1. 子DIV块中设置margin-top时影响父DIV块位置的解决办法
  2. vs2008 jQuery 智能提示失败可能是Jquery版本问题
  3. xshell远程控制(连接)两个VMware同时启动的Linux操作系统
  4. Unity中制作小地图
  5. springmvc一个Controller类处理多个请求被遗弃的方式MultiActionController详解和新的方式
  6. 【渝粤教育】电大中专建筑力学_1作业 题库
  7. 【钢铁缺陷检测算法】数据探索
  8. 高精度运算一(两个数的运算)
  9. Soft Value function基础和Soft Q Learning中Policy Improvement 证明
  10. MATLAB (2014b) “doc” cannot load libxul.so from Java on Linux system解决办法