过多重定向到 MicrosoftIdentity/Account/AccessDenied

问题描述 投票:0回答:1

我有一个使用 AAD 登录的 blazor 服务器应用程序。我想仅限制特定用户的访问权限(基于用户角色)。

程序.cs

builder.Services
    .AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection(AppConsts.Config.AzureAdSectionKey))

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = options.DefaultPolicy;
});

builder.Services
    .AddControllersWithViews()
    .AddMicrosoftIdentityUI();

builder.Services.AddRazorPages();

app.UseAuthentication();
app.UseAuthorization();

//app.MapRazorPages(); when commented I get endless redirection to MicrosoftIdentity/Account/AccessDenied?ReturnUrl=%2FMicrosoftIdentity%2FAccount%2FAccessDenied%3FReturnUrl%
app.MapControllers();

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode()
    .RequireAuthorization();

我使用 ClaimsTransformation 限制对我的应用程序的访问,以便它无法在 AuthorizationPolicy 中被覆盖

public class ClaimsTransformation : IClaimsTransformation
{

    public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        if (!IsUserAllowed(principal))
        {
            var emptyClaimIdentity = new ClaimsIdentity();
            emptyClaimIdentity.AddClaim(new Claim(ClaimTypes.Name, principal.Identity?.Name ?? "anonym"));
            return new ClaimsPrincipal(emptyClaimIdentity);
        }
        return principal;    
    }
}

现在我不断地重定向到 MicrosoftIdentity/Account/AccessDenied。 但是,当我添加 Razor 页面时,我得到了正确的“访问被拒绝”页面响应。

  1. 为什么 AccessDenied 页面会被重定向?
  2. MicrosoftIdentityUI 包是否依赖于 razor 页面?我以为他们改用控制器了

enter image description here

asp.net-core azure-active-directory blazor .net-8.0 microsoft-identity-platform
1个回答
0
投票

Microsoft.AspNetCore.Identity.UI 还定义了一些 razor 页面,路径

/MicrosoftIdentity/Account/AccessDenied
由其中之一提供服务。 扩展方法不映射 Razor 页面。

似乎发生重定向是因为默认访问被拒绝路径:

builder.Services.ConfigureAll<CookieAuthenticationOptions>(options =>
{
    if (string.IsNullOrEmpty(options.AccessDeniedPath))
    {
        options.AccessDeniedPath = new PathString("/MicrosoftIdentity/Account/AccessDenied");
    }
});

尝试使用所需的授权定义自定义访问拒绝页面。

注意:我正在阅读版本3.2.2源代码。

注2:在 Blazor WebApp 中,此类问题已通过

app.MapRazorComponents<App>().AllowAnonymous()
解决。

© www.soinside.com 2019 - 2024. All rights reserved.