当前位置:首页 > 科技  > 软件

JWT身份验证:.NET Core后台与Vue.js前端实现详解

来源: 责编: 时间:2024-05-17 17:47:48 114观看
导读概述:JSON Web Token(JWT)是一种用于安全传输信息的标准。主要用于身份验证和信息传递,通过头部、载荷和签名构成。在.NET Core中,可通过Microsoft.AspNetCore.Authentication.JwtBearer实现后台服务,提供生成、刷新和验证T

jSC28资讯网——每日最新资讯28at.com

概述:JSON Web Token(JWT)是一种用于安全传输信息的标准。主要用于身份验证和信息传递,通过头部、载荷和签名构成。在.NET Core中,可通过Microsoft.AspNetCore.Authentication.JwtBearer实现后台服务,提供生成、刷新和验证Token的接口。前端使用Vue.js结合axios发送请求,通过拦截器实现自动刷新Token,确保安全可靠的身份验证和信息传递。jSC28资讯网——每日最新资讯28at.com

什么是JWT?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间传输信息的轻量级、自包含的标准。JWT由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)。它通常被用于身份验证和信息传递。jSC28资讯网——每日最新资讯28at.com

  • 头部(Header):声明类型和使用的签名算法。
{ "alg": "HS256", "typ": "JWT" }
  • 载荷(Payload):包含声明(claims),是关于实体(通常是用户)和其他数据的声明。
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
  • 签名(Signature):使用密钥对头部和载荷进行签名,以确保数据的完整性和来源验证。

JWT 主要用途

JWT主要用于在网络应用中安全地传递声明。常见用途包括身份认证和信息交换。生成的JWT可以被验证,信任,并且不易被篡改。jSC28资讯网——每日最新资讯28at.com

JWT 的原理

JWT的原理基于对称或非对称加密。生成JWT时,使用密钥对头部和载荷进行签名。验证时,接收到的JWT通过相同的过程重新计算签名,并与接收到的签名进行比较。由于签名使用密钥生成,只有拥有密钥的一方才能生成有效的签名。jSC28资讯网——每日最新资讯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 包:jSC28资讯网——每日最新资讯28at.com

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

配置 JWT 服务:jSC28资讯网——每日最新资讯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"))    };});

添加授权中间件:jSC28资讯网——每日最新资讯28at.com

app.UseAuthentication();

生成 Token 接口:jSC28资讯网——每日最新资讯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 接口:jSC28资讯网——每日最新资讯28at.com

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

验证 Token 接口:jSC28资讯网——每日最新资讯28at.com

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

前端 VUE 实现

安装 axios:jSC28资讯网——每日最新资讯28at.com

npm install axios

在 Vue 组件中使用 JWT:jSC28资讯网——每日最新资讯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 以保障数据传输的安全性。jSC28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-88929-0.htmlJWT身份验证:.NET Core后台与Vue.js前端实现详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 在.Net开发中使用Math.NET Filtering开源库实现巴特沃斯滤波器

下一篇: 用Rust进行TUI编程:Cursive库

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈

    前言在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。注解
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • JVM优化:实战OutOfMemoryError异常

    JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 微博大门常打开,迎接海外画师漂洋东渡

    微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事&ldquo;起猛了,我能看得懂日语了&rdquo;。&ldquo;为什么日本人说话我能听懂?&rdquo;&ldquo;中文不像中文,日语不像日语,但是我竟然看懂了&rdquo;&hellip;&hell
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
Top