0

我有一个使用 Azure AD 登录用户的 asp.net 核心 Web 应用程序。由于某些用户经常共享计算机,因此他们可能无法登录/退出应用程序,这对于大多数操作来说都是可以的。但是,我现在需要强制用户在更新应用程序的某些区域(即输入临床信息)时重新输入密码。这是为了确保写入系统的敏感信息被标记在正确的用户名下,以用于审计目的。

为了测试此功能,我使用Microsoft 身份平台文档中的信息和示例创建了一个新的 asp.net core 5.0 Razor Web 应用程序。我遇到的问题是标准库(Microsoft.Identity.Web 和 Microsoft.Identity.Web.UI)似乎没有提供我能找到的这个功能。

我尝试在我的应用程序注册中添加 spa 重定向并使用 MSAL,但问题是在成功调用 loginPopup 并使用不同的用户帐户登录后,Razor 应用程序仍以旧用户身份进行身份验证。也许 Razor Web 应用程序不应与 SPA/MSAL 功能结合使用。

因此,我正在使用此处记录的方法。但是,我无法成功捕获对包含状态信息的 redirect_uri 的 POST 请求,因为服务器返回 302 响应并改为重定向到 /signin-oidc。在此之后,我指定的 redirect_uri 被加载,但作为 GET 请求,所以我的表单信息消失了。我需要此状态信息,以便我知道在成功完成重新身份验证后要执行什么操作。

如何使用带有 Microsoft.Identity.Web 库的 Razor Pages 或 MVC Web 应用程序重新进行身份验证?

应用注册 在此处输入图像描述

应用程序代码

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));

    services.AddAuthorization(options =>
    {
        // By default, all incoming requests will be authorized according to the default policy
        options.FallbackPolicy = options.DefaultPolicy;
    });
    services.AddRazorPages()
        .AddMvcOptions(options => { })
        .AddMicrosoftIdentityUI();
}

public class IndexModel : PageModel
{
    private readonly ILogger<IndexModel> _logger;
    private readonly IConfiguration _configuration;

    public IndexModel(ILogger<IndexModel> logger, IConfiguration configuration)
    {
        _logger = logger;
        _configuration = configuration;
    }

    public string AuthURL { get; set; }

    public void OnGet()
    {
        var nonce = Guid.NewGuid().ToString();
        var redirectHost = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}";
        var redirectPath = "/Test";
        var encodedURL = UriHelper.Encode(new Uri(redirectHost + redirectPath));
        AuthURL = $"{_configuration["AzureAd:Instance"]}{_configuration["AzureAd:TenantId"]}/oauth2/v2.0/authorize?" +
            $"client_id={_configuration["AzureAd:ClientId"]}" +
            $"&redirect_uri={encodedURL}" +
            "&response_type=id_token" +
            "&response_mode=form_post" +
            "&scope=openid" +
            "&prompt=login" +
            "&hsu=1" +
            $"&login_hint={User.Identity.Name}" +
            $"&state=my_state" +
            $"&nonce={nonce}";
    }
}


@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
<a href="@Model.AuthURL" class="btn btn-outline-primary">ReAuth</a>

网络请求(单击 ReAuth 按钮后) 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

0 回答 0