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

Asp.Net Core API中配置自定义OpenID外部登录提供商示例

在Asp.Net Core API中配置自定义OpenID外部登录提供商

ConfigureServices 配置示例

在Startup.cs的ConfigureServices方法中,直接使用AddOpenIdConnect配置自定义提供商(替代谷歌/脸书的封装扩展方法):

using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();

    // 配置认证服务
    services.AddAuthentication(options =>
    {
        options.DefaultScheme = "Bearer";
        options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
    })
    // 可选:添加JWT Bearer用于API资源验证
    .AddJwtBearer("Bearer", options =>
    {
        options.Authority = "https://your-custom-oidc-provider.com";
        options.Audience = "your-api-resource-id";
    })
    // 核心:配置自定义OpenID Connect提供商
    .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
    {
        // 自定义提供商的基础地址
        options.Authority = "https://your-custom-oidc-provider.com";
        
        // 提供商分配的客户端凭证
        options.ClientId = "your-client-id";
        options.ClientSecret = "your-client-secret";
        
        // 登录回调路径,需与提供商后台配置一致
        options.CallbackPath = "/signin-customoidc";
        
        // 保存获取到的令牌,供后续业务使用
        options.SaveTokens = true;
        
        // 声明需要请求的权限范围
        options.Scope.Clear();
        options.Scope.Add("openid");
        options.Scope.Add("profile");
        options.Scope.Add("email");
        // 若需访问特定API资源,添加对应scope
        options.Scope.Add("your-api-resource-scope");
        
        // 使用授权码流程(适合API场景)
        options.ResponseType = OpenIdConnectResponseType.Code;
        
        // 从用户信息端点获取声明,并映射自定义声明(按需调整)
        options.GetClaimsFromUserInfoEndpoint = true;
        options.ClaimActions.MapJsonKey("custom-claim", "custom_claim_key");
        
        // 配置登出回调路径
        options.SignedOutCallbackPath = "/signout-callback-customoidc";
    });

    services.AddAuthorization();
}

Configure 配置示例

在Configure方法中启用认证和授权中间件,注意执行顺序:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();
    app.UseRouting();

    // 认证中间件必须在授权之前启用
    app.UseAuthentication();
    app.UseAuthorization();

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

关键注意事项

  • 先安装Microsoft.AspNetCore.Authentication.OpenIdConnect NuGet包
  • Authority需指向自定义提供商的元数据地址(提供商通常会暴露/.well-known/openid-configuration端点供自动发现)
  • CallbackPath必须在提供商后台配置为允许的回调地址
  • 根据提供商文档调整Scope、ResponseType和声明映射规则
  • 若API需要保护资源,JWT Bearer的配置需与提供商的令牌颁发规则匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:05:26