ASP.NET 核心 6.0 Web 应用程序未在授权时重定向到身份服务器

ASP.NET Core 6.0 Web Application not redirecting to identity server on authorization

使用 IdentityServer4 为带有 OpenIDConnect 的 MVC 应用程序设置一个简单的测试项目。

隐私视图是使用 [Authorize] 设置的,但是当我尝试导航到它时,它会尝试重定向到 ASP.NET 身份页面 /Account/Login(该页面不存在于网络应用程序)。它应该重定向到 IdentityServer 4 项目。

Program.cs

using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
  .AddCookie()
  .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme,
  options =>
  {
    options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.Authority = "https://localhost:5001";
    options.ClientId = "testapplication";
    options.ClientSecret = "test";
    options.ResponseType = "code";
    options.Scope.Add("openid");
    //options.ResponseMode = "form_post";
    options.SaveTokens = true;
    options.UsePkce = true;
  });

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
  app.UseExceptionHandler("/Home/Error");
  // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

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

app.UseEndpoints(endpoints =>
 {
   endpoints.MapControllers();

 });

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

它应该重定向到 https://localhost:5001(身份服务器所在的位置 运行),但它没有。

这是一个 Core 6.0 项目,因此在使用 Core 3.1 示例时可能会遗漏一些内容。

您需要像这样配置身份验证,以便身份验证中间件知道哪个处理程序负责什么任务。

services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(...)
.AddOpenIdConnect(....)