将 ASP.Net Core Identity 用于 Razor 页面 Web 应用程序和 MAUI 应用程序

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

我有一个 razor Pages/mvc Web 应用程序,它使用 ASP.Net Core Identity 进行身份验证和授权。我开始使用 MAUI 开发该网站的移动应用程序版本,并希望访问许多相同的端点(其中一些是页面 javascript 的 WebAPI 端点),但我正在努力让 Web 应用程序身份验证与 IdentityApiEndpoints 一起工作以获取MAUI 应用程序的令牌。第一个问题是混合两种身份验证是否是正确的做法?

假设这是进行身份验证的可行方法,我如何才能使其与两者一起使用。这就是我最初拥有的:

builder.Services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultUI()
    .AddDefaultTokenProviders();

builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
});

我尝试使用新的 AddIdentityApiEndpoints:

builder.Services.AddIdentityApiEndpoints<ApplicationUser>()
    .AddRoles<IdentityRole>()   //Needs to come before the EntityFramework stores to work
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultUI()
    .AddDefaultTokenProviders();


...
app.MapIdentityApi<ApplicationUser>().AllowAnonymous();

这主要有效,但我似乎无法将重定向添加到登录页面 - 即,如果有人在未登录的情况下导航到主页,它曾经重定向到登录页面,但不再这样做。我也尝试过:

builder.Services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddApiEndpoints()
    .AddDefaultUI()
    .AddDefaultTokenProviders();

但是当我尝试使用邮递员登录时,我收到此错误:

System.InvalidOperationException: 'No sign-in authentication handler is registered for the scheme 'Identity.Bearer'. The registered sign-in schemes are: Identity.Application, Identity.External, Identity.TwoFactorRememberMe, Identity.TwoFactorUserId. Did you forget to call AddAuthentication().AddCookie("Identity.Bearer",...)?'

如何配置它以仍然重定向到登录屏幕?

asp.net-core asp.net-identity maui
1个回答
0
投票

发布我的解决方案,以防它对其他人有帮助。我需要添加不记名令牌作为身份验证方案,如下所示:

builder.Services.AddAuthentication()
    .AddBearerToken(IdentityConstants.BearerScheme);

builder.Services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddApiEndpoints()
    .AddDefaultUI()
    .AddDefaultTokenProviders();

然后我需要允许匿名访问这些 API 端点:

app.RegisterApiEndpoints();
app.MapIdentityApi<ApplicationUser>().AllowAnonymous();

最后,我需要添加一个自定义策略,该策略接受不记名令牌和 cookie 到将使用不记名令牌访问的端点。这里的答案确实有帮助: 为什么在 dotnet 7 中使用 WebApi 和 AspIdentityCore 以及 JwtBearer 时会重定向到帐户/登录页面?

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