成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JWT身份驗(yàn)證:.NET Core后臺(tái)與Vue.js前端實(shí)現(xiàn)詳解

開發(fā) 后端
JWT(JSON Web Token)是一種開放標(biāo)準(zhǔn)(RFC 7519),用于在各方之間傳輸信息的輕量級(jí)、自包含的標(biāo)準(zhǔn)。JWT由三部分組成:頭部(Header)、載荷(Payload)、簽名(Signature)。它通常被用于身份驗(yàn)證和信息傳遞。

概述:JSON Web Token(JWT)是一種用于安全傳輸信息的標(biāo)準(zhǔn)。主要用于身份驗(yàn)證和信息傳遞,通過頭部、載荷和簽名構(gòu)成。在.NET Core中,可通過Microsoft.AspNetCore.Authentication.JwtBearer實(shí)現(xiàn)后臺(tái)服務(wù),提供生成、刷新和驗(yàn)證Token的接口。前端使用Vue.js結(jié)合axios發(fā)送請(qǐng)求,通過攔截器實(shí)現(xiàn)自動(dòng)刷新Token,確保安全可靠的身份驗(yàn)證和信息傳遞。

什么是JWT?

JWT(JSON Web Token)是一種開放標(biāo)準(zhǔn)(RFC 7519),用于在各方之間傳輸信息的輕量級(jí)、自包含的標(biāo)準(zhǔn)。JWT由三部分組成:頭部(Header)、載荷(Payload)、簽名(Signature)。它通常被用于身份驗(yàn)證和信息傳遞。

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

JWT 主要用途

JWT主要用于在網(wǎng)絡(luò)應(yīng)用中安全地傳遞聲明。常見用途包括身份認(rèn)證和信息交換。生成的JWT可以被驗(yàn)證,信任,并且不易被篡改。

JWT 的原理

JWT的原理基于對(duì)稱或非對(duì)稱加密。生成JWT時(shí),使用密鑰對(duì)頭部和載荷進(jìn)行簽名。驗(yàn)證時(shí),接收到的JWT通過相同的過程重新計(jì)算簽名,并與接收到的簽名進(jìn)行比較。由于簽名使用密鑰生成,只有擁有密鑰的一方才能生成有效的簽名。

JWT 應(yīng)用場景

  • 身份認(rèn)證:用戶登錄后,服務(wù)器生成JWT,并在每個(gè)后續(xù)請(qǐng)求中攜帶JWT,以驗(yàn)證用戶身份。
  • 信息傳遞:JWT可以包含任意信息,用于在不同系統(tǒng)之間安全傳遞信息,如用戶權(quán)限、配置信息等。

JWT 有哪幾種傳輸方式

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

在 .NET Core 中使用 JWT

后臺(tái)服務(wù)實(shí)現(xiàn)

安裝 NuGet 包:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

配置 JWT 服務(wù):

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"))
    };
});

添加授權(quán)中間件:

app.UseAuthentication();

生成 Token 接口:

[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)
    {
        // 驗(yàn)證用戶名和密碼,生成 ClaimsIdentity
        ClaimsIdentity identity = ...

        // 生成 JWT
        string token = _jwtService.GenerateToken(identity);

        return Ok(new { Token = token });
    }
}

刷新 Token 接口:

[Authorize]
[HttpPost("refresh")]
public IActionResult RefreshToken()
{
    // 從當(dāng)前用戶的 Claims 中獲取信息,生成新的 Token
    ClaimsIdentity identity = ...

    string newToken = _jwtService.GenerateToken(identity);

    return Ok(new { Token = newToken });
}

驗(yàn)證 Token 接口:

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

前端 VUE 實(shí)現(xiàn)

安裝 axios:

npm install axios

在 Vue 組件中使用 JWT:

import axios from 'axios';

// 每次請(qǐng)求前檢查 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;
});

// 刷新 Token
async 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);
}

// 發(fā)送包含 JWT 的請(qǐng)求
async function sendRequest() {
    try {
        const response = await axios.get('api/auth/protected');
        console.log(response.data);
    } catch (error) {
        console.error('Request failed:', error);
    }
}

// 解析 JWT
function 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);
}

以上是一個(gè)簡單的示例,實(shí)際應(yīng)用中需要考慮更多的安全性和錯(cuò)誤處理。確保在生產(chǎn)環(huán)境中使用 HTTPS 以保障數(shù)據(jù)傳輸?shù)陌踩浴?/span>

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2024-02-23 07:18:40

JWTWeb應(yīng)用程序

2009-07-29 12:55:44

ASP.NET身份驗(yàn)證

2021-02-17 08:51:55

cookie身份驗(yàn)證

2024-05-06 00:00:00

ASP.NET授權(quán)機(jī)制

2023-04-18 08:00:35

DexKubernetes身份驗(yàn)證

2024-02-02 08:56:54

2024-08-07 12:14:39

2024-04-01 00:00:00

信息JWT密碼

2009-07-29 16:47:40

ASP.NET表單身份

2024-03-08 08:37:20

Vue 3VueAxios

2024-09-09 07:37:51

AspJWT權(quán)限

2011-05-23 10:37:03

2020-08-04 08:04:46

VueAPI驗(yàn)證

2017-07-04 17:55:37

Vue.js插件開發(fā)

2012-10-23 16:12:35

2010-09-06 11:24:47

CHAP驗(yàn)證PPP身份驗(yàn)證

2016-11-01 19:10:33

vue.js前端前端框架

2024-05-13 08:04:26

Vue.jsWeb應(yīng)用程序

2012-04-10 09:36:58

2022-04-14 09:35:03

Vue.js設(shè)計(jì)Reflect
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲黄色在线免费观看 | 国产亚洲欧美日韩精品一区二区三区 | 我爱操 | 麻豆一区二区三区精品视频 | 免费不卡一区 | 久久免费精品 | 中文字幕日韩三级 | 成人亚洲精品 | 可以在线观看av的网站 | 色综合视频| 久久精品视频一区二区三区 | 亚洲一区免费在线 | 国产成人免费在线 | 国产激情一区二区三区 | 黄在线免费观看 | 噜噜噜色网 | 亚洲欧美一区二区三区国产精品 | 久草热视频 | 精品国产乱码久久久久久88av | 人人爽日日躁夜夜躁尤物 | 日一区二区 | 福利电影在线 | 天天干天天插 | 成人av一区 | 欧美区在线 | 国产精品欧美一区喷水 | 久久久久久国产精品mv | 欧美日韩在线成人 | 日韩欧美中文 | 欧美日韩在线一区二区三区 | 香蕉91| 欧美最猛黑人 | 天堂网中文字幕在线观看 | 久久国内精品 | 国产99热 | www.久| 成人h视频在线 | 天天综合成人网 | 欧美在线综合 | 欧美一级黑人aaaaaaa做受 | 在线观看黄免费 |