我知道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中执行相同的操作吗?
解决方法
您需要具有一个身份验证处理程序,该处理程序根据标头为用户创建一个ClaimsIdentity.然后,您可以制定策略来断言用户是否存在某些声明.
您可以在此处找到基本身份验证的实现:https://github.com/blowdart/idunno.Authentication.
请注意巴里当然的评论:
It is meant as a demonstration of how to write authentication middleware and not as something you would serIoUsly consider using.
其核心是在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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。