gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 5 [Authorize] 属性在浏览器中生成登录弹出窗口而不是重定向到 302 登录页面

转载 作者:行者123 更新时间:2023-12-05 07:53:12 25 4
gpt4 key购买 nike

我以前从未见过这种情况:我用 [Authorize (Roles = "Admin"] 装饰了一个 Controller 属性,但不是通过 302 重定向将未注册/未签名的用户发送到登录 View ,而是在 Chrome 浏览器中出现 javascript 生成的登录提示:

enter image description here

在输入他或她的凭据后,用户将收到 401 错误。关于SO的建议 setting the <authentication mode> removing the <FormsAuthenticationModule> 在 Web.Config 中不要改变这种行为。我之前使用完全相同的 Controller 、引用库等创建了另一个项目,但从未遇到过这种不良行为。

目前对我来说最大的盲点是是否存在某种 OWIN 冲突。为了观察我的应用程序在启动时的行为,我在 app.UseCookieAuthentication() 中创建了一个测试变量方法并设置断点。我在调试期间观察到根本没有调用此方法(请参阅下面的完整代码块):

 app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
OnApplyRedirect = ctx =>
{
var t = 2;
}
}
});

为了更加清晰,这里是带有不合作的装饰 Controller [Authorize]属性。

    [Authorize(Roles = "Admin")]
public ActionResult BlogPostsAdmin()
{
return View(db.BlogPosts.ToList());
}

这是应该返回登录 View 的 AccountController:

 [AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}

有什么帮助吗?

更新:从现在开始,我只是想组合一个自定义授权属性,尽管这对于生产来说是不可取的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace PortfolioSite.Framework
{

public class SiteAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);

filterContext.HttpContext.Response.Redirect("/Account/Login");
}
}
}

最佳答案

Web 配置应该覆盖 IIS 快速配置,但在这种情况下似乎没有。您可以尝试做的是在 IIS 级别也将其关闭。

你可以到这个目录\IISExpress\config\applicationhost.config 打开这个文件并设置

 <windowsAuthentication enabled="false" />

关于asp.net-mvc - ASP.NET MVC 5 [Authorize] 属性在浏览器中生成登录弹出窗口而不是重定向到 302 登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32899770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com