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

.NET Core 2.0中OpenIdConnect如何配置client_secret_basic认证

解决方案:配置OpenIdConnect使用client_secret_basic认证方式

你遇到的问题是因为.NET Core的OpenIdConnect中间件默认会采用client_secret_post方式发送客户端凭证,而你的IdentityServer仅支持client_secret_basic(即HTTP Basic认证)的凭证传递方式。只需要在配置中添加一行指定认证方法的代码就能解决这个问题:

services.AddAuthentication(options => {
    options.DefaultAuthenticateScheme = "Cookies";
    options.DefaultSignInScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie()
.AddOpenIdConnect(options => {
    options.SignInScheme = "Cookies";
    options.Authority = Authority; // 注意:你原代码里拼写错成了Auhtority,建议修正这个笔误
    options.ClientId = ClientID;
    options.ClientSecret = ClientSecret;
    options.ResponseType = "code";
    options.SaveTokens = true;
    // 添加这一行,强制使用client_secret_basic认证方式
    options.TokenEndpointAuthenticationMethod = "client_secret_basic";
    options.Scope.Add("profile");
    options.Scope.Add("rrn");
});

关键说明:

  • TokenEndpointAuthenticationMethod属性是专门用来控制客户端向Token端点传递凭证的方式。当你将它设置为"client_secret_basic"后,中间件会自动把ClientId和ClientSecret拼接成ClientId:ClientSecret的格式,经过Base64编码后放在HTTP请求的Authorization头中发送,完全符合你的IdentityServer要求的认证规则。
  • 顺便提醒下原代码里的Auhtority拼写错误,虽然这不是当前问题的诱因,但修正后能避免后续可能出现的配置失效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:19:13