首页 文章

使用Windows身份验证时设置自定义AuthenticationScheme

提问于
浏览
2

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

  • 2

    你遇到的问题是你正在混合cookie auth和Windows auth . 你不需要两者 .

    删除cookie身份验证部分,然后从策略中删除 ActiveAuthenticationScheme = "Cookie" . 您创建的策略需要cookie,但由于Windows身份验证不使用cookie,您将始终收到未经授权的响应 .

    但有几点需要注意 . Windows Auth仅支持基于角色的身份验证,并且在RC1中已破坏 . 修复将在RC2中 .

相关问题