Restful API 狀態管理:JWT
阿新 • • 發佈:2019-02-09
Restful API
Restful講究一個無狀態的特性(stateless),這就不能把一些例如登陸後的認證資訊寫進cookie的傳統方式,目前探索的是採用token的方式來進行許可權的識別。
JWT
JWT 是JSON風格輕量級的授權和身份認證規範,可實現無狀態、分散式的Web應用授權;
jwt Token 是一串base64之後的程式碼 具體分為三部分:
Header //jwt 加密演算法
Payload // JWT 主要的資訊儲存部分,其中包含了許多種的宣告(claims) Claims 的實體一般包含使用者和一些元資料
Signature // 用來驗證傳送者的 JWT 的同時也能確保在期間不被篡改
java 使用jwt
/**
* 建立jwt
*
* @param id
* @param subject
* @param ttlMillis
* @return
* @throws Exception
*/
public String createJWT(String subject) throws Exception
{
Date now = new Date(System.currentTimeMillis());
JwtBuilder builder = Jwts.builder().setHeaderParam("typ" , "JWT").setIssuedAt(now).setSubject(subject)
.signWith(SignatureAlgorithm.HS512, jwtPropertie.getKey());
if (jwtPropertie.getExpire() >= 0)
{
long expMillis = now.getTime() + jwtPropertie.getExpire();
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
return builder.compact();
}
/**
* 解密jwt_token
*
* @param jwt_token
* @return
* @throws Exception
*/
public Claims parseJWT(String jwt_token) throws Exception
{
Claims claims = Jwts.parser().setSigningKey(jwtPropertie.getKey()).parseClaimsJws(jwt_token).getBody();
return claims;
}