我有一个.net WebApi2项目。我正在使用提供基本身份验证的IIS。
有2个客户端需要访问此Web服务,并且有2个控制器。 Controller#1 = EmployeeController和Controller#2 = InvoiceController我有一个列出用户名和角色的数据库。 Role1 = EmployeeUsers和Role2 = InvoiceUsers。
我想使用Authroize属性......
[Authorize(Roles = "EmployeeUsers ")]
public class EmployeeController : ApiController
{
}
和
[Authorize(Roles = "InvoiceUsers")]
public class InvoiceController : ApiController
{
}
没有授权属性我可以通过Request.GetRequestContext()获得经过身份验证的用户.Crincipal但我只能在用户通过身份验证并允许访问控制器之后才能访问。
我希望能够获得基本身份验证用户信息(请记住,IIS正在处理基本身份验证)并使用[Authorize]属性允许基于用户可能处于的某些角色访问控制器...但在什么时候我可以访问经过身份验证的用户(Principal),检查他的角色,并允许[Authorize]属性执行其工作或允许或拒绝访问某些控制器?
仅供参考... IIS必须用于处理基本身份验证...因此在IIS中设置了基本身份验证,我的web.config具有身份验证模式=" Windows"集。
如何使用Authorize属性根据通过IIS验证的用户限制对控制器的访问?
答案 0 :(得分:0)
我没有太多使用IIS进行身份验证的经验but you can create your own attribute that inherits from AuthorizeAttribute,因此您可以使用以下内容进行自己的操作:
public class MyAuthorizationAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var principal = actionContext.Request.GetRequestContext().Principal;
if (!principal.IsInRole(this.Roles))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
然后你用[MyAuthorizationAttribute(Roles = "Foo")]