处理 Azure AD 身份验证问题 - 在“拒绝访问”页上清除用户上下文

Handling Azure AD Authentication Issue - User Context Cleared on Access Denied Page

提问人:Braam Neethling 提问时间:10/25/2023 最后编辑:Braam Neethling 更新时间:10/26/2023 访问量:56

问:

为了安全起见,我目前正在开发一个 C# MVC Web 应用程序,其中包含 Azure AD 集成。用户登录后,一组声明将添加到用户的上下文中,所有声明均由 Azure 管理。

但是,当没有特定角色的用户尝试访问受限内容时,我遇到了一个问题。在这种情况下,将显示“拒绝访问”页面,该页面也由 Azure 控制。显示此“拒绝访问”页面后,会出现此问题:

用户上下文被清除。 登录按钮将重新出现。 奇怪的是,如果我从“拒绝访问”页面向后导航,用户会神奇地再次登录。

我试过什么我查看了用于处理访问被拒绝方案的 Azure AD 配置和策略,但尚未找到直接解决方案。此外,我尝试检查浏览器的网络流量,但它没有提供对问题的见解。

期望值我预计,在成功登录后,即使在访问受限内容时,用户上下文也会保留,并且会向他们显示相应的拒绝访问消息,而不是注销。

是否有其他人遇到过类似的问题,或者可以就处理这种情况的推荐方法提供指导?

C# ASP.NET-MVC 安全性 azure-active-directory 访问被拒绝

评论


答:

1赞 SaiVamshiKrishna 10/26/2023 #1

要解决您遇到的问题,您需要实现自己的访问被拒绝页面。在此页面上,您可以检查用户是否已通过身份验证。如果用户已通过身份验证,则可以将他们重定向到主页或他们可访问的其他页面。

这是我尝试过的代码:

public IActionResult AccessDenied()
{
    if (User.Identity.IsAuthenticated)
    {
        // User is authenticated, redirect to a page accessible to authenticated users.
        return RedirectToAction("SecurePage", "Home"); // Redirect to a secure page, for example
    }
    else
    {
        // User is not authenticated, display the login button.
        return View("AccessDenied");
    }
}

在此代码中:

  • 如果用户已通过身份验证 ( is ),它会将用户重定向到经过身份验证的用户可访问的页面,例如“SecurePage”操作。User.Identity.IsAuthenticatedtrue

  • 如果用户未通过身份验证,则会显示“拒绝访问”视图

查看页面:

@{
    ViewBag.Title = "AccessDenied";
}

<!DOCTYPE html>
<html>
<head>
    <title>Access Denied</title>
</head>
<body>
    <h1>Access Denied</h1>
    <p>You do not have permission to access this page.</p>
</body>
</html>

结果 enter image description here