当前位置:首页 » 《资源分享》 » 正文

.Net WebApi 中的Token/参数校验:你真的会了吗?

14 人参与  2024年10月29日 08:01  分类 : 《资源分享》  评论

点击全文阅读


?关注墨瑾轩,带你探索编程的奥秘!?
?超萌技术攻略,轻松晋级编程高手?
?技术宝库已备好,就等你来挖掘?
?订阅墨瑾轩,智趣学习不孤单?
?即刻启航,编程之旅更有趣?

在这里插入图片描述在这里插入图片描述

.Net WebApi 中的Token/参数校验:你真的会了吗?


引言

在现代Web应用开发中,安全性和可靠性是至关重要的。当我们谈论WebAPI时,一个常见的需求是对请求进行身份验证,特别是通过Token来验证用户的身份。同时,确保传入的参数是有效和安全的也是至关重要的。这篇文章将深入探讨在.Net WebApi中实现Token和参数校验的几种方法,并提供详细的代码示例,帮助你更好地理解并实施这些技术。

正文
为什么需要校验Token/参数?

在WebAPI中,每一个请求都应该被视为潜在的安全威胁。通过校验Token,我们可以确认请求的来源是可信的,并且请求者的身份已被验证。同样,校验参数可以防止恶意的数据注入,保证系统的稳定性和安全性。

如何在校验Token?

在.Net WebApi中,有多种方法可以用来校验Token。我们将通过几个具体的例子来探索这些方法。

1. 使用OAuth2和JWT

OAuth2是一种授权协议,而JWT(JSON Web Tokens)是一种紧凑的、安全的方式来在各方之间传输信息作为JSON对象。在WebApi中,可以通过以下步骤来实现基于JWT的Token校验:

// 添加必要的NuGet包// Install-Package Microsoft.AspNet.WebApi.Owin.Security.Jwt// Install-Package Microsoft.Owin.Security.Jwtusing Owin;using Microsoft.Owin;using Microsoft.Owin.Security.OAuth;using System.Web.Http;public static class WebApiConfig {    public static void Register(HttpConfiguration config) {        var oAuthServerOptions = new OAuthAuthorizationServerOptions {            AllowInsecureClient = true,            TokenEndpointPath = new PathString("/token"),            AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),            Provider = new SimpleProvider()        };        app.UseOAuthBearerTokens(oAuthServerOptions);        // 其他WebApi配置...    }    public class SimpleProvider : OAuthAuthorizationServerProvider {        public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) {            context.Validated();        }        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) {            context.OwinContext.Response.Body = new StringContent(                $"access_token={context.CreateAccessToken().ToString()}&token_type=bearer");            context.RequestCompleted();        }    }}

代码解析

使用 OwinOAuthAuthorizationServerOptions 来配置OAuth服务。SimpleProvider 类继承自 OAuthAuthorizationServerProvider 并重写了 ValidateClientAuthenticationGrantResourceOwnerCredentials 方法,用于验证客户端身份和发放访问令牌。
2. 自定义过滤器

除了使用OAuth外,我们还可以创建自定义的过滤器来校验Token。这种方法更灵活,可以根据特定需求进行调整。

using System.Net.Http;using System.Threading.Tasks;using System.Web.Http.Filters;public class TokenValidationFilter : AuthorizationFilterAttribute {    public override void OnAuthorization(AuthorizationContext filterContext) {        var token = filterContext.RequestContext.HttpContext.Request.Headers["Authorization"];        if (string.IsNullOrEmpty(token)) {            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Unauthorized));        }                // 进行Token有效性检查        if (!IsValidToken(token)) {            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Forbidden));        }    }    private bool IsValidToken(string token) {        // 这里应实现Token校验逻辑        return true; // 示例中假定Token总是有效的    }}public class ValuesController : ApiController {    [HttpGet]    [TokenValidationFilter]    public IHttpActionResult Get() {        return Ok(new { message = "Access granted." });    }}

代码解析

定义了一个名为 TokenValidationFilter 的自定义过滤器。在 OnAuthorization 方法中检查请求头中的 Authorization 字段。如果Token无效,则返回HTTP 403 Forbidden。如果Token不存在,则返回HTTP 401 Unauthorized。
如何校验参数?

校验参数通常是确保API安全的第一步。下面是一些常用的校验方法:

1. 使用DataAnnotations

.NET Framework 提供了 DataAnnotations 来帮助校验模型。

public class UserRequest {    [Required(ErrorMessage = "The Name field is required.")]    [StringLength(100, ErrorMessage = "The Name must be at least 6 characters long.", MinimumLength = 6)]    public string Name { get; set; }    [RegularExpression(@"^[\w\.-]+@[\w\.-]+\.\w+$", ErrorMessage = "Invalid email format.")]    public string Email { get; set; }}public class AccountController : ApiController {    [HttpPost]    public HttpResponseMessage Post([FromBody]UserRequest user) {        if (!ModelState.IsValid) {            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);        }                // 处理逻辑...        return Request.CreateResponse(HttpStatusCode.Created);    }}

代码解析

使用 [Required][StringLength][RegularExpression] 属性来校验 UserRequest 中的属性。如果 ModelState 不是有效的,则返回HTTP 400 Bad Request。
2. 自定义校验逻辑

对于更复杂的校验逻辑,可以编写自定义的校验方法。

public class AccountController : ApiController {    [HttpPost]    public HttpResponseMessage Post([FromBody]UserRequest user) {        if (user.Name.Length < 6 || !IsValidEmail(user.Email)) {            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid data.");        }        // 处理逻辑...        return Request.CreateResponse(HttpStatusCode.Created);    }    private bool IsValidEmail(string email) {        try {            var addr = new System.Net.Mail.MailAddress(email);            return addr.Address == email;        } catch {            return false;        }    }}

代码解析

自定义了 IsValidEmail 方法来校验邮箱地址的有效性。如果名称长度小于6或者邮箱地址无效,则返回HTTP 400 Bad Request。
结论

通过本文的介绍,你应该对在.Net WebApi中实现Token和参数校验有了更深的理解。无论是使用OAuth和JWT来校验Token,还是通过自定义过滤器和DataAnnotations来校验参数,都能有效地提高WebAPI的安全性。希望这些技巧能够帮助你在实际项目中更好地保护你的API。记住,安全总是在变化,不断学习最新的安全实践是非常重要的!


点击全文阅读


本文链接:http://zhangshiyu.com/post/179298.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 盛景太匆匆宁若曦_盛景太匆匆宁若曦
  • 当爱恨如潮生免费在线(乔若梨裴叙白)全书免费_(乔若梨裴叙白)当爱恨如潮生免费在线后续(乔若梨裴叙白)
  • 「受虐三年后,未婚夫和哥哥都哭着求我原谅」章节多结局预体验‌_「傅云铃傅琛云柔」全文免费无弹窗阅读_笔趣阁
  • 全书浏览与抽签选中的女佛子订婚后,抛弃我的青梅悔疯了(苏凛风乔念柔祁逸舟)_与抽签选中的女佛子订婚后,抛弃我的青梅悔疯了(苏凛风乔念柔祁逸舟)全书结局
  • 盛景太匆匆+后续+结局番外(宁若曦沈砚舟)列表_盛景太匆匆宁若曦沈砚舟+后续+结局番外
  • 好看的宁若曦沈砚舟赏析_宁若曦沈砚舟赏析
  • (番外)+(全书)昨夜雨疏风骤+后续+结局(裴轻语温昼川)全书在线_昨夜雨疏风骤+后续+结局免费列表_笔趣阁(裴轻语温昼川)
  • 昨夜雨疏风骤+后续+结局(裴轻语温昼川)列表_昨夜雨疏风骤+后续+结局
  • 等一场汹涌的暗恋一口气读完(江芷若林璟知)全书免费_(江芷若林璟知)等一场汹涌的暗恋一口气读完后续(江芷若林璟知)
  • 完结文余生再无我们列表_完结文余生再无我们(林知允许佩柔顾沉舟)
  • 我和老公结婚后的一个月,他***了版_我和老公结婚后的一个月,他***了版
  • 全书浏览却把青梅嗅前文+后续(孟挽月宋景行黎欢欢)_却把青梅嗅前文+后续(孟挽月宋景行黎欢欢)全书结局

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1