我正在尝试为我的mvc 6 asp.net 5 web应用程序编写自定义身份验证/授权 . 我已经编写了自定义策略和要求
Microsoft.AspNet.Authorization.AuthorizationHandler
Microsoft`.AspNet.Authorization.IAuthorizationRequirement
我可以跟踪代码,它似乎按预期工作 . 如果用户匹配需求,我执行context.Succeeded(要求)并返回 . 但是,如果用户不匹配并且我执行了context.Fail()我希望它重定向到显示“您未经授权使用此功能”的cshtml页面 . 相反,它提出了一个空白的网页 . 当我检查 Consul 时,我可以看到代码返回403 Forbidden错误 . 所以我需要知道如何将其重定向到页面 . 我尝试添加到我的authorize属性:
enter code here
[授权(政策= "xyz",ActiveAuthenticationScheme = "Cookie")]
但是当我这样做时,即使用户通过身份验证,它也会重定向到“/ account / Login” . 我试图在我的startup.cs的ConfigureServices中进行设置
services.Configure<CookieAuthenticationOptions>(o =>
{
o.AuthenticationScheme = "Cookie";
o.LoginPath = "";
o.AccessDeniedPath = new Microsoft.AspNet.Http.PathString("/Home/Unauthorized/");
o.AutomaticAuthenticate = true;
});
但它似乎忽略了设置 . 我将方案更改为更通用的方式,如“Manpower”,然后我得到“没有身份验证处理程序配置为对方案进行身份验证”错误,当用户没有授权时 . 我正在使用Windows身份验证 . 我也试过我的startup.cs的Configure方法如下:
app.UseCookieAuthentication(options =>
{
options.AuthenticationScheme = "Manpower";
options.LoginPath = "";
options.AccessDeniedPath = new Microsoft.AspNet.Http.PathString("/Home/Unauthorized/");
options.AutomaticAuthenticate = true;
});
后者不会生成错误,但会导致所有请求被重定向到/ account / login的相同行为,即使它们已获得授权 . 所有帮助表示赞赏 . 谢谢 .
1 回答
你遇到的问题是你正在混合cookie auth和Windows auth . 你不需要两者 .
删除cookie身份验证部分,然后从策略中删除
ActiveAuthenticationScheme = "Cookie"
. 您创建的策略需要cookie,但由于Windows身份验证不使用cookie,您将始终收到未经授权的响应 .但有几点需要注意 . Windows Auth仅支持基于角色的身份验证,并且在RC1中已破坏 . 修复将在RC2中 .