You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移MS Identity认证至Asp.Net Core5报错,如何追踪中间件并开日志?

问题描述

我正在尝试在C#中对接login.microsoftonline.com实现认证功能。先在portal.azure.com注册了测试应用,通过其“Quickstart”自动生成了一个ASP.Net Core 3.1示例项目,配置的重定向URI如下:

https://localhost:44321/signin-oidc
https://localhost:44321/
https://localhost:44368/
https://localhost:5001

该自动生成的ASP.Net Core 3.1项目编译运行正常,可完成认证。

之后我将该项目中的代码复制到另一个ASP.Net Core 5项目中,此项目已成功使用ASP.Net Core Identity实现本地账户(基于ASP.Net Core Identity数据库)及Google OAuth2认证,我希望用Microsoft认证实现同样的效果,但操作后浏览器出现无帮助的错误提示:

"Error loading external login information"

问题: 如何追踪MS Identity和/或OpenID Connect中间件的底层运行过程?是否有办法启用“详细日志”?

以下是报错项目的Startup.cs代码片段:

using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
...
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc.Authorization;
...
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;
...
public void ConfigureServices(IServiceCollection services) {
    // MS Identity Store: 这部分正常工作,和OpenID Connect问题无关...
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")
    ));
    services.AddDatabaseDeveloperPageExceptionFilter();
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    // 从可正常运行的示例中复制的"AzureAd"配置已放入appsettings.json
    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));

    services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    });
    services.AddRazorPages()
         .AddMicrosoftIdentityUI();
         ...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
    ...
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();
解决方案:启用详细日志与排查步骤

一、启用Microsoft Identity和OpenID Connect的详细日志

ASP.NET Core中可以通过配置日志级别捕获中间件的底层运行细节:

  1. 修改appsettings.Development.json,添加或更新日志配置:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      // 启用以下类别的详细日志
      "Microsoft.AspNetCore.Authentication": "Debug",
      "Microsoft.Identity.Web": "Debug",
      "Microsoft.IdentityModel": "Debug"
    }
  }
}
  • Microsoft.AspNetCore.Authentication:捕获所有认证中间件的流程日志,包括OAuth2/OpenID Connect的跳转、回调、令牌验证等步骤
  • Microsoft.Identity.Web:针对Microsoft Identity Web库的详细日志
  • Microsoft.IdentityModel:捕获令牌解析、签名验证等底层安全操作日志
  1. 确保控制台日志输出配置(ASP.NET Core 5的Program.cs):
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddConsole(); // 确保控制台输出日志
            logging.AddDebug(); // 可选:添加Debug输出方便调试
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

启动项目后,控制台会输出认证流程的每一步细节,包括回调时的请求参数、令牌内容、错误信息等。

二、额外排查点(结合你的迁移场景)

除了日志,还可以检查以下常见问题:

  • 重定向URI配置:确保Azure Portal中注册的应用添加了当前ASP.NET Core 5项目的signin-oidc回调地址(比如项目运行在https://localhost:5001,需添加https://localhost:5001/signin-oidc),3.1项目的端口可能和5.0项目不同,这是高频错误点。
  • 认证Scheme冲突:项目已集成Identity和Google OAuth2,需明确指定Scheme避免冲突:
services.AddAuthentication(options =>
{
    options.DefaultScheme = IdentityConstants.ApplicationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
.AddIdentityCookies(); // 确保Identity的Cookie认证正常工作
  • 回调路由检查:确认项目中signin-oidc路由正常(Microsoft Identity Web会自动注册,但自定义路由规则可能影响)。

内容的提问来源于stack exchange,提问作者paulsm4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:05:28