我正在阅读有关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网站.
我希望未登录的用户被自动(重新)定向到登录页面,例如,
~/Account/Login.aspx
Run Code Online (Sandbox Code Playgroud)
就像现在一样,用户default.aspx
无需登录即可访问页面(例如).
注意:我正在操作(可能是错误的)假设ASP.NET在每个(和任何)页面加载之前都有自己的身份验证周期.
更新 @asawyer提供了一个链接,虽然没有帮助回答问题,但确实提供了一个漂亮的图形:
我有一个web.config
启用窗体身份验证的文件:
<?xml version="1.0"?>
...
<configuration>
...
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" name=".ASPXFORMSAUTH" slidingExpiration="true"/>
</authentication>
...
</system.web>
...
</configuration>
Run Code Online (Sandbox Code Playgroud)
当我浏览到"默认"页面时,我能够查看它,例如,
GET http://localhost:53149/WebSite/ HTTP/1.1
Host: localhost:53149
Run Code Online (Sandbox Code Playgroud)
我得到的页面内容:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Run Code Online (Sandbox Code Playgroud)
换句话说,而不是被强迫登录到的网站,我不是被迫在登录到Web站点.
这可能与我的浏览器在本地运行到Web服务器的事实有关; 但我正在使用Forms
,而不是Windows
(Passport
而不是None
)认证.
我正在接管现有的ASP.NET MVC 5项目,以试图理解MVC框架.我注意到,当用户没有登录,并且他试图访问某些网页时,它会自动将他重定向到登录屏幕.我相信这与Web.config文件中的以下内容有关:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
但是,即使用户未登录,某些网页也允许访问它们(并且不会如上所述重定向).
所以我的问题是:我在哪里配置哪些网页会自动重定向到登录屏幕,以及哪些网页无需身份验证即可访问?