当前位置: 首页 > web >正文

C# OAuth2密码模式接口鉴权

项目场景:

asp.netFramework webApi
C# OAuth2密码模式接口鉴权


1.安装必要 NuGet 包

Install-Package Microsoft.Owin.Security.OAuth
Install-Package Microsoft.Owin.Host.SystemWeb
Install-Package Microsoft.AspNet.WebApi.Owin

2. 配置 OAuth 授权服务器

public class CustomOAuthProvider : OAuthAuthorizationServerProvider
{// 验证客户端(可在此处校验 client_id/client_secret)public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context){context.Validated();return Task.CompletedTask;}// 密码模式核心:验证用户名密码public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context){// 1. 验证用户凭证(实际项目中替换为数据库验证)if (!ValidateUser(context.UserName, context.Password)){context.SetError("invalid_grant", "用户名或密码错误");return;}// 2. 创建身份声明var identity = new ClaimsIdentity(context.Options.AuthenticationType);identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));identity.AddClaim(new Claim(ClaimTypes.Role, "User")); // 添加角色// 3. 创建附加数据(可选)var props = new AuthenticationProperties(new Dictionary<string, string>{{ "client_id", context.ClientId ?? string.Empty }});// 4. 生成令牌var ticket = new AuthenticationTicket(identity, props);context.Validated(ticket);}private bool ValidateUser(string username, string password){// 实际项目:此处查询数据库验证用户return username == "admin" && password == "123456"; // 示例硬编码}
}

3. 配置 OWIN Startup 类 (Startup.cs)

[assembly: OwinStartup(typeof(YourNamespace.Startup))]
namespace YourNamespace
{public class Startup{public void Configuration(IAppBuilder app){// 配置 WebAPIvar config = new HttpConfiguration();WebApiConfig.Register(config);// 配置 OAuth 服务器ConfigureOAuth(app);// 启用 WebAPIapp.UseWebApi(config);}public void ConfigureOAuth(IAppBuilder app){var oAuthOptions = new OAuthAuthorizationServerOptions{AllowInsecureHttp = true, // 开发环境允许 HTTPTokenEndpointPath = new PathString("/token"), // 令牌端点地址AccessTokenExpireTimeSpan = TimeSpan.FromHours(1), // 令牌有效期Provider = new CustomOAuthProvider() // 使用自定义提供程序};// 启用授权服务器app.UseOAuthAuthorizationServer(oAuthOptions);// 启用 Bearer Token 认证app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());}}
}

4. 保护 API 控制器

[Authorize] // 要求认证
[RoutePrefix("api/protected")]
public class ProtectedController : ApiController
{[HttpGet][Route("data")]public IHttpActionResult GetSecureData(){var userName = User.Identity.Name; // 获取当前用户return Ok($"安全数据,用户: {userName}");}
}

http://www.xdnf.cn/news/13591.html

相关文章:

  • 前端面试题之将自定义数据结构转化成DOM元素
  • 面壁智能MiniCPM4.0技术架构与应用场景
  • 雷卯针对易百纳G16DV5-IPC-38E型主控板防雷防静电方案
  • Sentinel介绍
  • java大文件分段下载
  • (ML-Agents) 是一个开源项目,它使游戏和模拟能够作为使用深度强化学习和模仿学习训练智能代理的环境
  • Java SE - 类和对象入门指南
  • MCP 协议系列序言篇:开启 AI 应用融合新时代的钥匙
  • 爬取汽车之家评论并利用NLP进行关键词提取
  • 2025.6.11总结
  • RuoYi 前后端分离项目 Linux 部署全指南
  • 第四章无线通信网
  • 安卓15开机启动Fallbackhome去除--成果展示
  • 看板中如何管理技术债务
  • 智慧厕所系统:革新公共卫生设施的新势力
  • 以 OCP 认证培训为翼,翱翔数据库广阔天空
  • 基础篇:5. HTTP/2 协议深度解析
  • 青藏高原地区多源融合降水数据(1998-2017)
  • C#使用MindFusion.Diagramming框架绘制流程图(3):加权图的最短路径算法
  • Web APIS Day03
  • 全连接层和卷积层
  • 辗转相除法(求最大公约数)
  • Boost.Interprocess 介绍与使用
  • 2025年高考志愿填报指导资料
  • shap可解释恶意流量检测
  • Zab协议剖析:崩溃恢复与顺序原子广播
  • JS手写代码篇---手写深拷贝
  • 万字深度解析注意力机制全景:掌握Transformer核心驱动力​
  • PHP性能提升方案
  • Redis的主从复制底层实现