我正在阅读有关WebApi授权的几个资源(书籍和SO答案).
假设我想添加自定义属性,该属性仅允许特定用户访问:
情况1
我已经看到了这种覆盖的 方法, OnAuthorization如果出现问题就会设置响应
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ( /*check if user OK or not*/)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
Run Code Online (Sandbox Code Playgroud)
案例#2
但是我也看到了这个类似的例子,它也覆盖了 OnAuthorization但是要求base:
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
// If not authorized at all, don't bother
if (actionContext.Response == null)
{
//...
}
}
Run Code Online (Sandbox Code Playgroud)
然后,检查是否
HttpActionContext.Response已设置.如果未设置,则表示请求已获得授权且用户可以
案例#3
但我也看到了这种覆盖的方法IsAuthorized :
public class AllowOnlyCertainUsers : AuthorizeAttribute
{
protected override …Run Code Online (Sandbox Code Playgroud) 我试图在我的ASP.NET MVC2应用程序中实现Windows身份验证.我遵循了官方文档建议的所有步骤:
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
我已经指定了NTLM身份验证.到现在为止还挺好.一切正常.我想检查登录我的数据库的用户.我想从我的表中获取角色,然后使用自定义属性管理授权.
我不想使用会员和角色提供者.
我已经有我的表用户/角色,因为他们已经被用于互联网应用程序(这是内联网应用程序).
在我的Internet App中,我有一个用户输入数据的表单.表单将发布到控制器,该控制器将检查所有内容并使用登录用户的用户(和角色)创建cookie.
在我的global.asax中,我捕获了AuthenticateRequest事件,在那里我读取了cookie并创建了一个自定义主体,我在整个应用程序中使用它来检查授权.
如何使用Windows身份验证实现此功能?