我尝试在我的应用程序中使用自定义Authorize属性来处理来自客户端和管理员的请求。
我在不同的应用程序中使用了相同的方法,唯一的区别是身份验证类型。一个是基于Microsoft帐户,另一个是基于联合服务。
我在我的AuthorizationCore方法的覆盖中设置了一个断点,我的问题是,当用户第一次尝试访问该应用程序时,它只会被触发一次,然后它会将用户重定向到登录页面。在此之后它不再被解雇。我每次用户访问控制器/操作时都需要触发它,以便我们检查用户是否具有正确的角色,在我的理解中,这是Authorize属性的用途。
我的代码:
public class AuthorizeUserAttribute : AuthorizeAttribute
{
/// <summary>
/// The Role required by the Action or Controller
/// </summary>
public UserRole RequireRole { get; set; }
/// <summary>
/// Authorization Logic
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//Result = new AuthorizationResult();
bool isAuthorized = base.AuthorizeCore(httpContext);
if (isAuthorized)
{
using (ApplicationDbContext context = new ApplicationDbContext())
{
ApplicationUser user = context.ApplicationUsers.FirstOrDefault(u => u.EmailAddress.Equals(httpContext.User.Identity.Name, StringComparison.OrdinalIgnoreCase));
}
// ... Check if user has the required role
}
return isAuthorized;
}
/// <summary>
/// Redirect the user
/// </summary>
/// <param name="filterContext"></param>
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
// Handle the request if the user does not have the required role
base.HandleUnauthorizedRequest(filterContext);
}
}
我使用如下属性
[AuthorizeUser(RequireRole = Core.Models.Users.UserRole.User)]
public ActionResult Index()
{
return View();
}
任何帮助将不胜感激。 感谢
答案 0 :(得分:1)
我觉得自己不得不承认这一次
我的代码工作正常,问题是身份验证提供程序在经过身份验证后将我重定向到我的https网站,我没有意识到的是重定向我的端口。它重定向到的端口是我的IIS中的测试应用程序,而不是我的IIS Express中的开发应用程序。卫生署!