Vert.x 安全和訪問控制 譯<九>

TIP:相應的代碼在step-7文件夾中(https://github.com/vert-x3/vertx-guide-for-java-devs)java

在這個章節中咱們在Vert.x實現安全和訪問控制是簡單的,咱們將作下面的事情:git

    1.把http改爲用httpsgithub

    2.添加基於組的權限的用戶身份驗證web

    3.用JSON web tokens (JWT)控制訪問的APIapache

Vert.x的HTTPS支持瀏覽器

Vert.x支持SSL-encrypted的網絡鏈接,常見的在生產環境提供HTTP server服務,經過像Nginx這樣的HTTP服務/proxy,使用HTTPS來處理鏈接服務。固然Vert.x自身也能夠提供HTTPS而且end-to-end encryption。安全

證書能夠存儲在java keystore文件中,你可能須要建立一個測試證書,這裏是如何建立一個server-keystore.jks keyStore服務器

咱們能夠經過HttpServerOptions在建立HTTP服務的地方加入KeyStore文件來支持SSL微信

咱們可使用瀏覽器訪問 https://localhost:8080/,由於那個證書是self-signed,因此會在好的瀏覽器的認證中提示安全警告信息。網絡

而後,咱們須要更新測試用例ApiTest中的,web client請求的代碼:

    1.設置SSL爲true

    2.既然那個證書是self-signed,咱們須要選擇相信它,不然鏈接會失敗,就像瀏覽器上看到的同樣。

訪問控制和認證

Vert.x提供了不少的身份認證和受權的可選項,官方支持模塊包括知名廠商的JDBC, MongoDB, Apache Shiro, OAuth2和 JWT (JSON web tokens)。

在下一節將涵蓋JWT,將使用Apache Shiro 來作認證,LDAP or Active Directory服務返回認證信息。在咱們的例子裏,在咱們的例子中咱們能夠簡單的將憑證存儲在屬性文件中,但對一個LDAP服務器API的使用是同樣的。

目標是要求用戶使用wiki須要驗證,和基於角色的權限控制:

    1.若是不是某種角色只能瀏覽

    2.若是有寫的角色就能夠編輯頁面

    3.若是有編輯的角色就能夠建立,編輯和刪除頁面

    4.若是有管理員權限,那能夠有全部的權限了

WARNING:

關於Vert.x與Apache Shiro集成內部實現有一些問題,部分阻塞可能影響性能,一些數據的存儲使用了 thread local,你不該該濫用內部API。

添加Apache Shiro認證

第一步咱們先把vertx-auth-shiro模塊加入pom.xml中:

在配置文件中定義了咱們使用的,位於src/main/resources/wiki-users.properties

帶有user-前綴的是用戶帳號,第一個字段是密碼,後面接着的是角色。好比bar用戶的密碼是bar,角色事writer,writer有update的權限。

回到HttpServerVerticle類中,咱們使用 Apache Shiro建立一個一個權限認證提供者:

ShiroAuth對象用於處理服務端的用戶會話:

    1.咱們爲請求創建一個用戶會話吹程序

    2.當請求尚未用戶會話的時候將會重定向到登陸頁面

    3.咱們將加入authHandler用來認證

最後咱們須要建立3個請求,用於登陸,提交表單,註銷:

    1.FormLoginHandler用於處理登陸請求,默認狀況下,HTTP的post請求中有登錄信息的username,password,return_url用於重定向到成功頁面。

    2.註銷用戶的瘦須要清除RoutingContext終端額會話信息。

下面是RoutingContext的實現:

HTML頁面的模板 src/main/resources/templates/login.ftl

頁面顯示的效果:

支持基於角色的功能

功能是更具用戶的權限來的,在下面的截圖,管理員角色能夠建立一個網頁和執行備份:

用戶沒有角色不能執行這些操做:

咱們能夠訪問RoutingContext,來查詢權限信息。下面是indexHandler方法實現:

    1.這是是查詢權限,是個異步操做

    2.操做result

    3.應用到HTML模板中

    4.獲取登陸信息

咱們修改模板中的代碼,來渲染canCreatePage的顯示:

這個代碼和更新或者刪除的頁面和訪問Git repository的處理是同樣的。

不單單在HTML頁面須要檢查HTTP POST請求的數據,在服務端的處理程序也須要檢查。事實上,惡意攻擊者能夠根據請求執行不被認證的權限,這裏的pageDeletionHandler程序用來保護頁面刪除的權限控制:

 

原文連接:http://vertx.io/docs/guide-for-java-devs/

個人微信公衆號:

相關文章
相關標籤/搜索