我正在尝试为我的 mvc 6 asp.net 5 Web 应用程序编写自定义身份验证/授权。我使用
编写了自定义策略和要求Microsoft.AspNet.Authorization.AuthorizationHandler
Microsoft`.AspNet.Authorization.IAuthorizationRequirement
我可以跟踪代码,它似乎按预期工作。如果用户符合要求,我会执行 context.Succeeded(requirement) 并返回。但是,如果用户不匹配并且我执行了 context.Fail() 我希望它重定向到显示“您未经授权使用此功能”的 cshtml 页面。相反,它会显示一个空白网页。当我检查领事时,我可以看到代码返回了 403 Forbidden 错误。所以我需要知道如何将其重定向到页面。我尝试添加到我的授权属性:
在此处输入代码
[Authorize(Policy = "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,即使它们已获得授权。感谢所有帮助。谢谢。
最佳答案
您遇到的问题是您混合了 cookie 身份验证和 Windows 身份验证。您不需要两者。
删除 Cookie 身份验证部分,然后从您的策略中删除 ActiveAuthenticationScheme = "Cookie"
。您创建的策略需要 cookie,但由于 Windows 身份验证不使用 cookie,您将始终收到未经授权的响应。
不过,有几件事需要注意。 Windows Auth 仅支持基于角色的身份验证,并且在 RC1 中已损坏。修复将在 RC2 中进行。
关于asp.net-core-mvc - 使用 Windows 身份验证时设置自定义 AuthenticationScheme,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34981151/