.NET 6.0 Web API项目中实现基于Token的身份验证

        本文以一个完整的示例,展示如何在.NET 6.0 Web API项目中实现基于Token的身份验证。这个例子包括了如何创建和验证JWT Token,以及如何在控制器中使用这些Token。

步骤 1: 创建Web API项目

首先,用Visual Studio 2022创建一个基于.NET6.0的 Web API项目。

步骤 2: 安装必要的NuGet包

安装Microsoft.AspNetCore.Authentication.JwtBearer包。

步骤 3: 配置身份验证服务

Program.cs中配置身份验证服务:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

// 添加身份验证服务
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidAudience = builder.Configuration["Jwt:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
        };
    });

// 添加授权服务
builder.Services.AddAuthorization();

var app = builder.Build();

// 使用身份验证和授权中间件
app.UseAuthentication();
app.UseAuthorization();

// 其他配置和路由设置

app.MapControllers();
app.Run();

步骤 4: 配置JWT设置

appsettings.json中配置JWT的相关设置:

{
  "Jwt": {
    "Issuer": "YourIssuer",
    "Audience": "YourAudience",
    "Key": "YourVerySecretKey"
  }
}

步骤 5: 创建Token生成控制器

创建一个控制器来生成Token:

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

[ApiController]
[Route("[controller]")]
public class AuthController : ControllerBase
{
    private readonly IConfiguration _configuration;

    public AuthController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    [HttpPost("login")]
    public IActionResult Login([FromBody] LoginModel model)
    {
        // 假设这里有一个验证逻辑,验证用户名和密码
        if (model.Username == "test" && model.Password == "password")
        {
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Name, model.Username)
                }),
                Expires = DateTime.UtcNow.AddMinutes(5),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])), SecurityAlgorithms.HmacSha256Signature),
                Issuer = _configuration["Jwt:Issuer"],
                Audience = _configuration["Jwt:Audience"]
            };
            var tokenHandler = new JwtSecurityTokenHandler();
            var token = tokenHandler.CreateToken(tokenDescriptor);
            return Ok(new { token = tokenHandler.WriteToken(token) });
        }
        else
        {
            return Unauthorized();
        }
    }
}

public class LoginModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

步骤 6: 创建受保护的控制器

创建一个控制器,只有持有有效Token的用户才能访问:

[ApiController]
[Route("[controller]")]
public class SecretController : ControllerBase
{
    [Authorize]
    [HttpGet]
    public IActionResult Get()
    {
        return Ok("This is a secret message.");
    }
}

步骤 7: 调用API

要调用API,首先需要获取Token。可以使用Postman或类似的工具发送一个POST请求到/Auth/login,并提供用户名和密码。然后,使用返回的Token在Authorization头部中发送一个GET请求到/Secret

POST /Auth/login HTTP/1.1
Host: localhost:5000
Content-Type: application/json

{
    "Username": "test",
    "Password": "password"
}
GET /Secret HTTP/1.1
Host: localhost:5000
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoidGVzdCIsImV4cCI6MTYxODI3MzYwNSwiaXNzIjoiWW91ciJJc3N1ZXIiLCJhdWQiOiJZb3VyQXV0aGVudGljYXRpb24ifQ.6_3QXxZ3VzZvjZ7RnV5NQz-7y_93fY0Y7Y6jV7-XzQ

确保在实际应用中实现安全的用户验证逻辑,并且不要在代码中硬编码敏感信息。此外,根据你的具体需求,可能还需要实现用户注册、Token刷新等功能

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: b'.net6.0 webapi jwt认证'是指使用jwt来对.net6.0 webapi进行认证。jwt即JSON Web Token,是一种用于身份验证及授权的开放标准。通过使用jwt,我们可以在客户端与服务器之间进行安全的数据传输,同时保证数据的完整性和安全性。在.net6.0 webapi使用jwt认证,可以有效防止未经授权的访问和攻击。 ### 回答2: 随着互联网技术的不断发展和普及,越来越多的企业和应用程序开始采用WebAPI服务来提供各种不同的功能和服务。随着数据和信息的不断增长,对于WebAPI的安全性和访问控制也变得越来越重要。这正是JWT(Json Web Token)认证的作用所在,它能够让开发者通过在网络上进行点对点的验证来保证信息的安全性。 在.NET 6.0 WebAPI,JTW验证是一个非常重要的功能,并且可以非常方便地进行集成。它允许通过对包含用户信息的令牌进行签名和加密来进行验证。开发人员只需要在Web API的配置文件(如Startup.cs)添加验证间件,并在控制器方法上添加[Authorize]注释。 以下是一个.NET 6.0 WebAPI JTW验证的示例代码: 1.在Startup.cs添加JTW验证间件 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Issuer"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["Jwt:Key"])) }; }); 2.在Controller的Action添加[Authorize]注释 [Authorize] [HttpGet] public async Task<IActionResult> Get() { // handle the request } 实现JTW验证对于WebAPI的安全性和稳定性来说都是非常重要的。.NET 6.0 WebAPI的特性和框架支持让JTW验证变得更加容易和便捷,同时还能够提供高效和可靠的API服务。 ### 回答3: 前言 随着移动互联网的快速发展和普及,用户对互联网产品和服务的需求不断增长,而其的数据安全问题也愈加突出。为了解决这一问题,许多网站和应用都开始采用JWT(JSON Web Token)来加强对接口的认证和授权。 在.NET 6.0WebAPI提供了方便的JWT验证机制,开发人员只需要使用一些简洁的代码,就能快速实现对应用程序的用户验证和授权管理。 如何使用JWT验证 首先,我们需要在.NET 6.0 WebAPI注册JWT验证服务,以此来实现对用户请求的认证和授权管理。具体的流程如下: 1. 在应用应用程序启动时,向容器注册JWT认证服务 首先通过 NuGet 安装 Microsoft.AspNetCore.Authentication.JwtBearer 包,然后在 Startup.cs 的 ConfigureServices 方法添加以下代码: services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "Issuer", ValidAudience = "Audience", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])) }; }); 2. 在相应的 API 控制器或操作方法应用 JWT 验证 然后可以在某些API控制器或操作方法上使用Authorize标记,来启用JWT验证。以下是一个使用Authorize标记的示例: [Authorize] [HttpGet] public async Task<IActionResult> GetUserInfo() { var user = await _userManager.GetUserAsync(User); return Ok(user); } 这些API控制器或操作方法,只有在用户已经成功通过JWT验证后,才会返回数据。否则,用户会收到HTTP 401 Unauthorized 的响应。 3.生成一个JSONWebToken 在用户登录或注册成功后,Web API 服务端需要生成一个 JSONWebToken(JWT)并将其返回给客户端。 下面的示例展示如何使用 SymmetricSecurityKey 和 TokenValidationParameters 来建立 JWT: private async Task<string> GenerateJWTToken(User user) { var jwtSettings = Configuration.GetSection("Jwt"); var key = Encoding.UTF8.GetBytes(jwtSettings["Key"]); var issuer = jwtSettings["Issuer"]; var audience = jwtSettings["Audience"]; var expirationTime = int.Parse(jwtSettings["ExpirationTime"]); var credentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256); var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, user.UserName), new Claim(JwtRegisteredClaimNames.Email, user.Email), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()) }; var tokenDescriptor = new JwtSecurityToken( issuer: issuer, audience: audience, claims: claims, expires: DateTime.UtcNow.AddMinutes(expirationTime), signingCredentials: credentials ); var tokenHandler = new JwtSecurityTokenHandler(); var encodedToken = tokenHandler.WriteToken(tokenDescriptor); return encodedToken; } 经过以上的代码实现,已经在.NET 6.0 WebAPI实现了基于JWT的用户认证和授权,使得开发人员能够快速、简单地实现用户数据的保护和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值