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 用來...