使用Azure AD B2C登录时/signin-oidc返回404(已调用UseAuthentication)
问题:Azure AD B2C隐式流中/signin-oidc返回404
我遇到的问题和另外两个类似问题一致,但已执行对应解决方案(调用app.UseAuthentication())。
我的场景是使用Azure AD B2C的隐式流,提交同意页面后,向/signin-oidc发送的POST请求返回404。请求负载包含state字段和id_token字段,似乎未配置处理该请求的中间件,但尚未找到配置方法。
需说明的是我正在使用GitHub Codespaces,且已解决站点代理到localhost的问题。
我的Program.cs代码
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI; using Microsoft.IdentityModel.Logging; var builder = WebApplication.CreateBuilder(args); var services = builder.Services; services.Configure<CookiePolicyOptions>(options => { // 判断给定请求是否需要用户同意非必要Cookie options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.Unspecified; // 按照文档处理SameSite Cookie兼容性 options.HandleSameSiteCookieCompatibility(); }); // 配置Azure AD B2C用户登录 services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration, Constants.AzureAdB2C); services.AddControllersWithViews() .AddMicrosoftIdentityUI(); services.AddRazorPages(); // 将appsettings中的AzureAdB2C配置绑定到IOptions services.AddOptions(); services.Configure<OpenIdConnectOptions>(builder.Configuration.GetSection(Constants.AzureAdB2C)); // 因为使用GitHub Codespaces,需要在这里设置RedirectUri services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options => { options.Events.OnRedirectToIdentityProvider = async n => { n.ProtocolMessage.RedirectUri = "https://codespacename.preview.app.github.dev/signin-oidc"; // todo: 移到配置文件或动态生成 await Task.CompletedTask; }; }); // 向容器添加服务 builder.Services.AddControllersWithViews(); var app = builder.Build(); // 配置HTTP请求管道 if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); IdentityModelEventSource.ShowPII = true; } else { app.UseExceptionHandler("/Home/Error"); // 默认HSTS值为30天,生产环境可根据需求修改 app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseForwardedHeaders(); //app.UseCookiePolicy(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.MapControllers(); app.Run();
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

