首页 > 其他分享 >.NET 5 Web API 中JWT详细教程:保护你的Web应用

.NET 5 Web API 中JWT详细教程:保护你的Web应用

时间:2023-10-14 15:01:08浏览次数:35  
标签:Web 令牌 验证 JWT API new

  1. 第一部分:

理解JWT

JSON Web Token(JWT)是一种在不同系统之间传递信息的安全方式。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部包含加密算法和令牌类型等信息,载荷包含用户的信息,签名用于验证令牌的真实性。

  1. 安装必要的包

在开始之前,我们需要在你的项目中添加一些必要的NuGet包来支持JWT。打开你的Visual Studio或者VS Code,在项目中运行以下命令:

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

这个包将帮助我们验证JWT令牌。

  1. 配置认证和授权

在Startup.cs文件的ConfigureServices方法中,添加以下代码来配置认证和授权:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = "your_issuer",
                ValidAudience = "your_audience",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
            };
        });

    services.AddAuthorization();
    services.AddControllers();
}

在这里,我们配置了JWT认证的参数,包括验证发行者、接受者、过期时间以及签名等信息。

  1. 生成JWT令牌

在你的登录逻辑中,当用户成功登录后,你需要生成一个JWT令牌并返回给客户端。在你的控制器或服务中,添加以下代码:

using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

public IActionResult Login(string username, string password)
{
    // 此处应该验证用户名和密码,为了简化教程,这里省略
    // 假设验证通过,生成JWT令牌

    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.UTF8.GetBytes("your_secret_key");
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new Claim[]
        {
            new Claim(ClaimTypes.Name, username),
            // 可以添加更多的用户信息
        }),
        Expires = DateTime.UtcNow.AddDays(1),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
    };
    var token = tokenHandler.CreateToken(tokenDescriptor);
    var tokenString = tokenHandler.WriteToken(token);

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

在这里,我们使用用户名和过期时间等信息创建了一个JWT令牌,并使用密钥进行签名。

  1. 保护API

现在,你的API已经可以生成JWT令牌了。为了保护你的API,你需要在需要验证用户身份的地方加上[Authorize]特性。例如:

[Authorize]
public IActionResult MyProtectedAction()
{
    // 只有经过验证的用户才能访问这个方法
    return Ok("You have accessed the protected action.");
}
  1. 测试API

现在你可以使用JWT令牌来测试你的API了。在请求的Header中添加Authorization字段,值为Bearer加上你生成的JWT令牌。如下所示:

GET /api/myprotectedaction HTTP/1.1
Host: localhost:5000
Authorization: Bearer your_generated_jwt_token

如果JWT令牌是有效的,你就可以成功访问受保护的API。

通过这篇简单的教程,你已经了解了如何在.NET 5 Web API中使用JWT来保护你的Web应用。JWT是一种灵活且安全的认证方式,它可以帮助你验证用户身份并保护你的API免受未授权访问。希望这个教程对你有所帮助,祝你在.NET Core Web开发中取得更多的成功!

标签:Web,令牌,验证,JWT,API,new
From: https://blog.51cto.com/u_16295743/7861675

相关文章

  • pycharm使用fastapi/uvicorn无法reload的问题
    省流pycharm的问题,建议控制台直接输uvicornmain:app--reload,而不是点击右上角的运行相关issuehttps://github.com/encode/uvicorn/issues/2000https://youtrack.jetbrains.com/issue/PY-60962/os.killpid-signal.CRTLCEVENT-ignored-when-running-python-program-from-Pych......
  • Android项目在 app 中通过 WebView 访问 url显示空白,使用浏览器可以打开,Android WebVi
    这是服务器证书校验WebView的安全问题服务器证书校验主要针对WebView的安全问题。在app中需要通过WebView访问url,因为服务器采用的自签名证书,而不是ca认证,使用WebView加载url的时候会显示为空白,出现无法加载网页的情况。使用ca认证的证书,在WebView则可以直接......
  • Vue3| 组合式 API 下的 子传父
    步骤:1.子组件内部通过emit方法触发事件①通过defineEmits编译器宏生成emit方法<script setup>const emit= defineEmits(['get-message'])  //get-message:可以触发的事件</script>②触发自定义事件,并传递参数<script setup>const emit= define......
  • Vue3| 组合式 API 下的父传子
    步骤:一、父给子传写死的值1.父组件中给子组件以添加属性的方式传值<script setup>import sonComVue from './son-com.vue'  //局部注册</script> <template><sonComVue message="黑马程序员"></sonComVue></template>2.子组件内部通过pro......
  • P7600 [APIO2021] 封闭道路
    P7600[APIO2021]封闭道路APIO从CF搬的题,模拟赛又搬了一遍/jy。首先考虑暴力怎么做,即做\(n\)次树形DP,设\(f_{i,0}\)表示强制删掉\((i,fa_i)\)这条边的最小代价,\(f_{i,1}\)表示强制保留\((i,fa_i)\)这条边的最小代价。对于一个点\(u\),在限制度数为\(x\)时,对于......
  • Vue3| 组合式API——computed 计算属性函数
    计算属性基本思想和Vue2的完全一致,组合式API下的计算属性只是修改了写法 核心步骤:1.导入computed函数<scriptsetup>import{computed}from'vue'</script>2.执行函数在回调参数中return基于响应式数据做计算的值,用变量接收<scriptsetup>import{com......
  • Vue3| 组合式API——reactive 和 ref 函数
    Vue中默认的数据并不是响应式的,如果我们希望数据是响应式的,则需要通过reactive或者ref进行处理。 reactive():作用:接收对象类型的数据作为参数传入并返回一个响应式对象reactive不能处理简单类型的数据 reactive使用步骤:1.在<scriptsetup>里,从vue包中导入......
  • 如何在ActionScript 3中将"Null"(一个真实的姓氏!)传递给SOAP Web服务
    内容来自DOC[https://q.houxu6.top/?s=如何在ActionScript3中将"Null"(一个真实的姓氏!)传递给SOAPWeb服务](https://q.houxu6.top/?s=如何在ActionScript3中将"Null"(一个真实的姓氏!)传递给SOAPWeb服务)我们有一位员工的姓氏是“Null”。当使用该姓氏作为搜索条件时,我们的员......
  • JS加密/解密之webpack打包代码逆向
    Webpack是一个强大的打包工具,能够将多个文件打包成一个或多个最终的文件。然而,将已经经过打包的代码还原回原始源代码并不是一件直接的事情,因为webpack打包的过程通常会对代码进行压缩、混淆和优化,丢失了部分变量名和代码结构的信息。因此,完全还原打包前的源码可能并不现实。但......
  • Apipost连接数据库详解
    Apipost提供了数据库连接功能,在接口调试时可以使用数据库获取入参或进行断言校验。目前的Apipost支持:Mysql、SQLSever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Redis、MongoDB8种数据库的连接操作新建数据库连接:在「项目设置」-「公共资源维护」-「连接数据库」中配置需......