asp.net-core-mvc - 使用 Windows 身份验证时设置自定义 AuthenticationScheme

标签 asp.net-core-mvc

我正在尝试为我的 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/

相关文章:

asp.net-mvc - ASP.Net MVC Angular 2 决赛

.net - 当 url 在浏览器中工作时添加服务引用给我错误

c# - .NET Core 2从内存流下载Excel文件

c# - 为什么使用 UseCookieAuthentication 会导致异常?

c# - 我可以在 .NET Standard 类库中使用动态吗?

c# - 为 "asp-for"HTML 标记指定格式 (ASP.NET Core)

c# - ASP.NET MVC 6 中的 TryValidateModel

c# - ASP.NET Core 登录中的 ReturnUrl 为空

asp.net-core - 在 .NET Core OpenID Connect 中间件中重定向?

c# - 缓存 Asp.Net 不存在 Asp.Net 5