首页 > 其他分享 >JWT

JWT

时间:2023-08-25 21:24:09浏览次数:35  
标签:Bearer 登录 JWT Token token new

.Net 6 WebAPI 使用JWT进行 授权认证

1、安装组件(Nuget)

Microsoft.AspNetCore.Authentication.JwtBearer

 

2、Program.cs 配置

//授权认证(使用JWT)
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o =>
{
    // 私钥
    var secretByte = Encoding.UTF8.GetBytes("kdsfldsflkdslkflkdsflkdslfdslkflk");
    o.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        // 验证发布者
        ValidateIssuer = true,
        // 发布者信息
        ValidIssuer = "BeiJingBW",

        // 验证接收者
        ValidateAudience = true,
        // 接收者
        ValidAudience = "BeiJingBW",

        // 验证是否过期
        ValidateLifetime = true,

        // 验证私钥
        IssuerSigningKey = new SymmetricSecurityKey(secretByte)

    };
});

// 配置Swagger
builder.Services.AddSwaggerGen(o =>
{
    // 显示 授权信息
    o.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
    {
        Description = "添加JWT授权Token:Bearer Token值",
        Name = "Authorization",
        In = Microsoft.OpenApi.Models.ParameterLocation.Header,
        Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
        BearerFormat = "JWT",
        Scheme = "Bearer"
    });
    o.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "Bearer"
                }
            },
            new string[]
            {

            }
        }
    });
});


// 鉴权
app.UseAuthentication();

app.UseAuthorization();

3、控制器加授权认证 [Authorize],登录判定方法设置为匿名可访问 [AllowAnonymous]

[Route("api/[controller]/[action]")] // 路由配置
[ApiController]
[Authorize]
public class ECommerceController : ControllerBase
{
    [HttpGet]
    [AllowAnonymous]
    public IActionResult Login(string? loginName, string? password)
    {
        // 登录判定
    }
}

4、控制器中,编写生成 JWT Token 方法

/// <summary>
/// 生成 JWT Token(令牌)
/// </summary>
/// <returns></returns>
private string CreateTokenString()
{
    //私钥
    var secretByte = Encoding.UTF8.GetBytes("kdsfldsflkdslkflkdsflkdslfdslkflk");
    // 非对称加密
    var signingKey = new SymmetricSecurityKey(secretByte);
    // 使用256 生成数字签名
    var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
    // 生成Token
    var token = new JwtSecurityToken(
        issuer: "BeiJingBW",
        audience: "BeiJingBW",
        expires: DateTime.Now.AddDays(1), // 一天后过期
        signingCredentials: signingCredentials
    );
    // 生成token 字符串
    var strToken = new JwtSecurityTokenHandler().WriteToken(token);
    return strToken;
}

5、登录方法中,登录成功要生成 JWT Token,返回给前端

/// <summary>
/// 登录判定(可以匿名,也就是授权对它没有作业)
/// </summary>
/// <param name="loginName">登录名</param>
/// <param name="password">密码</param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public IActionResult Login(string? loginName, string? password)
{
    try
    {
        // 登录判定,登录成功
        // 登录成功生成JWT Token
        string strToken = this.CreateTokenString();
    }
    // 返回前端信息加Jwt token信息
    return Ok(new
              {
                  user = user,
                  token = strToken
              });
}
catch (Exception ex)
{
    // 错误日志
    logger.LogError("登录判定出错!" + ex.Message);
    throw;
}
}

6、Swagger中调试

  1. 运行登录方法,复制生成的 JWT token字符串。
  2. 点击 名上角 “Authorize” 按钮,在文本框中输入:Bearer token值,格式如:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODYyOTc3NTgsImlzcyI6IkJlaUppbmdCVyIsImF1ZCI6IkJlaUppbmdCVyJ9.hb9kZv_qj8Eosgnw6ayTf6nA2-07ym6p6xbVS237aI8,点击“Authorize”。
  3. 之后运行Swagger中的其它方法,它会自动加载 JWT token,方法正常运行。如果没有第2部,运行方法会提示无授权的错误。

7、前端Vue配置

7.1 main.js 配置

// 数据访问
import axios from 'axios'
// 添加JWT token信息
axios.defaults.headers.common["Authorization"] = "Bearer " + window.localStorage.getItem("token");

7.2 登录方法,成功登录后,写token信息到本地

methods:{
    // 登录
    login() {
        // 登录判定
        // 登录成功,写JWT的 token到本地
        window.localStorage.setItem("token", res.data.token);
        // 数据提交后端要加入新的Token值
        this.axios.defaults.headers.common["Authorization"] =
            "Bearer " + res.data.token;
    }
}

标签:Bearer,登录,JWT,Token,token,new
From: https://www.cnblogs.com/Beijingqq/p/17657987.html

相关文章

  • .NET6 设置JWT
    一、Net6环境下的.netcore项目里如何使用JWT。第一步,在Nuget引入JWT、Microsoft.AspNetCore.Authentication.JwtBearer这两个NuGet包 第二步,在appsettings.json配置相关配置 第三步,在Program.cs中注册 第四步,定义注册存入TokenHelper类,方便对J......
  • .NET 6 JWT验证
    一、下载JWT包二、配置文件appsettings.json"Auth":{"SecretKey": "al45jgioasdjgoije8343050945049jg3409jgfoksdjfglaskdjfaiosdjfasdfsd",//私钥长度16位以上"Issuer":"www.aaabb.com",//发行人"Aud......
  • 深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计
    什么是认证和授权?如何设计一个权限认证框架?认证和授权是安全验证中的两个重要概念。认证是确认身份的过程,用于建立双方之间的信任关系。只有在认证成功的情况下,双方才可以进行后续的授权操作。授权则是在认证的基础上,确定用户或系统对资源的访问权限。在设计一个权限认证框架时,......
  • JSON Web Tokens(JWT)
    JSONWebTokens(JWT)是一种用于身份验证和授权的开放标准。它可以在客户端和服务器之间安全地传输信息,并且非常适合以下场景:身份验证:JWT可以用于验证用户的身份。当用户登录后,服务器可以生成一个JWT并将其返回给客户端。客户端可以在后续的请求中将JWT作为身份验证凭证发送给服务器......
  • token和jwt
    1. 简介  105使用Token存储用户信息,认证用户。 Token是一个访问系统的令牌(字符串)。Token 是在服务端产生的。前端可以使用用户名/密码向服务端请求认证(登录),服务端认证成功,服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的身份。服务器端在处理......
  • C#利用Refit实现JWT自动续期
    前言笔者之前开发过一套C/S架构的桌面应用,采用了JWT作为用户的登录认证和授权。遇到的唯一问题就是JWT过期了该怎么办?设想当一个用户正在进行业务操作,突然因为Token过期失效,莫名其妙地跳转到登录界面,是不是一件很无语的事。当然笔者也曾想过:为何不把JWT的有效期尽量设长些(假设24......
  • 基于 JWT + Refresh Token 的用户认证实践(转载)
    HTTP是一个无状态的协议,一次请求结束后,下次在发送服务器就不知道这个请求是谁发来的了(同一个IP不代表同一个用户),在Web应用中,用户的认证和鉴权是非常重要的一环,实践中有多种可用方案,并且各有千秋。 基于Session的会话管理在Web应用发展的初期,大部分采用基于Session......
  • SSO单点登录(SpringSecurity OAuth2.0 redis mysql jwt)
    SSO单点登录什么是单点登录SSO(SingleSignOn)在多系统架构中,用户只需要一次登录就可以无需再次登录(比如你在打开淘宝之后点击里边的天猫)在以前我们的单系统中,用户如果登录多个服务需要多次登录,实现单点登录之后,可以实现一次登录,全部登录!一次注销,全部注销原理图用户......
  • .NET Core6.0配置JWT
    环境 ASP.NETCoreWebAPIJWT的一些讲解和与Session的区别俺就不多说了可以去官方文档了解一下直接上代码简单粗暴(以下操作都是在ASP.NETCoreWebAPI进行操作)第一步:引入一个NuGet包  根据自己.NET版本选择对应的版本号 第二步:在appsettings.json配置一些信息"A......
  • 浅谈自己理解的JWT
    1、什么是JWTJWT是由三部分组成,包括头部(Header)、有效载荷(ayload)、签名(Signature)1.1头部是配置信息一般由两部分组成(I.令牌的类型,II.使用的签名算法)1.2有效载荷部分首先包含一些非敏感的数据,其次要包含过期时间(设置有效期)1.3签名部分,是对前两部分......