如何在 ASP .NET Core 中配置身份验证处理程序?

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

我正在开发 ASP.NET Core Minimal API,并且尝试使用身份承载方案通过 JWT 令牌进行身份验证。我遵循了一些教程来尝试实现这一目标,但是当尝试使用默认登录端点登录用户时,我总是遇到同样的错误:

未注册任何登录身份验证处理程序。您是否忘记调用 AddAuthentication().AddCookie("Identity.Bearer",...)?

我做了一些挖掘,我应该使用

BearerTokenExtensions.AddBearerToken
文件中的
program.cs
方法来配置我的应用程序中的身份验证。但是我不确定应该在什么情况下使用它以及应该提供什么参数。

这是我的完整

program.cs
文件。我不确定我到底需要做什么来解决这个问题

using Backend.Entities;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Identity;
using Microsoft.IdentityModel.Tokens;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

// Add Authentication with the Identity.Bearer (JWT) scheme
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidAudience = builder.Configuration["Jwt:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
        };
    });

builder.Services.AddAuthorization();
builder.Services.AddIdentityCore<User>()
    .AddEntityFrameworkStores<ApplicationDBContext>()
    .AddApiEndpoints(); 


var ConnString = builder.Configuration.GetConnectionString("WorkoutStore");
builder.Services.AddSqlite<ApplicationDBContext>(ConnString);

var app = builder.Build();

app.MapIdentityApi<User>(); // Map default endpoints for Identity with Bearer scheme
app.UseAuthentication();
app.UseAuthorization();

app.Run();

我的登录请求:

POST http://localhost:5178/login
Content-Type: application/json

{
    "Email": "[email protected]",
    "Password": "Anything@1!"
}
asp.net-core asp.net-core-identity asp.net-core-8
1个回答
0
投票

请使用

signInManager.CheckPasswordSignInAsync
代替
signInManager.PasswordSignInAsync()

因为signInManager.PasswordSignInAsync()只能与cookie一起使用。这就是我们收到错误的原因。

当使用

IdentityCore
jwt
时,我们应该使用
signInManager.CheckPasswordSignInAsync

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