asp.net-core - 与 ASP.NET Core 中的 Cookie 回退进行协商
问题描述
我有一个标题中描述的设置,其中包含一个默认策略,其中包含可以通过相应处理程序满足的要求:
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext authorizationContext, AccessRequirement requirement)
{
var httpContext = _httpContextAccessor.HttpContext;
var identity = authorizationContext.User.Identity;
if (!identity.IsAuthenticated)
{
var result = await httpContext.AuthenticateAsync({"Negotiate || Cookie"});
if (!result.Succeeded)
{
return;
}
}
authorizationContext.Succeed(requirement);
}
只要我不通过默认策略调用这些处理程序,即使可以解决协商身份验证,站点也会显示简单的 401。在没有处理程序的情况下解决此问题的方法实际上也可以解决后续问题。如果我优先考虑协商(通过明确设置默认方案或首先注册它),如果协商不可用,将提示用户输入他的 Active Directory 凭据,而它应该回退到 Cookie 身份验证。但是,如果我优先考虑 Cookie 身份验证,即使 Negotiate 可以工作,也会提示用户输入他的 Cookie 专用凭据。
是否有任何配置允许某种尝试捕获机制尝试协商并在无法解决时立即回退到另一个方案?我通过设置不同的参数进行了篡改,DefaultChallengeScheme
但到目前为止还没有成功。
解决方案
对于 401 的问题:当你在启动中添加服务时:services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)。这里的“JwtBearerDefaults.AuthenticationScheme”是在不请求特定方案时默认使用的方案名称。但是,当 Authorization 调用身份验证质询时,JWT 不记名方案返回带有 www-authenticate:bearer 标头的 401 结果。
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/?view=aspnetcore-5.0
如果您想使用多种身份验证方法,您可以尝试“AuthenticationSchemeOptions Class”,该类内部可以设置属性。
推荐阅读
- mongodb - MongoDB 在聚合组中计数为真
- asciidoc - AsciiDoc 中的 Shell 命令
- java - 在 Java 中从 html 生成 pdf 时出现错误的渲染
- c# - 如何使用 C# NAudio 操作字节?
- python-2.7 - 如何通过ROS-python使速度和时间之间的关系成为线性关系
- arrays - 如何在嵌套数组中过滤 JSON 对象数组
- c# - 如何使用 MVVMCross 6.2 设置选项卡的标题?
- flutter - Flutter:带有hintText的Cupertino TextField
- javascript - 生成的打字稿文件编辑权限
- c# - 如何修复 .NET Core 中 Startup.cs 类中的依赖注入错误