DotNetCasClient 如何获取Cas服务器返回的attributes中的数据

最近开始接触做与其它认证系统的集成,其中有个是与某学校的CAS服务器集成。cas服务器认证成功后返回的数据格式如下:

DotNetCasClient 如何获取Cas服务器返回的attributes中的数据

其中红色部分是我需要取出来用于识别用户身份的数据。

一开始,我根据网上的教程,引用了DotNetCasClient.dll,并对web.config进行了一些配置,首先,在configuration配置节下,增加红色部分内容,主要是对cas做一些基本的配置

DotNetCasClient 如何获取Cas服务器返回的attributes中的数据

 

DotNetCasClient 如何获取Cas服务器返回的attributes中的数据

配置完成后,在登录页面,我们通过如下方式获取用户数据

DotNetCasClient 如何获取Cas服务器返回的attributes中的数据

所有工作做完以后,发现问题来了,登录以后,我方系统根本就无法获取到Assertion.Attributes里的东西,这里面总是空的。后来在网上包含baidu和google进行了查询都未能找到解决办法。无奈,可好跟踪源代码了。所以,我从 https://github.com/apereo/dotnet-cas-client 上下载了源代码,并新创建了一个新的最简单的测试站点。

经过跟踪源代码后发现,原来,我方收到的数据是正确的,但是在DotNetCasClient 进行反序列化的时候,把<cas:atrributes>及节点下的所有数据都丢失了。所以默认可能取到<cas:user>节点下的数据。

为了实现DotNetCasClient 能获取到<cas:attributes>我们必须对源代码进行改进。具体改动点如下:

DotNetCasClient 如何获取Cas服务器返回的attributes中的数据

通过这样子的改造,在应用程序中,我们的Assertion.Attributes里就有值了,然后我们就可以使用这里面的值,做一些与业务相关的操作和验证。

 

本人极少写博客,但这个问题感觉网上的答案比较少,特别是.net方面的,所以特写此记录,以期能对遇到同样问题的朋友有所帮助。