JWT的簡單應用

jwt簡介

jwt即json-web-token。目前比較流行的跨域身份校驗方案。算是比較輕量級的解決方案。
jwt以"."爲分隔符分爲三個部分。第1部分:header 包含加密類型,消息類型等。payload(載荷):包含發佈人,有效期,簽發人等信息。第3部分VERIFY SIGNATURE,把將前兩部分進行base64Url編碼,然後加上用指定祕鑰指定加密算法生成的加密字符串。構成第三部分。
結構如如所示

落地場景

  1. 簡單SSO
  2. API鑑權
  3. 其他跨域身份校驗

簡單實例

  1. Pom文件引入java-jwt。
    其中注意java-jwt本身使用2.0以後的jackson版本com.fasterxml.jackson.core實現。避免與老版本jackson(org.codehaus.jackson衝突)。
    本身經驗而言:共存的狀態下使用老版的@JsonIgnoreProperties會失效。Spring3.0使用org.codehaus.jackson解析返回的json數據。
<!-- jwt json web TOKEN       -->
<dependency>
   <groupId>com.auth0</groupId>
   <artifactId>java-jwt</artifactId>
   <version>3.4.0</version>
</dependency>
  1. 生成jwt
public static String createToken(String userId) {
	//jwt生命週期
    long lifeTime = Long.parseLong(OperatePropertiesUtil.readValue("config.properties", "jwt_lifetime") );
    Date start = new Date();
   //單位爲毫秒60*60*1000爲1小時
    long currentTime = System.currentTimeMillis() + lifeTime;
    Date end = new Date(currentTime);
    String token = "";
    //加密的祕鑰需要客戶端 服務端一致。(根據加密算法不同調整)
    String secret = OperatePropertiesUtil.readValue("config.properties", "jwt_secret") ;
    //userId爲業務相關校驗使用。
    token = JWT.create().withAudience(userId).withIssuedAt(start).withExpiresAt(end)
            .sign(Algorithm.HMAC256(secret));
    return token;
}
  1. 服務端校驗jwt
    使用載荷中有效信息進行業務方面校驗(不需要的話可省略)
    比如:
String userId = JWT.decode(token).getAudience().get(0);

然後jwt本身校驗:

JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(ConstUtil.JWT_SECRET)).build();
try {
    jwtVerifier.verify(token);
} catch (JWTVerificationException e) {
    LOGGER.error("token校驗失敗:"+e.getMessage());
}

大概流程:

客戶端服務端攜帶jwt表明我的身份校驗jwt以驗證合法身份返回數據客戶端服務端
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章