基於前后端分離的身份認證方式——JWT


什么是JWT
JWT——Json web token
是為了在網絡應用環境間傳遞聲明而執行的一種基於JSON的開放標准,可實現無狀態、分布式的Web應用授權。

現在一般都用redis來出來token做前后端分離,但jwt在某些時候也可以代替redis來處理token。
pom的配置

<dependency>
	<groupId>com.auth0</groupId>
		<artifactId>java-jwt</artifactId>
	<version>3.3.0</version>
</dependency>

簡單的使用方法:

 public String generateToken(UserDTO user) {
        Date nowDate = new Date();
        user.setPassword("");
        Date expiryDate = new Date(nowDate.getTime() + jwtExpiration);
        try {
            String newToken = JWT.create()
                    .withSubject(user.getId().toString())
                    .withClaim("current_user", JSON.toJSONString(user))
                    .withIssuedAt(nowDate)
                    .withExpiresAt(expiryDate)
                    .sign(Algorithm.HMAC256(jwtSecret));
            return newToken;
        } catch (UnsupportedEncodingException exception){
            logger.error("Unsupported JWT signature");
        } catch (JWTCreationException exception){
            logger.error("Create JWT signature exception");
        }
        return null;
    }

    public boolean validateToken(String authToken) {
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(jwtSecret))
                    .build();
            DecodedJWT jwt = verifier.verify(authToken);
            return true;
        } catch (UnsupportedEncodingException e) {
            logger.error("Unsupported JWT signature");
        } catch (JWTVerificationException exception) {
            logger.error("Verification JWT signature exception");
        }
        return false;
    }

    public Long getUserIdFromJWT(String token) {
        DecodedJWT jwt = JWT.decode(token);
        return Long.parseLong(jwt.getSubject());
    }

    public Date getExpiresDateFromJWT(String token) {
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getExpiresAt();
    }

1,在后端把用戶的信息生成token,2,驗證過期,3,從token得到你需要的信息,4,得到失效時間
還有些配置設置如下:

# 是否使用app.jwt.test.token的token作為測試(獲取用戶id為0)
app.jwt.allow.test.token=true
app.jwt.test.token=test_token
app.jwt.secret=jwt_test_$test
# token過期時間,單位是毫秒
app.jwt.expiration=43200000
# token剩余指定時間時刷新,單位是毫秒
app.jwt.refresh.limit=14400000


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM