【CAS單點登陸視頻教程】 第06集【完】 -- Cas認證 學習 票據認證FormsAuthentication

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

相關文章
相關標籤/搜索