最近公司的项目需要使用单点登录,用的是耶鲁大学的CAS单点登录,爬了一堆坑,把这次爬坑的经历分享出来,希望可以帮助到广大.NET的程序员。
首先去CAS官网上去下载.net版本的客户端代码。地址:https://apereo.github.io/cas/4.2.x/integration/CAS-Clients.html
官方已经为我们写好的客户端,我们不需要做任何的更改,下载完成之后把项目引入到我们的解决方案里面
引入项目之后我们接下来的工作就是更改Web项目的Web.config文件
在configSections节点下添加
在configuration节点下添加:
notAuthorizedUrl="~/NotAuthorized.aspx" cookiesRequiredUrl="~/CookiesRequired.aspx"
redirectAfterValidation="true" gateway="false" renew="false" singleSignOut="true" ticketTimeTolerance="5000" ticketValidatorName="Cas20" proxyTicketManager="CacheProxyTicketManager"
serviceTicketManager="CacheServiceTicketManager" gatewayStatusCookieName="casGatewayStatus"
/>
注:这里面casServerLoginUrl是cas服务端的地址,默认为https由于业务需要我这是http请大家注意;casServerUrlPrefix也是填cas服务端的地址,ServerName是客户端的地址剩下的不用动。
官方网站上有非常详细的配置内容,大家可以直接上官网查看如何配置,其实就是复制粘贴而已,官网都已经给配置好了,我们只需要更改服务端和客户端的地址
在system.web节点下添加
注:loginUrl填客户端的地址。path填验证完成之后跳回的MVC路由。
在system.web节点下httpModules节点中添加
这个节点是加入客户端的HTTP管道
在system.webServer节点下添加
最后在configuration节点下添加
initializeData="C:\inetpub\logs\LogFiles\DotNetCasClient.Log"
traceOutputOptions="DateTime" />
到这里就配置完成了,当然官网其实写的很明了也很详细,大家如果看着乱可以上官网查看如何配置,在这里给大家贴出地址
https://github.com/apereo/dotnet-cas-client
配置完成之后在首页控制器的对应动作上添加[Authorize]特性
之后启动应用和CAS服务端你会发现应用会自动跳转到服务端的登录页面要求进行身份验证
至于为什么这样请参照考官网解释,毕竟官方的解释是最全面的
地址:https://wiki.jasig.org/pages/viewpage.action?pageId=32210981
应用启动后的页面
输入用户名和密码进行登录验证,这时经常会出现一个问题就是无限重定向,最后程序崩溃。
解决这个问题的方法:
在配置文件的system.web节点下添加
在客户端的代码中找到Utils文件夹下的HttpUtil类在PerformHttpGet方法中添加
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
然后在在计算器上右键:管理:服务
启动ASP.NET State Service服务,之后,无限重定向问题解决。
最后是获取用户登陆信息的问题
在控制器对应的Action 中添加以下代码
var name = System.Web.HttpContext.Current.User.Identity.Name;
name就是登陆所用的用户名,你就可以根据这个用户名去进行后续的操作了。
至此.NET集成CAS完毕,这个玩意简直遍地是雷,在学习过程中参考了以下文章,这些文章给予了我重大的提示
https://www.cnblogs.com/zhenyulu/archive/2013/01/22/2870936.html
http://www.cnblogs.com/xingshao/archive/2011/09/29/2195746.html
当然还要感谢一位在我学习过程中不断指导我的金大佬,接下来我可能会在最新版的.NET Core2.0版本中集成CAS如果集成成功我会继续把经验分享给大家,当然如果大家已经有实现了的欢迎指导我,如果大家发现文章中有错误内容请指正谢谢。