ASP.NET Core MVC 使用 JWT 的示例

  1. 创建一个 ASP.NET Core MVC 项目。

  2. 添加 NuGet 包:

    • Microsoft.AspNetCore.Authentication.JwtBearer:用于支持 JWT 的身份验证。
    • System.IdentityModel.Tokens.Jwt:用于生成和验证 JWT。
  3. Startup.cs 文件中做如下修改:

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

public class Startup
{
    // 省略其他代码

    public void ConfigureServices(IServiceCollection services)
    {
        // 省略其他服务配置
        
        // 配置身份验证服务
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        }).AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidIssuer = "your_issuer",
                ValidAudience = "your_audience",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
            };
        });

        // 省略其他代码
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 省略其他配置
        
        app.UseRouting();

        // 启用身份验证中间件
        app.UseAuthentication();
        app.UseAuthorization();

        // 省略其他配置
    }
}

请注意,在上述代码中,您需要将以下参数替换为实际的值:

  • "your_issuer":发行者的标识符。
  • "your_audience":接收者的标识符。
  • "your_secret_key":用于签名和验证令牌的密钥。
  1. 创建一个控制器,并添加以下代码:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

public class HomeController : Controller
{
    [Authorize]
    public IActionResult Index()
    {
        // 从用户声明中获取用户名
        string username = User.Identity.Name;

        return View();
    }

    [Authorize(Roles = "Admin")]
    public IActionResult AdminOnlyAction()
    {
        return View();
    }

    [HttpPost("token")]
    public IActionResult GenerateToken()
    {
        // 在用户登录成功后生成并返回 JWT

        var claims = new[]
        {
            new Claim(ClaimTypes.Name, "john.doe@example.com"),
            new Claim(ClaimTypes.Role, "Admin")
        };

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"));
        var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
        var expires = DateTime.Now.AddDays(1);

        var token = new JwtSecurityToken(
            issuer: "your_issuer",
            audience: "your_audience",
            claims: claims,
            expires: expires,
            signingCredentials: credentials
        );

        string accessToken = new JwtSecurityTokenHandler().WriteToken(token);

        return Ok(new { AccessToken = accessToken });
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值