1. 基於sso的web系統怎麼實現許可權管理
單點登錄SSO(Single Sign On)說得簡單點就是在一個多系統共存的環境下,用戶在一處登錄後,就不用在其他系統中登錄,也就是用戶的一次登錄能得到其他所有系統的信任。單點登錄在大型網站里使用得非常頻繁,例如像阿里巴巴這樣的網站,在網站的背後是成百上千的子系統,用戶一次操作或交易可能涉及到幾十個子系統的協作,如果每個子系統都需要用戶認證,不僅用戶會瘋掉,各子系統也會為這種重復認證授權的邏輯搞瘋掉。實現單點登錄說到底就是要解決如何產生和存儲那個信任,再就是其他系統如何驗證這個信任的有效性,因此要點也就以下幾個: 存儲信任 驗證信任 只要解決了以上的問題,達到了開頭講得效果就可以說是SSO。最簡單實現SSO的方法就是用Cookie,實現流程如下所示: 常用的兩種web單點登錄SSO的實現原理X 不然發現以上的方案是把信任存儲在客戶端的Cookie里,這種方法雖然實現方便但立馬會讓人質疑兩個問題: Cookie不安全 不能跨域免登 對於第一個問題一般都是通過加密Cookie來處理,第二個問題是硬傷,其實這種方案的思路的就是要把這個信任關系存儲在客戶端,要實現這個也不一定只能用Cookie,用flash也能解決,flash的Shared Object API就提供了存儲能力。 一般說來,大型系統會採取在服務端存儲信任關系的做法,實現流程如下所示: 常用的兩種web單點登錄SSO的實現原理 以上方案就是要把信任關系存儲在單獨的 SSO系統(暫且這么稱呼它)里,說起來只是簡單地從客戶端移到了服務端,但其中幾個問題需要重點解決: 如何高效存儲大量臨時性的信任數據 如何防止信息傳遞過程被篡改 如何讓SSO系統信任登錄系統和免登系統 對於第一個問題,一般可以採用類似與memcached的分布式緩存的方案, 既能提供可擴展數據量的機制,也能提供高效訪問。對於第二個問題,一般採取數字簽名的方法,要麼通過數字證書簽名,要麼通過像md5的方式,這就需要SSO系統返回免登URL的時候對需驗證的參數進行md5加密,並帶上token一起返回,最後需免登的系統進行驗證信任關系的時候,需把這個token傳給SSO系統,SSO系統通過對token的驗證就可以辨別信息是否被改過。對於最後一個問題,可以通過白名單來處理,說簡單點只有在白名單上的系統才能請求生產信任關系,同理只有在白名單上的系統才能被免登錄。 通過第二種方案的演變,可以使用發放票據的方式實現websso登錄: 常用的兩種web單點登錄SSO的實現原理 通過第三種方式,客戶端只做票據的發放和獲取,不涉及用戶信息傳輸,用戶信息均可交給子系統和SSO系統之間處理,更有效保護用戶隱私。 以上只是提供了些簡單的實現技術,但需要強調的是這只是技術實現而已,僅僅是為了解決上面談到的一些問題,SSO本身來說並不是什麼高科技,有了這個認識比較有利於我們深入探索SSO
2. java web的用戶角色許可權管理是如何實現的
用戶許可權管理一般是用servlet的過濾器來實現的。
過濾器會過濾訪問相關資源(這個是在web.xml裡面配置的)的請求。
如果樓主要實現防止未登錄用戶訪問相關資源。只要在過濾器里判斷該用戶是否登錄,也就是樓主所說的session中的用戶狀態屬性。是登陸的則放行,否則拒絕。
過濾器的用法就不在這里寫了,網上很多的。
不知能否解決樓主的問題呢?
3. 怎麼樣實現基於Web的許可權管理框架功能
解決復雜的許可權管理問題的過程可以抽象概括為:判斷【Who是否可以對What進行How的訪問操作(Operator)】這個邏輯表達式的值是否為True的求解過程。這里涉及的相關概念說明如下:
l Who:許可權的擁有者或主體。典型的有Principal、User、Group、Role、Actor等等。本框架的訪問控制方法會採用「基於角色的訪問控制(主,公認的有效方法)+ 針對個別用戶的訪問控制(輔,增加靈活性) + 用戶組」(這一點參見[訪問控制方法的考慮]一節),所以直接跟授權有關系的實體就只有角色(Role)和用戶(User)。譬如:業務經理(Role),張三(User)
l What:許可權針對的資源(Resource)(包括資源類別(the type of Resource)和資源實例(the instance of Resource))。譬如:報表。
l How:亦作action,表示某種訪問方法(亦請參考Operator條目解釋)。譬如:刪除。
l Operator:操作。表示施加於What的How動作。是一種Resource Related的概念,單獨的How動作是沒有實際意義的,譬如:刪除;只有與具體資源結合在一起才有意義,譬如:刪除報表。
4. Java Web如何做好許可權控制
控制訪問許可權不是通過session的
是資料庫中的欄位
資料庫中要定義幾個 許可權
比如: 遊客、普通用戶、會員、管理員、版主、超級版主 等
上面是舉例
然後大的方面可以控制為 登錄用戶 和 遊客
即沒有登錄的全是遊客,通過這個可以進行頁面顯示的控制
然後針對於登錄用戶
在登錄的時候,將用戶許可權同時查詢出來,存入session中
然後在jsp中就可以通過session中存入的許可權來控制頁面的顯示
5. JavaWeb項目里的 關於許可權控制,是怎樣實現的呢
一般用了3張表
1.用戶表(存儲所有用戶,有一個欄位表示用戶的所屬組如,管理員是0)
2.路徑表(存儲你的所有頁面路徑)
3.許可權表(存儲用戶和路徑的關系,0對應一些路徑)
查詢的時候用0去許可權表查出所有對應的路徑
6. 基於sso的web系統怎麼實現許可權管理
單點登錄SSO(Single
Sign
On)說得簡單點就是在一個多系統共存的環境下,用戶在一處登錄後,就不用在其他系統中登錄,也就是用戶的一次登錄能得到其他所有系統的信任。單點登錄在大型網站里使用得非常頻繁,例如像阿里巴巴這樣的網站,在網站的背後是成百上千的子系統,用戶一次操作或交易可能涉及到幾十個子系統的協作,如果每個子系統都需要用戶認證,不僅用戶會瘋掉,各子系統也會為這種重復認證授權的邏輯搞瘋掉。實現單點登錄說到底就是要解決如何產生和存儲那個信任,再就是其他系統如何驗證這個信任的有效性,因此要點也就以下幾個:
存儲信任
驗證信任
只要解決了以上的問題,達到了開頭講得效果就可以說是SSO。最簡單實現SSO的方法就是用Cookie,實現流程如下所示:
常用的兩種web單點登錄SSO的實現原理X
不然發現以上的方案是把信任存儲在客戶端的Cookie里,這種方法雖然實現方便但立馬會讓人質疑兩個問題:
Cookie不安全
不能跨域免登
對於第一個問題一般都是通過加密Cookie來處理,第二個問題是硬傷,其實這種方案的思路的就是要把這個信任關系存儲在客戶端,要實現這個也不一定只能用Cookie,用flash也能解決,flash的Shared
Object
API就提供了存儲能力。
一般說來,大型系統會採取在服務端存儲信任關系的做法,實現流程如下所示:
常用的兩種web單點登錄SSO的實現原理
以上方案就是要把信任關系存儲在單獨的
SSO系統(暫且這么稱呼它)里,說起來只是簡單地從客戶端移到了服務端,但其中幾個問題需要重點解決:
如何高效存儲大量臨時性的信任數據
如何防止信息傳遞過程被篡改
如何讓SSO系統信任登錄系統和免登系統
對於第一個問題,一般可以採用類似與memcached的分布式緩存的方案,
既能提供可擴展數據量的機制,也能提供高效訪問。對於第二個問題,一般採取數字簽名的方法,要麼通過數字證書簽名,要麼通過像md5的方式,這就需要SSO系統返回免登URL的時候對需驗證的參數進行md5加密,並帶上token一起返回,最後需免登的系統進行驗證信任關系的時候,需把這個token傳給SSO系統,SSO系統通過對token的驗證就可以辨別信息是否被改過。對於最後一個問題,可以通過白名單來處理,說簡單點只有在白名單上的系統才能請求生產信任關系,同理只有在白名單上的系統才能被免登錄。
通過第二種方案的演變,可以使用發放票據的方式實現websso登錄:
常用的兩種web單點登錄SSO的實現原理
通過第三種方式,客戶端只做票據的發放和獲取,不涉及用戶信息傳輸,用戶信息均可交給子系統和SSO系統之間處理,更有效保護用戶隱私。
以上只是提供了些簡單的實現技術,但需要強調的是這只是技術實現而已,僅僅是為了解決上面談到的一些問題,SSO本身來說並不是什麼高科技,有了這個認識比較有利於我們深入探索SSO
7. 如何設置 Web 伺服器的許可權
如何設置 Web 伺服器的許可權?如果Web伺服器的許可權沒有設置好,那麼網站就會出現漏洞並且很可能會出現被不懷好意的人黑掉的情況。我們不應該把這歸咎於 IIS 的不安全。如果對站點的每個目錄都配以正確的許可權,出現漏洞被人黑掉的機會還是很小的(Web 應用程序本身有問題和通過其它方式入侵黑掉伺服器的除外)。下面是我在配置過程中總結的一些經驗,希望對大家有所幫助。
IIS Web 伺服器的許可權設置有兩個地方,一個是 NTFS 文件系統本身的許可權設置,另一個是 IIS 下網站->站點->屬性->主目錄(或站點下目錄->屬性->目錄)面板上。這兩個地方是密切相關的。下面以實例的方式來講解如何設置許可權。
IIS 下網站->站點->屬性->主目錄(或站點下目錄->屬性->目錄)面板上有:
腳本資源訪問
讀取
寫入
瀏覽
記錄訪問
索引資源
6 個選項。這 6 個選項中,「記錄訪問」和「索引資源」跟安全性關系不大,一般都設置。但是如果前面四個許可權都沒有設置的話,這兩個許可權也沒有必要設置。在設置許可權時,記住這個規則即可,後面的例子中不再特別說明這兩個許可權的設置。
另外在這 6 個選項下面的執行許可權下拉列表中還有:
無
純腳本
純腳本和可執行程序
3 個選項。
而網站目錄如果在 NTFS 分區(推薦用這種)的話,還需要對 NTFS 分區上的這個目錄設置相應許可權,許多地方都介紹設置 everyone 的許可權,實際上這是不好的,其實只要設置好 Internet 來賓帳號(IUSR_xxxxxxx)或 IIS_WPG 組的帳號許可權就可以了。如果是設置 ASP、PHP 程序的目錄許可權,那麼設置 Internet 來賓帳號的許可權,而對於 ASP.NET 程序,則需要設置 IIS_WPG 組的帳號許可權。在後面提到 NTFS 許可權設置時會明確指出,沒有明確指出的都是指設置 IIS 屬性面板上的許可權。
例1 —— ASP、PHP、ASP.NET 程序所在目錄的許可權設置:
如果這些程序是要執行的,那麼需要設置「讀取」許可權,並且設置執行許可權為「純腳本」。不要設置「寫入」和「腳本資源訪問」,更不要設置執行許可權為「純腳本和可執行程序」。NTFS 許可權中不要給 IIS_WPG 用戶組和 Internet 來賓帳號設置寫和修改許可權。如果有一些特殊的配置文件(而且配置文件本身也是 ASP、PHP 程序),則需要給這些特定的文件配置 NTFS 許可權中的 Internet 來賓帳號(ASP.NET 程序是 IIS_WPG 組)的寫許可權,而不要配置 IIS 屬性面板中的「寫入」許可權。
IIS 面板中的「寫入」許可權實際上是對 HTTP PUT 指令的處理,對於普通網站,一般情況下這個許可權是不打開的。
IIS 面板中的「腳本資源訪問」不是指可以執行腳本的許可權,而是指可以訪問源代碼的許可權,如果同時又打開「寫入」許可權的話,那麼就非常危險了。
執行許可權中「純腳本和可執行程序」許可權可以執行任意程序,包括 exe 可執行程序,如果目錄同時有「寫入」許可權的話,那麼就很容易被人上傳並執行木馬程序了。
對於 ASP.NET 程序的目錄,許多人喜歡在文件系統中設置成 Web 共享,實際上這是沒有必要的。只需要在 IIS 中保證該目錄為一個應用程序即可。如果所在目錄在 IIS 中不是一個應用程序目錄,只需要在其屬性->目錄面板中應用程序設置部分點創建就可以了。Web 共享會給其更多許可權,可能會造成不安全因素。
總結: 也就是說一般不要打開-主目錄-(寫入),(腳本資源訪問) 這兩項以及不要選上(純腳本和可執行程序),選(純腳本)就可以了.需要asp.net的應用程序的如果應用程序目錄不止應用程序一個程序的可以在應用程序文件夾上(屬性)-目錄-點創建就可以了.不要在文件夾上選web共享.
例2 —— 上傳目錄的許可權設置:
用戶的網站上可能會設置一個或幾個目錄允許上傳文件,上傳的方式一般是通過 ASP、PHP、ASP.NET 等程序來完成。這時需要注意,一定要將上傳目錄的執行許可權設為「無」,這樣即使上傳了 ASP、PHP 等腳本程序或者 exe 程序,也不會在用戶瀏覽器里就觸發執行。
同樣,如果不需要用戶用 PUT 指令上傳,那麼不要打開該上傳目錄的「寫入」許可權。而應該設置 NTFS 許可權中的 Internet 來賓帳號(ASP.NET 程序的上傳目錄是 IIS_WPG 組)的寫許可權。
如果下載時,是通過程序讀取文件內容然後再轉發給用戶的話,那麼連「讀取」許可權也不要設置。這樣可以保證用戶上傳的文件只能被程序中已授權的用戶所下載。而不是知道文件存放目錄的用戶所下載。「瀏覽」許可權也不要打開,除非你就是希望用戶可以瀏覽你的上傳目錄,並可以選擇自己想要下載的東西。
總結: 一般的一些asp.php等程序都有一個上傳目錄.比如論壇.他們繼承了上面的屬性可以運行腳本的.我們應該將這些目錄從新設置一下屬性.將(純腳本)改成(無).
例3 —— Access 資料庫所在目錄的許可權設置:
許多 IIS 用戶常常採用將 Access 資料庫改名(改為 asp 或者 aspx 後綴等)或者放在發布目錄之外的方法來避免瀏覽者下載它們的 Access 資料庫。而實際上,這是不必要的。其實只需要將 Access 所在目錄(或者該文件)的「讀取」、「寫入」許可權都去掉就可以防止被人下載或篡改了。你不必擔心這樣你的程序會無法讀取和寫入你的 Access 資料庫。你的程序需要的是 NTFS 上 Internet 來賓帳號或 IIS_WPG 組帳號的許可權,你只要將這些用戶的許可權設置為可讀可寫就完全可以保證你的程序能夠正確運行了。
總結: Internet 來賓帳號或 IIS_WPG 組帳號的許可權可讀可寫.那麼Access所在目錄(或者該文件)的「讀取」、「寫入」許可權都去掉就可以防止被人下載或篡改了
例4 —— 其它目錄的許可權設置:
你的網站下可能還有純圖片目錄、純 html 模版目錄、純客戶端 js 文件目錄或者樣式表目錄等,這些目錄只需要設置「讀取」許可權即可,執行許可權設成「無」即可。其它許可權一概不需要設置。 上面的幾個例子已經包含了大部分情況下的許可權設置,只要掌握了設置的基本原理,也就很容易地完成能其它情況下的許可權設置。
8. java web的用戶角色許可權管理是如何實現的
許可權判斷用XML的比較多。不需要分支語句的代碼。直接讀取XML文件,生成相應HTML就可以了。也就是你的XML或者數據表中有某許可權哪些按鈕可用,哪些不具備,讀取數據表數據或XML,然後用代碼生成HTML,就是許可權控制的效果了
9. 關於web項目鑒權的一些思考與三種實現方式
項目登陸校驗是一個項目的根基,鑒權又是根基之本。先結合實際的項目背景來解釋什麼是鑒權:有選課系統,會分成學生登陸,老師登陸,超級管理員登陸。那不同的人登陸的時候看到的菜單,內容會不一樣。此時就不能只是鑒別賬號密碼是否正確,還要帶上登陸人相應的操作許可權。
下面我就來談談,項目中常用到的鑒權幾種形式:
參考網址:
http://blog.51cto.com/5148737/2308131
https://blog.csdn.net/sinat_29899265/article/details/80771330
PS:個人覺得這種方式比較麻煩,不容易理解與配置,不推薦。
關於二者的書寫方法可以參考博主之前的博客: Fliter和Interceptor區別與@Autowired報錯(空指針)解決 ,還是推薦採用springMVC的Interceptor,可以很便捷的對url進行模糊的通配符**匹配攔截。
具體有兩種寫法:
其中Account繼承User類(springSecurity自帶的,實現了UserDetails介面的類),調用父類的初始化方法。
private final Set<GrantedAuthority> authorities; 是springsecurity裡面user的成員變數。 這樣子user對象帶上了BBBB和AAAA的許可權,然後再將整個user給注冊到springsecurity中:
那麼就可以利用spring的上下文取出相應的Account對象的許可權:
註:@PreAuthorize不僅可以註解在方法上,還可以註解在類上。
雖然springSecurity給我們封裝了很好的一個介面,但是用起來比較笨重,並且靈活性感覺不夠,尤其是採用方法一的形式。並且如果在antMatchers()裡面配置的話,就不會進行鑒權了。所以當需要多種鑒權等比較靈活的情況下,還是推薦自行撰寫攔截器,或者自行編寫的方法用在 @PreAuthorize中。
10. c#web實現許可權控制
個人的想法,僅供參考。不明白或者有好的建議,可以隨時交流。(欄位 只添加了關鍵的幾個,可根據自己需要 自行修改)