.Net Core 3.1使用OpenIDConnect认证跳转Account/Login报错原因问询
问题原因
该跳转是Cookie认证方案的默认行为,核心问题出在认证配置的DefaultChallengeScheme参数:
- 你在
AddAuthentication配置中将DefaultChallengeScheme设为了CookieAuthenticationDefaults.AuthenticationScheme,也就是Cookie认证方案作为未登录时的默认挑战处理逻辑 - Cookie认证方案的默认未登录跳转路径就是
/Account/Login,你的项目里没有实现对应路径的接口,所以返回404错误 - 你虽然注册了OpenIDConnect认证方案,但没有指定它作为挑战方案,所以访问加了
[Authorize]特性的接口时,不会触发OIDC的身份认证跳转逻辑,只会走Cookie的默认跳转。
修复方法
方法1:修改全局默认挑战方案
把AddAuthentication中的DefaultChallengeScheme改为你注册OIDC时指定的方案名test即可:
services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; // 替换默认挑战方案为OIDC方案 options.DefaultChallengeScheme = "test"; })
修改后触发未登录挑战时,会直接跳转到你配置的OIDC认证地址,不会再走/Account/Login路径。
方法2:单独为指定接口指定认证方案
如果你不想修改全局配置,也可以直接在[Authorize]特性中指定使用OIDC方案:
[Authorize(AuthenticationSchemes = "test")] public IActionResult Login() { return View(); }
内容的提问来源于stack exchange,提问作者user1005310
相关产品推荐
相关产品推荐

