目录

-----------------------------------------

-----------------------------------------

首先 我们来了解 一下 微软提供的 票据认证

首先 我们创建 一个 webform项目

然后 创建 一个admin的目录 里面有一个 admin.aspx的页面 这个页面 必须登录了 才能访问

那么 我们首先 要配置 Form票据

配置 web.config

在 system.web 里面 添加

  
<system.web>

    <authentication mode="Forms">

      <!--默认状态下位Windows-->

      <forms loginUrl="CasEnter.aspx" name=".ASPXFORMSAUTH"></forms>

    </authentication>

    <authorization>

      <allow users="*"/>

      <!--允许任何访问者访问-->

    </authorization>

  </system.web>

  <location path="Admin">

    <!--注意:该节点最好跟在</system.web>之后,尽管这两个节点可能在web.config文件中相隔比较远,不要觉得有什么疑惑。下面是对Admin文件夹的访问权限的配置。-->

    <system.web>

      <authorization>

        <deny users="?"/>

        <!--阻止匿名用户访问-->

      </authorization>

    </system.web>

  </location> 

上面代码的意思是 只要访问 admin下面 任何页面 如果 没有认证 没有u写票据的话 就要跳转

在casenter.aspx.cs 页面里面 我们 要对cas 两次握手
 protected void Page_Load(object sender, EventArgs e)
{
//到配置文件中 获取cas的地址
string casHost = ConfigurationManager.AppSettings["casUrl"].ToString(); // 获取url是否有ticket
string ticket = Request.QueryString["ticket"]; // 获取客户端url
string service = Request.Url.GetLeftPart(UriPartial.Path); // 第一次登录 ticket 为空 跳到cas服务器登录
string redir = string.Empty;
if (ticket == null || ticket.Length == )
{
redir = casHost + "login?" + "service=" + service;
Response.Redirect(redir); return;
} // 第二次 验证ticket
string netid = ValidateTicket(casHost, ticket, service); //判断 netid
if (netid == null)
{
Label1.Text = "抱歉!CAS认证失败,请重试!";
}
else
{ }
} /// <summary>
/// 验证 并翻来 登录用户名 userid
/// </summary>
/// <param name="casHost"></param>
/// <param name="ticket"></param>
/// <param name="service"></param>
/// <returns></returns>
private string ValidateTicket(string casHost, string ticket, string service)
{
string validateurl = casHost + "serviceValidate?" + "ticket=" + ticket + "&" + "service=" + service;
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
StreamReader Reader = new StreamReader(new WebClient().OpenRead(validateurl));
string resp = Reader.ReadToEnd();
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
XmlTextReader reader = new XmlTextReader(resp, XmlNodeType.Element, context);
string netid = null;
while (reader.Read())
{
if (reader.IsStartElement())
{
string tag = reader.LocalName;
if (tag == "user")
netid = reader.ReadString();
}
}
return netid;
} /// <summary>
/// 默认 ssl 为true 因为有写浏览器 或者服务器 ssl通不过
/// </summary>
/// <param name="sender"></param>
/// <param name="certificate"></param>
/// <param name="chain"></param>
/// <param name="sslPolicyErrors"></param>
/// <returns></returns>
private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}

如果 认证 失败 在asp 页面里面

 <form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
<asp:HyperLink ID="HyperLink1" NavigateUrl="~/CasEnter.aspx" runat="server">重新认证</asp:HyperLink>
</div>
</form>

写票据

   //判断 netid
if (netid == null)
{
Label1.Text = "抱歉!CAS认证失败,请重试!";
}
else
{
//创建用户身份验证票据
FormsAuthenticationTicket ticketForm = new FormsAuthenticationTicket(
, //版本信息
netid, //票据中保存的用户标示
DateTime.Now, //保存票据的Cookie创建时间
DateTime.Now.AddMinutes(), //保存票据的Cookie过期时间
false, //保存票据的Cookie不永久保存
"Admin", //票据中的用户自定义字段,此处用于存放当前用户的角色信息
FormsAuthentication.FormsCookiePath //保存票据的Cookie的保存路径(在Web.config文件中配置)
); //创建一用于保存用户身份验证票据的Cookie
//该Cookie的名在配置文件中定义
//该Cookie的值为加密(必须加密!)的数据票据
HttpCookie ticketCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticketForm)); //将保存有用户身份验证的票据Cookie加入响应流
Response.Cookies.Add(ticketCookie);
//返回导致重定向的原始页面请求页面
Response.Redirect(FormsAuthentication.GetRedirectUrl("bamn", false), true);
}

需要视频的

http://pan.baidu.com/s/1jG2ZjHO

需要源码

【CAS单点登录视频教程】 第06集【完】 -- Cas认证 学习 票据认证FormsAuthentication的更多相关文章

  1. 【CAS单点登录视频教程】 第05集 -- CAS服务器安装

    第一步: 下载cas 服务器 cas-server-3.5.2-release.zip 目录 ----------------------------------------- [CAS单点登录视频教 ...

  2. 【CAS单点登录视频教程】 第04集 -- tomcat下配置https环境

    目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...

  3. 【CAS单点登录视频教程】 第03集 -- 配置 tomcat的 ssl

    目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...

  4. 【CAS单点登录视频教程】 第02集 -- 安装CAS

    目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...

  5. 【CAS单点登录视频教程】 第01集-- 认识CAS

    CAS 是什么? 目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAut ...

  6. CAS单点登录(一):单点登录与CAS理论介绍

    一.什么是单点登录(SSO) 单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录. 单点登录(Single Sign On),简称 ...

  7. SSO单点登录系列5:cas单点登录增加验证码功能完整步骤

    本篇教程cas-server端下载地址:解压后,直接放到tomcat的webapp目录下就能用了,不过你需要登录的话,要修改数据源,C:\tomcat7\webapps\casServer\WEB-I ...

  8. CAS单点登录(SSO)完整教程

    转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...

  9. Easyui入门视频教程 第06集---Layout初始化和属性方法使用

    目录 ----------------------- Easyui入门视频教程 第09集---登录完善 图标自定义   Easyui入门视频教程 第08集---登录实现 ajax button的使用  ...

随机推荐

  1. nginx配置目录列表访问权限

    我们知道apache httpd默认情况下会显示访问目录的文件列表,但是nginx访问时如果目录下面没有默认首页,那么会返回403 Forbidden的错误,表示没有权限访问,比如根目录就是nginx ...

  2. 滴滴大数据算法大赛Di-Tech2016参赛总结

    https://www.jianshu.com/p/4140be00d4e3 题目描述 建模方法 特征工程 我的几次提升方法 从其他队伍那里学习到的提升方法 总结和感想 神经网络方法的一点思考 大数据 ...

  3. FastText 文本分类使用心得

    http://blog.csdn.net/thriving_fcl/article/details/53239856 最近在一个项目里使用了fasttext[1], 这是facebook今年开源的一个 ...

  4. GIT 如何从另一分支合并特定的文件

    是否遇到过这种情景: 您在一个分支上工作,发现该分支上的某些文件实现的功能已经在其他分支上实现了 但因为这两个分支实现不同的功能,因此不能进行简单的合并工作,但您又不想重复其他已经完成的工作 以下操作 ...

  5. (转)Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)

    自:http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行 ...

  6. 4444: [Scoi2015]国旗计划|贪心|倍增

    由于没有区间被其它区间包括这个条件,也就是假设li<lj那么一定满足ri<rj,就能够贪心搞一搞了. 假如区间[l,r]都已经被覆盖,那么能够继续找一个li在[l,r]范围内的最大的一个, ...

  7. registry-1.docker.io TimeOut 错误

    用Docker For Windows在Windows 10上执行docker login或者 docker pull/push的时候,经常会报这样的错误: https: Get https://re ...

  8. How to skip to next iteration in jQuery.each() util?

      [问] I'm trying to iterate through an array of elements. jQuery's documentation says: jquery.Each() ...

  9. mac 苹果鼠标 magic mouse2 当触摸代替点击当触摸板教程

    本文解决 mac 苹果鼠标 magic mouse2 触摸代替点击,鼠标当触摸板教程 买了magic mouse2之后,发现官方不推荐使用触摸代替点击,我感觉很不爽,这不就是一个触摸板嘛,于是各种搜软 ...

  10. ASP入门(十四)-FileSystemObject 对象

    File Access 组件中常见的对象有 FileSystemObject.TextStream.File.Folder.Drive等,其中每一个对象都有不同的属性和方法,我们将会在用到的时候进行详 ...