Vert.x 用JWT驗證Web請求 譯<十>

JSON Web Tokens (RFC 7519) 是推薦的JSON-encoded tokens的標準,特別用來驗證一個用戶和權限,雖然聲稱這能夠用來幹任何事情。html

toekn是由服務器發佈,由服務器密鑰簽名,客戶端後續的請求帶上這個token,服務端和客戶端均可以驗證這個請求是否合法的。java

WARNING:一旦JWT令牌簽署,其內容是不加密的,必須經過安全的經過傳輸(e.g., HTTPS),其中不要包含敏感的數據信息(e.g., passwords, private API keys)程序員

添加JWT支持api

在maven依賴中加入vertx-auth-jwt模塊:安全

咱們用JCEKS keystore來放測試用的key,這裏咱們生成不一樣長度的合適的能夠:服務器

keytool -genseckey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg HMacSHA256 -keysize 2048 -alias HS256 -keypass secret
keytool -genseckey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg HMacSHA384 -keysize 2048 -alias HS384 -keypass secret
keytool -genseckey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg HMacSHA512 -keysize 2048 -alias HS512 -keypass secret
keytool -genkey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg RSA -keysize 2048 -alias RS256 -keypass secret -sigalg SHA256withRSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg RSA -keysize 2048 -alias RS384 -keypass secret -sigalg SHA384withRSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg RSA -keysize 2048 -alias RS512 -keypass secret -sigalg SHA512withRSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkeypair -keystore keystore.jceks -storetype jceks -storepass secret -keyalg EC -keysize 256 -alias ES256 -keypass secret -sigalg SHA256withECDSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkeypair -keystore keystore.jceks -storetype jceks -storepass secret -keyalg EC -keysize 256 -alias ES384 -keypass secret -sigalg SHA384withECDSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkeypair -keystore keystore.jceks -storetype jceks -storepass secret -keyalg EC -keysize 256 -alias ES512 -keypass secret -sigalg SHA512withECDSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360

咱們須要在API routes中接入JWT token的程序:maven

下面的程序員用來生成新的JWT tokens:ide

    1.咱們但願登陸和密碼信息已經過HTTP請求頭,咱們使用Apache Shiro認證工具

    2.請求角色roles測試

    3.咱們在token生成username, canCreate, canDelete 和 canUpdate

每一個API處理方法應該查詢當前用戶主體和要求,下面是apiDeletePage作的事情:

使用JWT tokens

爲了說明JWT token如何工做,讓咱們爲root用戶建立一個新的:

返回的文本中就是咱們須要保存的token,咱們能夠嘗試不實用token請求下:

經過使用受權的HTTP請求標頭,發送一個帶有JWT token請求,值急須要在Bearer <token value>。這裏咱們加上JWT toekn,修正以上的API請求:

採用API測試工具

ApiTest須要更新後支持了JWT tokens,咱們須要增長一個新的屬性來接受token的值

 

private String jwtTokenHeaderValue;

第一步咱們先取token中的用戶 foo:

    1.在header中憑證信息

    2.response payload中是text/plain類型,咱們能夠用BodyCodec編碼

    3.成功後返回tokenRequest future對象,帶有token

使用JWT token 須要在發送HTTP請求的時候,經過header返回給服務端:

    1.咱們把token放到帶有Bearer前綴的屬性中

    2.把token放到header中

 

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

有什麼須要交流的,能夠叫我公衆號留言:

相關文章
相關標籤/搜索