LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#WebApi项目中实现Token验证

admin
2025年7月8日 14:19 本文热度 67
这里记录一下WebAPI 项目中实现 Token 验证,通常使用基于 JWT (JSON Web Token) 的身份验证。以下是完整的实现步骤:

1. 安装必要的 NuGet 包

首先,安装所需的 NuGet 包:

Install-Package System.IdentityModel.Tokens.Jwt -Version 5.2.2Install-Package Microsoft.Owin.Security.Jwt -Version 4.0.1Install-Package Microsoft.Owin.Host.SystemWeb -Version 4.0.1

2. 配置 OWIN Startup 类

添加一个 OWIN Startup 类来配置 JWT 认证:

using Microsoft.IdentityModel.Tokens;using Microsoft.Owin;using Microsoft.Owin.Security.Jwt;using Owin;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web;using System.Web.Configuration;
[assembly: OwinStartup(typeof(WebApi.Startup))]namespace WebApi{    public class Startup    {        public void Configuration(IAppBuilder app)        {            var issuer = WebConfigurationManager.AppSettings["JwtIssuer"];            var audience = WebConfigurationManager.AppSettings["JwtAudience"];            var secret = WebConfigurationManager.AppSettings["JwtSecret"];
            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
            app.UseJwtBearerAuthentication(                new JwtBearerAuthenticationOptions                {                    AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,                    TokenValidationParameters = new TokenValidationParameters()                    {                        ValidateIssuer = true,                        ValidateAudience = true,                        ValidateIssuerSigningKey = true,                        ValidIssuer = issuer,                        ValidAudience = audience,                        IssuerSigningKey = key,                        ClockSkew = TimeSpan.Zero                    }                });        }    }}

3. 添加配置到 Web.config

在 Web.config 的 <appSettings> 部分添加以下配置:

	<add key="JwtIssuer" value="TestApiServer"/>	<add key="JwtAudience" value="TestWebApp"/>	<add key="JwtSecret" value="bXlfdGVzdF9zZWNyZXRfa2V5XzEyMzQ1Njc4OTA"/>	<add key="JwtExpireMinutes" value="30"/>

4. 创建 Token 生成服务

创建一个服务类来生成 JWT 令牌:

using Microsoft.IdentityModel.Tokens;using System;using System.Collections.Generic;using System.IdentityModel.Tokens.Jwt;using System.Linq;using System.Security.Claims;using System.Text;using System.Web;using System.Web.Configuration;
namespace WebApi.Tools{    public class TokenService    {        public static string GenerateToken(string username)        {            var issuer = WebConfigurationManager.AppSettings["JwtIssuer"];            var audience = WebConfigurationManager.AppSettings["JwtAudience"];            var secret = WebConfigurationManager.AppSettings["JwtSecret"];            var expireMinutes = Convert.ToInt32(WebConfigurationManager.AppSettings["JwtExpireMinutes"]);
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
            var claims = new[]            {            new Claim(JwtRegisteredClaimNames.Sub, username),            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),            new Claim(ClaimTypes.Name, username)            // 可以添加更多声明(claims)如角色等        };
            var token = new JwtSecurityToken(                issuer: issuer,                audience: audience,                claims: claims,                expires: DateTime.Now.AddMinutes(expireMinutes),                signingCredentials: credentials            );
            return new JwtSecurityTokenHandler().WriteToken(token);        }    }}

5. 创建登录 API 控制器

创建一个控制器来处理用户登录并返回 Token:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Http;using WebApi.Tools;
namespace WebApi.Controllers{    public class AccountController : ApiController    {        [HttpPost]        [Route("api/account/login")]        public IHttpActionResult Login(LoginModel model)        {            // 这里应该验证用户名和密码            // 示例代码,实际应用中应该从数据库验证            if (model.Username == "admin" && model.Password == "password")            {                var token = TokenService.GenerateToken(model.Username);                return Ok(new { Token = token });            }
            return Unauthorized();        }    }
    public class LoginModel    {        public string Username { getset; }        public string Password { getset; }    }}

6. 保护需要认证的 API

在需要认证的控制器或方法上添加 [Authorize] 属性:

7. 测试 API

1.直接调用会提示已拒绝为此请求授权
2.调用登录 API 获取 Token:
3.然后使用返回的 Token 访问受保护的 API:
Headers: Authorization: Bearer your_token_here
阅读原文:https://mp.weixin.qq.com/s/wV-42HN7nugHLxXFLfEtJQ


该文章在 2025/7/8 16:26:44 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved