目錄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