[匯入]ASP.NET使用者認證問題(Securing ASP.NET Applications)

來源:互聯網
上載者:User

Part V: Securing ASP.NET Applications
CHAPTER 19 Using Forms-Based Authentication
    Forms認證和Passport認證都是需要cookie支援的,兩者區別在於
        Forms認證可以使開發員對使用者名稱和密碼保進行自訂儲存,例如web.config檔案、xml檔案或者database表
        Passport認證利用了MS的Passport認證,是一種集中處理認證的方式,可以一次登入,保證同一個使用者名稱和密碼在多個web網站也有效
    19.1 Working with Forms Authentication
        Forms認證的優點就在於可以把使用者名稱和密碼按照自己的意願存放在任何位置
        Forms認證需要瀏覽器的cookie支援,以便甄別使用者
        關於Forms認證的類位於System.Web.Security命名空間下面,最重要的幾個類是,
            FormsAuthentication,包含了幾個和Forms認證一同工作的方法
            FormsAuthenticationTicket,代表了在Forms認證中,只用在cookie內的認證票據
            FormsIdentity,代表了通過使用Forms認證後,被認證使用者的標識
            FormsAuthenticationModule,這個類是在Forms認證中的一個使用的模組
        Enabling Forms Authentication
            為了能夠使用Forms認證,必須完成幾個步驟,
                在Web.config檔案的authentication section設定認證模式,mode="Forms"
                在Web.config檔案的authorization section設定禁止對應用程式的目錄進行匿名訪問 deny users="?"
                建立登陸頁面,允許使用者輸入使用者名稱和密碼
                    在登陸頁面,使用FormsAuthentication.RedirectFromLoginPage()方法,來進行重新導向回進入登陸頁面之前的被訪問頁面。
                    FormAuthentication.RedirectFromLoginPage()方法,完成了兩件事情,
                        第一,根據傳入的參數,建立臨時或者永久的cookie
                        第二,把使用者返回到在進入登陸頁面之前的被訪問頁面
        Configuring Forms Authentication
            web.config檔案的authentication section可選的子節點是forms,forms可以如下幾個屬性,
                loginUrl,如果需要認證,使用者被自動重新導向的登陸頁面的URL地址
                name,包含認證票據的瀏覽器cookie的名字
                timeout,cookie到期的時間,預設30分鐘。不適用於persistent cookie
                path,使用到cookie的路徑,預設是/
                protection,保護cookie資料的方法,可以選擇值有All/None/Encryption/Validation,預設是All
        Configuring Forms Authorization
            web.config檔案中,authorization section可以包含deny子節點和allow子節點
            deny和allow子節點的屬性有
                verbs,用於控制使用者是否可以使用HTTP協議的Post或者Get
                users,使用*代表所有使用者,使用?代表匿名使用者
        Retrieving User Information
            使用FormsIdentity類的屬性,可以識別認證使用者的資訊
                FormsIdentity.AuthenticationType,對於Forms認證的使用者總是返回Forms
                FromsIdentity.IsAuthenticated,表明使用者是否認證通過
                FormsIdentity.Name,代表了被認證使用者的名字
                FormsIdentity.Ticket,確定了和目前使用者相關的cookie認證票據
            FormsIdentity.Ticket屬性返回了使用者相關的cookie認證票據,使用FormsAuthenticationTicket類可以獲得其他有的資訊,
                FormsAuthenticationTicket.CookiePath,認證票據cookie的路徑
                FormsAuthenticationTicket.Expiration,認證票據cookie到期的日期
                FormsAuthenticationTicket.Expired,bool值,表明當前認證票據是否已經到期
                FormsAuthenticationTicket.IsPersistent,使用者表明認證票據是否包含在persistent cookie中
                FormsAuthenticationTicket.IssueDate,包含認證票據的cookie建立的日期時間
                FormsAuthenticationTicket.Name,和認證票據相關的使用者名稱
                FormsAuthenticationTicket.UserData,開發員自訂的,包含在認證票據中的自訂資料
                FormsAuthenticationTicket.Version,一個整數值,代表了認證票據的版本號碼。現在,預設情況下,這個屬性總是返回1
        Creating a Sign-Out Page
            如果允許退出登入,編程匿名人士,可以使用FormsAuthentication.SignOut()方法,使用FormsAuthentication.SighOut()方法可以刪除會話cookie或者persistent cookie
        Authenticating Users with the Web.Config File
            Forms認證的一個巨大優點就是把可以把使用者名稱和密碼按照自己的意願存放在任何位置,例如,可以存放在web.config中,
                形如<forms> <credentials passwordFormat="Clear" > <user name="tom" password="tom" /> </credentials> </forms>
            就是把使用者名稱和密碼存放在了web.config檔案中,通過再在authorization中禁止匿名訪問,就可以達到必須是使用者名稱是tom,密碼也是tom的人才能夠訪問本網站
            通過使用FormAuthentication.Authenticate()方法,可以確定給定的使用者名稱和密碼是否在web.config檔案中
            Encrypting Passwords in the Web.Config File
                在上例中,因為密碼是明文書寫在了web.config檔案中,很危險,通過指定credentials的passwordFormat屬性為某一個密碼編譯演算法,並且把明文的password屬性值更改為加密後的值,就可以減小一些危險
                那麼,使用密碼編譯演算法,有一個問題就是在FormsAuthentication.Authenticate()方法中,就無法達到匹配的目的,因為密碼是加密過的,而使用者輸入的密碼是一個明文,怎麼解決問題呢,使用FormsAuthentication.HashPasswordForStoringInConfigFile()方法來完成,而不再使用FormsAuthentication.Authenticate()方法了
        Authenticating Users with an XML File
            除了在web.config檔案中儲存使用者名稱和密碼,也可以把使用者名稱和密碼放在單獨的XML檔案中
            書上例子,放在了Passwords.xml檔案中,為了能夠完成把使用者名稱和密碼單獨儲存在xml檔案的目的,需要建立四個檔案
                Web.config,包含了認證和授權的配置資訊
                Passwords.xml,儲存了使用者名稱和密碼的檔案
                Login.aspx,驗證使用者名稱和密碼,驗證的依據就是passwords.xml檔案
                Register.aspx,允許使用者名稱在網站進行註冊,從而向Passwords.xml檔案中新增使用者名稱和密碼
            web.config檔案不必多講,就是在授權部分禁止了匿名訪問
            Passwords.xml檔案中,都是形如<Passwords> <user> <name>Tom</name> <password>tom</password> </user> </Passwords>的格式
            在Login.aspx檔案中,就是使用DataSet讀取Passwords.xml,然後拿使用者輸入的使用者名稱和密碼與每一條記錄進行對比,有的話呢,就是FormsAuthentication.RedirectFromLoginPage()方法
            在Register.aspx檔案中,還是使用DataSet讀取Passwords.xml,然後拿使用者輸入的使用者名稱和密碼與每一條記錄對比,有的話,就是有重複,讓使用者重新輸入,沒有呢,就插入到DataSet中,然後調用FormsAuthentication.RedirectFromLoginPage()方法     
        Authenticating Users with a Database Table
            相較於儲存在web.config和一個xml檔案中,儲存在資料表裡面是更常用的辦法,這個時候使用DataTable代表了資料表,然後使用和上面的儲存在xml檔案中類似的辦法完成使用者登陸和註冊就可以了
        Implementing Roles-based Authentication
            很多的時候,需要把使用者進行分角色,以便授予他們不同的許可權,例如bbs中,有斑竹,有管理員,有普通註冊使用者
            為了能夠給使用者分角色,需要在Global.asax檔案的Application_AuthenticateRequest()方法中進行編碼,例如,
                String[] arrRoles = new String[] {"Supervisors", "Users"};
                Context.User = New GenericPrincipal( Context.User.Identity, arrRoles );
            上面的兩句代碼,就是把目前使用者分配到"Supervisors"和"Users"角色中了
            或者通過使用一個xml檔案記錄了使用者所在的角色,然後在Application_AuthenticateRequest()方法中,根據使用者名稱找到他所屬於的角色,並分配給目前使用者。如果角色、使用者資訊儲存在資料庫中,也是一樣的做法
        Creating a Custom Authentication Ticket
            Forms認證使用了儲存在cookie中的認證票據來完成使用者認證工作的。認證票據是在FormsAuthentication.RedirectFromLoginPage()方法的時候自動建立並添加到瀏覽器當中的
            一般來講,認證票據中的資訊是足夠用了。如果不夠用,可以手動增加一個認證票據,放在瀏覽器中,例如,你想增加某些需要的自訂資訊,可以建立一個FormsAuthenticationTicket類的執行個體,並在這個執行個體的userData屬性中增加自訂的資訊
        Using Forms Authentication and Web Farms
            預設情況下,不能夠在多個伺服器之間共用認證票據cookie,因為每個伺服器會自動產生他自己的key,所以,如果想要共用認證票據cookie,必須在machine.config或者web.config檔案中聲明如下的內容:
                <machineKey validationKey="AutoGenerate, IsolateApps" decryptionKey="AutoGerate, IsolateApps" validation="SHA1" />
    19.2 Working with Passport Authentication
        Enabling Passport Authentication
            Enabling Users to Sign In and Sign Out
        Retrieving User Information
        心情不好,懶得看了,可能很有用,用的時候再說吧

CHAPTER 20 Using Windows-Based Authentication
    20.1 Working with Windows Authentication
        使用基於windows帳戶的驗證適合在內部網使用,每一台機器有一個帳號,可以使用整合網域控制站上面的帳號進行安全驗證
    20.2 Impersonating User Accounts
    20.3 Setting Security Policies
心情不好,懶得看了,可能很有用,用的時候再說吧

CHAPTER 21 Encrypting Data over the Network
這部分講解了SSL這個安全的協議的情況,需要的時候再看了
    21.1 Using the Secure Sockets Layer
    21.2 Configuring Your Server to Use SSL
    21.3 Using SSL in ASP.NET Pages
    21.4 Using .NET Encryption Classes


文章來源:http://www.cnblogs.com/wbuild/articles/903680.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.