close
是的
VisualStudio的逐步解說有告訴我們如何實作自訂驗證和授權
先是Implements IIdentity
屬性有AuthenticationType, IsAuthenticated, Name
目的就是做為識別
也就是身份驗證

再來就是Implements IPrincipal
屬性有Identity
方法有IsInRole(ByVal role As String) As Boolean
目的是做為識別的主體
並提供以角色為基礎的授權

最後通過自訂的驗證方法以產生Identity
並加入自訂的角色產生Principal
再給My.User.CurrentPrincipal就大功告成啦~

好吧...
事情其實沒有那麼簡單... :(

如果照上面的做法
原來的FormsAuthentication就不能用啦

第一個遇到的問題
就會是那個...
每一次進入頁面時
User的Principal已經不在啦
這時候的驗證
都會由Cookie取回的Ticket來產生FormsIdentity, GenericPrincipal給User

如果想用自訂的Identity, Principal
則必須在Global.asax加上FormsAuthentication_OnAuthenticate事件的方法
只要先產生好Identity, Principal給User
FormsAuthenticationModule就不會再自己產生預設啦

不可避免的是一樣得從Cookie取回Ticket證明通過驗證 (至少要知道Identity的Name吧)
總不能每一個頁面動作都給它重新驗證一次吧
(這原有的機制十分完備, 實在沒必要自己寫一套, 但許多方法並非public, 不能自行利用啊...)

仔細想想
我們的目的還是在驗證和授權
驗證的方法並不一定得在自訂的Identity處理
只要能識別
實在不需要自訂Identity
而且自訂Identity所擴充的屬性或方法
也不見得有多大的用處

但是如何自訂Principal提供授權所需要的role卻十分重要
該怎麼做呢?
答案就在.NET Framework 2.0的新功能中哦~
arrow
arrow
    全站熱搜

    marksu22 發表在 痞客邦 留言(1) 人氣()