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.OpenIdConnectNuGet包 Authority需指向自定义提供商的元数据地址(提供商通常会暴露/.well-known/openid-configuration端点供自动发现)CallbackPath必须在提供商后台配置为允许的回调地址- 根据提供商文档调整
Scope、ResponseType和声明映射规则 - 若API需要保护资源,JWT Bearer的配置需与提供商的令牌颁发规则匹配
内容的提问来源于stack exchange,提问作者Hamid Elouardaoui
相关产品推荐
相关产品推荐

