JWT的學習與使用

2021-10-08 02:16:02 字數 4580 閱讀 6981

jwt介紹

jwt是json web token的縮寫。它是基於rfc 7519 標準定義的一種可以安全傳輸的 小巧 和 自包含 的json物件。由於資料使用了數字簽名,所以是可信任和安全的。

jwt的結構

jwt使用 . 分隔成三部分:

header例子:

此json將被base64url編碼(相等於明文)以形成jwt的第一部分

payload例子:

對有效負載進行base64url編碼,以形成jwt的第二部分

signature例子

簽名用於驗證訊息在此過程中沒有更改,並且對於使用私鑰進行簽名的令牌,它還可以驗證jwt的傳送者是它所說的真實身份

hmacsha256(base64urlencode(header) + "." +base64urlencode(payload),secret)
jwt的具體使用

1)pom.xml檔案中新增相關依賴

io.jsonwebtoken

jjwt

0.9.1

2)jwtauthenticationtokenfilter類

public class jwtauthenticationtokenfilter extends onceperrequestfilter 

if (stringutils.isnotblank(authtoken)) ", username);

if (username != null && securitycontextholder.getcontext().getauthentication() == null) , setting security context",username);

securitycontextholder.getcontext().setauthentication(authentication);}}

}chain.dofilter(request, response);

}}

config:

jwt:

# 加密金鑰

secret: iw**hda8232bjgh432[cicada-smile]

# token有效時長

expire: 3600

4)jwttokenutils類

@component

public class jwttokenutils ")

private string secret;

@value("$")

private int expiration; //過期時長,單位為秒,可以通過配置寫入

public string getusernamefromtoken(string token) catch (exception e)

return username;

}public date getcreateddatefromtoken(string token) catch (exception e)

return created;

}public date getexpirationdatefromtoken(string token) catch (exception e)

return expiration;

}private claims getclaimsfromtoken(string token) catch (exception e)

return claims;

}private date generateexpirationdate()

private boolean istokenexpired(string token)

public string generatetoken(user userdetails)

public string generatetoken(mapclaims)

public boolean cantokenberefreshed(string token)

public string refreshtoken(string token) catch (exception e)

return refreshedtoken;

}public boolean validatetoken(string token, userdetails userdetails)

}

5)mysecurityconfig配置檔案

@enablewebsecurity

public class mysecurityconfig extends websecurityconfigureradapter ");

// out.flush();

// out.close();

// }

// }).failurehandler(

// new authenticationfailurehandler() ");

// out.flush();

// out.close();

// }

// });

開啟自動配置的登出功能

//1) 訪問/logout 表示使用者登出,清空session

//2) 登出成功會返回/login?logout 頁面

//3) logoutsuccessfulurl 改變2)的設定

// .usernameparameter("username").passwordparameter("password").defaultsuccessurl("/");定義當需要使用者登入時候,轉到的登入頁面

//開啟自動配置的登入功能。如果沒有登入,沒有許可權就會來到登入頁面

//1:/login來到登入頁

//2:重定向/login?error表示登入失敗

//3:更多詳細規定

"/user/login.html");

/* iframe */

http.headers().frameoptions().sameorigin(); // 執行同乙個網域名稱中的任何請求

http.csrf().disable(); // 預設是啟用的,需要禁用csrf保護(當不使用cookie時可以禁用csrf)

// 禁用快取

}//定製請求的認證規則

@autowired

public void configureglobal(authenticationmanagerbuilder auth) throws exception

@override

public boolean matches(charsequence charsequence, string s)

});}

/*通過authenticationprovider方式獲取

*/@bean

public daoauthenticationprovider authenticationprovider()

/*** 密碼生成策略

* @return

*/@bean

public bcryptpasswordencoder passwordencoder()

@bean

public jwtauthenticationtokenfilter authenticationtokenfilterbean() throws exception

}

token與jwt使用例子

token使用例子 1.客戶端登入服務端後,服務端生成乙個隨機碼token,儲存到redis中,設定30分鐘過期,然後將token返回給客戶端 2.客戶端再次登入伺服器並傳送token,服務端根據到redis中查詢到該token相關資訊,返回登入成功 3.token明文傳輸很危險,所以要用https...

關於JWT的使用

一.建立.net core api專案,安裝nuget包 microsoft.aspnetcore.authentication.jwtbearer5.0.12版本 二.建立jwthelpers類,進入 把 部署到建立的類裡面 private readonly iconfiguration conf...

jwt使用實戰

what is jwt?json web token,主要是用來做認證的,因為他是基於數字簽名的 所以安全性賊高,是一種協議,本身是json格式,支援跨語言,同時它由三部分組成header 用於說明加密演算法和說明是jwt playload 傳輸使用者需要攜帶的脫敏業務資訊 signature 用來...