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


目錄

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

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

首先 我們來了解 一下 微軟提供的 票據認證

首先 我們創建 一個 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 == 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 頁面里面

 <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/1jG2ZjHO

需要源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM