asp.net-core – 根据ASP.NET Core中请求标头中提供的API密钥授
我正在尝试重写我目前在ASP.NET Core中为ASP.NET 4.6提供的一些授权.
我知道Authorization已经发生了一些变化,我发现很难在ASP.NET Core中实现我非常简单的auth策略. 我的要求: 对服务器的每个请求都应包含一个名为“key”的标头.根据该密钥的值,我将能够查询数据库并检查该密钥是代表普通用户还是管理员用户.如果请求不包含有效密钥,则不会授权该请求. 我将如何在ASP.NET Core中实现它?我发现的每一个例子对我的需求来说都显得过于苛刻. 在ASP.NET 4.6中,我使用自己的自定义AuthorizeAttributes在我的控制器上使用,例如 [User] public IHttpActionResult DoSomethingOnlyUsersCanDo() {} 和 [Admin] public IHttpActionResult DoSomethingOnlyAdminsCanDo() {} 我可以在ASP.NET Core中执行相同的操作吗? 解决方法
在ASP.NET Core中,建议您不要从AuthorizeAttribute继承.相反,您可以制定自定义授权策略:
https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims.
您需要具有一个身份验证处理程序,该处理程序根据标头为用户创建一个ClaimsIdentity.然后,您可以制定策略来断言用户是否存在某些声明. 您可以在此处找到基本身份验证的实现:https://github.com/blowdart/idunno.Authentication.
其核心是在BasicAuthenticationHandler,它继承自AuthenticationHandler< BasicAuthenticationOptions>. 此实现中的主体是在开发人员制作的事件回调中创建的,在示例中它是here: if (context.Username == context.Password) { var claims = new[] { new Claim(ClaimTypes.NameIdentifier,context.Username,ClaimValueTypes.String,context.Options.ClaimsIssuer),new Claim(ClaimTypes.Name,context.Options.ClaimsIssuer) }; context.Principal = new ClaimsPrincipal(new ClaimsIdentity(claims,context.Scheme.Name)); context.Success(); } 然后,在根据主体调用此回调后,在处理程序中创建身份验证票证: var ticket = new AuthenticationTicket(validateCredentialsContext.Principal,Scheme.Name); return AuthenticateResult.Success(ticket); 我还发表了一篇关于实现自定义身份验证方案的文章:Creating an authentication scheme in ASP.NET Core 2.0. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 直接nuget放置文件的位置
- asp.net – 使用标记将字典绑定到转发器
- asp.net – 如何从单独的.NET应用程序获取当前上下文或用户
- aop 简单使用
- asp.net – 在Owin有来自Global.asax的Application_End吗?
- asp.net-mvc – 如何gzip内容在asp.net MVC?
- asp.net-mvc – 注入AutoMapper实例
- 白屏问题,如果用户在asp.net页面中保持空闲状态
- asp.net-mvc-3 – 在ASP.NET MVC中,“<%=”,“<%:”“&a
- asp.net-mvc – MVC 4 OAuth集成.接下来是什么以及如何从数
- asp.net-mvc – 处理asp.net mvc中的错误和异常
- asp.net-mvc-3 – 带有EF 4.1和EntityState.Modi
- asp.net – URL重写规则在Visual Studio Develop
- asp.net-web-api – ASP.NET Web API中的回调方法
- asp.net-mvc – 如何在asp.net mvc中持久化查询字
- 一个IIS WebSite可以托管不同ASP.NET版本的多个W
- 收藏的asp.net文件上传类源码
- asp.net-mvc – 是否可以将XDocument作为参数传递
- asp.net-mvc – “Inject”Request.Url.Hosts –
- asp.net – 如何更改swagger文档基本URL?