asp.net-web-api – 自定义身份验证asp.net核心web api
我想使用一个秘密密钥(api密钥)授权asp.net核心web api.密钥将在Authorization标头中传递,如下所示,
ex. Authorization keytype;h43484344343bbhfdjfdfhj34343 我想编写一个中间件来从请求头读取此密钥,并调用内部api来验证密钥. 在web api中,我们可以编写一个消息处理程序来执行此操作,但我是asp.net核心的新手.我看到了很多样本??,但他们正在使用内置的JWT令牌认证.但是我想使用自己的密钥并解密此密钥并对数据库条目进行验证. 任何人都可以建议一些代码示例如何做到这一点? 解决方法
我在使用asp核心1.1的解决方案中使用了这种方法.首先定义一个自定义方案:
public static class Authentication { public const string Scheme = "Custom"; } 然后,您必须继承AuthenticationHandler< TOptions>.以下是验证标头值的逻辑: public class MyAuthenticationHandler : AuthenticationHandler<MyOptions> { protected override Task<AuthenticateResult> HandleAuthenticateAsync() { var authorizationHeader = Context.Request.Headers["Authorization"]; if (!authorizationHeader.Any()) return Task.FromResult(AuthenticateResult.Skip()); var value = authorizationHeader.ToString(); if (string.IsNullOrWhiteSpace(value)) return Task.FromResult(AuthenticateResult.Skip()); // place logic here to validate the header value (decrypt,call db etc) var claims = new[] { new Claim(System.Security.Claims.ClaimTypes.Name,"Bob") }; // create a new claims identity and return an AuthenticationTicket // with the correct scheme var claimsIdentity = new ClaimsIdentity(claims,Authentication.Scheme); var ticket = new AuthenticationTicket(new ClaimsPrincipal(claimsIdentity),new AuthenticationProperties(),Authentication.Scheme); return Task.FromResult(AuthenticateResult.Success(ticket)); } } 为了继承AuthenticationHandler,您必须创建一个选项类,在其中将AuthenticationScheme属性设置为您正在使用的方案: public class MyOptions : AuthenticationOptions { AuthenticationScheme = Authentication.Scheme; } 在此之后,您必须继承AuthenticationMiddleware< TOptions>.这将创建您在上一步中实现的处理程序: public class MyAuthenticationMiddleware : AuthenticationMiddleware<MyOptions> { public MyAuthenticationMiddleware(RequestDelegate next,IOptions<MyOptions> options,ILoggerFactory loggerFactory,UrlEncoder encoder) : base(next,options,loggerFactory,encoder) { } protected override AuthenticationHandler<MyOptions> CreateHandler() { return new MyAuthenticationHandler(); } } 为了轻松插入中间件,您可以定义以下扩展方法: public static IApplicationBuilder UseMyAuthentication(this IApplicationBuilder app,IConfigurationSection config) { return app.UseMyAuthentication(options => {}); } private static IApplicationBuilder UseMyAuthentication(this IApplicationBuilder app,Action<MyOptions> configure) { var options = new MyOptions(); configure?.Invoke(options); return app.UseMiddleware<MyAuthenticationMiddleware>(new OptionsWrapper<MyOptions>(options)); } 然后在您的Startup类中,您最终可以添加您的中间件: public void Configure(IApplicationBuilder app,IHostingEnvironment env) { app.UseMyAuthentication(Configuration.GetSection("MyAuthenticationOptions")); // other stuff app.UseMvc(); } 然后在指定刚刚创建的方案的操作上添加AuthorizeAttribute: [Authorize(ActiveAuthenticationSchemes = Authentication.Scheme)] public IActionResult Get() { // stuff ... } 有很多步骤,但希望这会让你前进! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 【网页-JQuery插件】【 .Net码农】ASP.NET MVC分页 Ajax+Js
- asp.net-mvc – 在路由路径中公开属于MVC应用程序中的区域的
- ASP.NET Core的配置(1):读取配置信息
- 处理ASP.NET MVC中的CSS和图像
- asp.net – ViewModel的列表是空的
- asp.net-mvc – 将Angular与MVC 5捆绑在一起后出现格式错误
- asp.net-mvc – HtmlHelper扩展方法vs部分视图?
- asp.net – 用于.NET(asp mvc)的快速,简单和轻松的报告系统
- asp.net-mvc – 如何为特定的Controller / Action禁用自动M
- asp.net-mvc – 在ASP.NET MVC中实现自定义配置文件提供程序
- asp.net-core – 在JsonPatchDocument中使用.Net
- ASP.NET MVC4异步聊天室的示例代码
- asp.net – 按钮可以验证更多验证组吗?
- 从Azure功能调用Asp.Net Web API端点
- asp.net-mvc – Html.CheckBox即使模型值为true也
- asp.net – iis表示没有调试的运行站点(即在vs打
- 在ASP.NET,VS2008中“无法重新格式化文档”
- asp.net-mvc – 以mvc形式发布数组
- entity-framework – 如果使用Entity Framework,
- asp.net-mvc-3 – 为什么我的textBoxFor使用我的