目录html
-----------------------------------------web
-----------------------------------------浏览器
首先 咱们来了解 一下 微软提供的 票据认证
首先 咱们建立 一个 webform项目
而后 建立 一个admin的目录 里面有一个 admin.aspx的页面 这个页面 必须登陆了 才能访问
那么 咱们首先 要配置 Form票据
tomcat
配置 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 == 0) { 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 页面里面
post
<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( 1, //版本信息 netid, //票据中保存的用户标示 DateTime.Now, //保存票据的Cookie建立时间 DateTime.Now.AddMinutes(40), //保存票据的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/1jG2ZjHOurl
须要源码
spa