.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
相关产品推荐
相关产品推荐

