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(....)
使用 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(....)