日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

JWT身份驗證:.NET Core后臺與Vue.js前端實現詳解

來源: 責編: 時間:2024-05-17 17:47:48 196觀看
導讀概述:JSON Web Token(JWT)是一種用于安全傳輸信息的標準。主要用于身份驗證和信息傳遞,通過頭部、載荷和簽名構成。在.NET Core中,可通過Microsoft.AspNetCore.Authentication.JwtBearer實現后臺服務,提供生成、刷新和驗證T

DZD28資訊網——每日最新資訊28at.com

概述:JSON Web Token(JWT)是一種用于安全傳輸信息的標準。主要用于身份驗證和信息傳遞,通過頭部、載荷和簽名構成。在.NET Core中,可通過Microsoft.AspNetCore.Authentication.JwtBearer實現后臺服務,提供生成、刷新和驗證Token的接口。前端使用Vue.js結合axios發送請求,通過攔截器實現自動刷新Token,確保安全可靠的身份驗證和信息傳遞。DZD28資訊網——每日最新資訊28at.com

什么是JWT?

JWT(JSON Web Token)是一種開放標準(RFC 7519),用于在各方之間傳輸信息的輕量級、自包含的標準。JWT由三部分組成:頭部(Header)、載荷(Payload)、簽名(Signature)。它通常被用于身份驗證和信息傳遞。DZD28資訊網——每日最新資訊28at.com

  • 頭部(Header):聲明類型和使用的簽名算法。
{ "alg": "HS256", "typ": "JWT" }
  • 載荷(Payload):包含聲明(claims),是關于實體(通常是用戶)和其他數據的聲明。
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
  • 簽名(Signature):使用密鑰對頭部和載荷進行簽名,以確保數據的完整性和來源驗證。

JWT 主要用途

JWT主要用于在網絡應用中安全地傳遞聲明。常見用途包括身份認證和信息交換。生成的JWT可以被驗證,信任,并且不易被篡改。DZD28資訊網——每日最新資訊28at.com

JWT 的原理

JWT的原理基于對稱或非對稱加密。生成JWT時,使用密鑰對頭部和載荷進行簽名。驗證時,接收到的JWT通過相同的過程重新計算簽名,并與接收到的簽名進行比較。由于簽名使用密鑰生成,只有擁有密鑰的一方才能生成有效的簽名。DZD28資訊網——每日最新資訊28at.com

JWT 應用場景

  • 身份認證:用戶登錄后,服務器生成JWT,并在每個后續請求中攜帶JWT,以驗證用戶身份。
  • 信息傳遞:JWT可以包含任意信息,用于在不同系統之間安全傳遞信息,如用戶權限、配置信息等。

JWT 有哪幾種傳輸方式

  • HTTP Header:JWT通常放在HTTP請求的Authorization頭部中,使用Bearer方案,例如:Authorization: Bearer your_token_here
  • URL 參數:可以將JWT作為URL的查詢參數傳遞。
  • POST 請求體:可以將JWT放在POST請求體中進行傳遞。

在 .NET Core 中使用 JWT

后臺服務實現

安裝 NuGet 包:DZD28資訊網——每日最新資訊28at.com

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

配置 JWT 服務:DZD28資訊網——每日最新資訊28at.com

services.AddAuthentication(options =>{    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;}).AddJwtBearer(options =>{    options.TokenValidationParameters = new TokenValidationParameters    {        ValidateIssuer = false,        ValidateAudience = false,        ValidateLifetime = true,        ValidateIssuerSigningKey = true,        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))    };});

添加授權中間件:DZD28資訊網——每日最新資訊28at.com

app.UseAuthentication();

生成 Token 接口:DZD28資訊網——每日最新資訊28at.com

[ApiController][Route("api/auth")]public class AuthController : ControllerBase{    private readonly JwtService _jwtService;    public AuthController(JwtService jwtService)    {        _jwtService = jwtService;    }    [HttpPost("login")]    public IActionResult Login([FromBody] LoginRequest request)    {        // 驗證用戶名和密碼,生成 ClaimsIdentity        ClaimsIdentity identity = ...        // 生成 JWT        string token = _jwtService.GenerateToken(identity);        return Ok(new { Token = token });    }}

刷新 Token 接口:DZD28資訊網——每日最新資訊28at.com

[Authorize][HttpPost("refresh")]public IActionResult RefreshToken(){    // 從當前用戶的 Claims 中獲取信息,生成新的 Token    ClaimsIdentity identity = ...    string newToken = _jwtService.GenerateToken(identity);    return Ok(new { Token = newToken });}

驗證 Token 接口:DZD28資訊網——每日最新資訊28at.com

[Authorize][HttpGet("protected")]public IActionResult ProtectedResource(){    // 受保護的資源    return Ok(new { Message = "This is a protected resource." });}

前端 VUE 實現

安裝 axios:DZD28資訊網——每日最新資訊28at.com

npm install axios

在 Vue 組件中使用 JWT:DZD28資訊網——每日最新資訊28at.com

import axios from 'axios';// 每次請求前檢查 Token 是否過期,如果過期則刷新axios.interceptors.request.use(async (config) => {    const token = localStorage.getItem('jwtToken');    if (token) {        // 檢查 Token 是否過期        const decodedToken = parseJwt(token);        const currentTimestamp = Math.floor(Date.now() / 1000);        if (decodedToken.exp < currentTimestamp) {            // Token 過期,刷新 Token            await refreshToken();        }        config.headers.Authorization = `Bearer ${token}`;    }    return config;});// 刷新 Tokenasync function refreshToken() {    const token = localStorage.getItem('jwtToken');    const response = await axios.post('api/auth/refresh', null, { headers: { Authorization: `Bearer ${token}` } });    const newToken = response.data.Token;    localStorage.setItem('jwtToken', newToken);}// 發送包含 JWT 的請求async function sendRequest() {    try {        const response = await axios.get('api/auth/protected');        console.log(response.data);    } catch (error) {        console.error('Request failed:', error);    }}// 解析 JWTfunction parseJwt(token) {    const base64Url = token.split('.')[1];    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');    const jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);    }).join(''));    return JSON.parse(jsonPayload);}

以上是一個簡單的示例,實際應用中需要考慮更多的安全性和錯誤處理。確保在生產環境中使用 HTTPS 以保障數據傳輸的安全性。DZD28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-88929-0.htmlJWT身份驗證:.NET Core后臺與Vue.js前端實現詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 在.Net開發中使用Math.NET Filtering開源庫實現巴特沃斯濾波器

下一篇: 用Rust進行TUI編程:Cursive庫

標簽:
  • 熱門焦點
  • 分享六款相見恨晚的PPT模版網站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網站旨在為全球Office用戶提供豐富的高品質原創PPT模板、實用文檔、數據圖表及個性化定制服務。優點:OfficePLUS是微軟官方網站,囊括PPT模板、Word模
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業用途。(幾小時前,swyy發現它已從LLaMA 2更名為Lla
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 半導體需求下滑 三星電子DS業務部門今年營業虧損預計超10萬億韓元

    7月17日消息,據外媒報道,去年下半年開始的半導體需求下滑,影響到了三星電子、SK海力士、英特爾等諸多廠商,營收明顯下滑,部分廠商甚至出現了虧損。作為
  • iQOO Neo8系列或定檔5月23日:首發天璣9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
  • 引領旗艦級影像能力向中端機普及 OPPO K11 系列發布 1799 元起

    7月25日,OPPO正式發布K系列新品—— OPPO K11 。此次 K11 在中端手機市場長期被忽視的影像板塊發力,突破性地搭載索尼 IMX890 旗艦大底主攝,支持 OIS
Top 主站蜘蛛池模板: 清水河县| 任丘市| 台东县| 巴彦淖尔市| 广宗县| 昭觉县| 萍乡市| 安岳县| 安阳县| 出国| 河东区| 济宁市| 连城县| 中方县| 喀喇| 鲜城| 太康县| 宜兰市| 阜康市| 自治县| 毕节市| 开平市| 黔西| 潜山县| 麻栗坡县| 玉树县| 苏尼特左旗| 通化市| 图们市| 伊吾县| 体育| 澎湖县| 陇南市| 乌拉特中旗| 达孜县| 清新县| 南溪县| 海丰县| 涞水县| 高唐县| 桐梓县|