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

OpenIddict 4 WebProviders未配置外部认证方案,登录页不显示提供商

解决OpenIddict 4.0.0 WebIntegration外部登录提供商不显示在Identity UI的问题

要让通过OpenIddict.Client.WebIntegration注册的外部登录提供商在Identity默认登录页显示,需要完成以下关键配置:

  • 为外部登录方案设置显示名称与Identity关联
    注册WebProvider时,必须显式设置DisplayName(供UI显示)和SignInScheme(关联到Identity的外部登录流程),示例代码:

    services.AddOpenIddict()
        .AddClient(options =>
        {
            options.UseWebProviders()
                .UseGitHub(github =>
                {
                    github.SetClientId("你的GitHub客户端ID");
                    github.SetClientSecret("你的GitHub客户端密钥");
                    github.DisplayName = "GitHub"; // 必须设置,否则UI无法识别显示
                    github.SetSignInScheme(IdentityConstants.ExternalScheme); // 关联到Identity外部登录流程
                });
        });
    

    Identity的SignInManager.GetExternalAuthenticationSchemesAsync()只会筛选标记为外部登录的方案,SetSignInScheme(IdentityConstants.ExternalScheme)就是给方案打上这个标记。

  • 确保中间件顺序正确
    在Program.cs中,认证中间件的注册顺序必须符合要求:

    app.UseRouting();
    
    app.UseAuthentication();
    app.UseAuthorization();
    
    // 先注册OpenIddict客户端中间件
    app.UseOpenIddict();
    
    // 再映射Identity的Razor Pages和控制器端点
    app.MapRazorPages();
    app.MapControllers();
    

    OpenIddict中间件需要在Identity端点之前注册,才能正确处理外部登录的回调流程。

  • 验证登录页逻辑
    确认Identity登录页的PageModel中正确调用了SignInManager.GetExternalAuthenticationSchemesAsync(),且视图正确渲染方案:

    // Login.cshtml.cs
    public async Task OnGetAsync(string returnUrl = null)
    {
        ReturnUrl = returnUrl;
        ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
    }
    

    视图中循环渲染外部登录按钮:

    <!-- Login.cshtml -->
    @foreach (var login in Model.ExternalLogins)
    {
        <button type="submit" asp-controller="Account" asp-action="ExternalLogin" 
                asp-route-returnUrl="@Model.ReturnUrl" asp-route-provider="@login.Name">
            使用@login.DisplayName登录
        </button>
    }
    

完成以上配置后,外部登录提供商就会自动出现在默认登录页的外部登录区域,无需手动创建链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:20:43