asp.net-mvc – ASP.NET web api – 设置自定义IIdentity或IPrin
在我们的asp.net mvc / web api项目中,我们希望使用AuthorizeAttribute自定义授权.我们注意到有两个不同的AuthorizeAttribute,一个用于MVC的System.Web.MVC命名空间,另一个用于web api的System.Net.Http命名空间.
它适用于MVC,我们的代码如下: public class MyPrincipal : IPrincipal { //some custom properties public bool IsValid() { //custom authentication logic } private IIdentity identity; public IIdentity Identity { get { return this.identity; } } public bool IsInRole(string role) { return true; } } //override AuthorizeCore public class MyAuthorizeAttribute : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { MyPrincipal user = new MyPrincipal(); if (user.isValid()) { httpContext.User = user; } else { httpContext.Response.Redirect("~/Common/NoAuthorize",true); } } } [MyAuthorizeAttribute] public class BaseMyController : Controller { protected virtual new MyPrincipal User { get { return HttpContext.User as MyPrincipal; } } } 然后在MVC控制器中,我们可以通过MyPrincipal用户属性获取用户信息. 但是,当我们开始在web api中使用相同的方式时,我们发现web api没有HttpContext属性,而在System.Web.Http.AuthorizeAttribute中,要覆盖的方法接受HttpActionContext参数,它也没有HttpContext属性或者我们可以在其他地方设置MyPrincipal实例. 我注意到System.Web.Http.AuthorizeAttribute摘要说
似乎还有其他一些方法来设置IPrincipal实例. 我不知道,有什么好建议吗?那么,为什么asp.net web api控制器没有HttpContext?有关于它的设计模式吗? 相关问题 解决方法
我实现了一些东西作为概念证明,主要是这个:
Authentication Filters in ASP.NET Web API 2
对于Web API,您可以创建一个Attribute,IAuthenticationFilter. config.Filters.Add(new YourAuthenticationAttribute()); 或者您可以将其用作api控制器/方法的属性. 然后,您可以实现AuthenticateAsync,获取请求的授权标头,检查方案并验证参数,如果一切都有效,则设置主体. 我认为这个想法是你可以在一个链中添加多个这些过滤器,它们都可以针对一组特定的需求进行身份验证,比如他们寻找的方案,以及主要设置链中的某个地方,或者返回一个挑战. public class YourAuthenticationAttribute : Attribute,IAuthenticationFilter { public Task AuthenticateAsync(HttpAuthenticationContext context,CancellationToken cancellationToken) { HttpRequestMessage request = context.Request; if (request.Headers.Authorization != null && request.Headers.Authorization.Scheme.Equals("yourScheme",StringComparison.OrdinalIgnoreCase)) { // get the value sent with the header. string authParam = request.Headers.Authorization.Parameter; // do some validation on the parameter provided... // if it's all valid,create a principal with claims: List<Claim> claims = new List<Claim>() { new Claim(ClaimTypes.Name,"Eddie Admin"),new Claim(ClaimTypes.Role,"Admin"),// new Claim(ClaimTypes.Role,"Delete"),}; // create an identity with the valid claims. ClaimsIdentity identity = new ClaimsIdentity(claims,"yourScheme"); // set the context principal. context.Principal = new ClaimsPrincipal(new[] { identity }); 创建主体时,您可以应用声明,并根据常规授权属性检查这些声明.例如 [Authorize(Roles = "Admin")] 除此之外,我还没有使用它,但希望这能指出你正确的方向. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在ASP.NET MVC视图中递归
- asp.net – 如何从Web应用程序中的客户端计算机获取AD凭据?
- asp.net-mvc – 在ASP.NET MVC Razor View中显示本地日期/时
- asp.net-web-api – 在WebApi和MVC项目之间共享SignalR集线
- asp.net-mvc – 尝试解密FormsAuthentication票证总是无法验
- asp.net – 在将MVC和路由添加到WebForms项目后,IIS中的默认
- .net – Oxite:你打算用它做什么?
- asp.net – IIS自定义错误未显示自定义错误页面
- asp.net-mvc-2 – 如何设置RadioButtonFor()在ASp.net MVC
- asp.net – 从中??等信任环境的Web.config读取system.net/m
- asp.net-web-api – Web Api使用IDependencyReso
- asp.net – 查找上一个和下一个兄弟控件
- asp.net-mvc – 为什么我的ASP.NET MVC应用程序试
- asp.net-mvc – 在MVC中使用Rotativa pdf显示动态
- 使用 xUnit 编写 ASP.NET Core WebAPI单元测试
- asp.net-mvc-3 – 如何使用下拉列表的数据注释?
- asp.net – 如何使用DataPager与服务器端寻呼?
- ASP.NET主题 – 应该使用它们吗?
- ASP.net中的免费PDF查看器
- asp.net-mvc-4 – ASP.NET MVC 4捆绑无法正常工作