身份服务器 4 不会使用自定义身份验证处理程序



我有一个用于MVC Core的工作AuthenticationHandler<>,它运行良好。现在我想在身份服务器 4 中重用整个东西,但框架似乎对我不利。

我已添加

builder.Services.AddAuthentication().AddScheme<MyWebsiteOptions, MyWebsiteAuthenticationHandler<TIdentity, MyWebsiteUser>>(CredentialStoreConstants.SCHEMA_NAME, x => { x.ConnectionString = options.ConnectionString; });

就像我说的,它对MVC核心部分100%有效。现在,我无法像/connect/authorize/callback一样访问 IdentityServer4 端点。我已经一遍又一遍地阅读了身份服务器 4 文档,但不知何故,我在这里错过了一些关键的东西。

有人有想法吗?我相信我不是第一个遇到这种情况的人。

身份服务器端点就是作为管道中间件实现的普通端点。

身份服务器4上的相关文件包括:

  • 中间件:https://github.com/IdentityServer/IdentityServer4/blob/master/src/IdentityServer4/src/Hosting/IdentityServerMiddleware.cs
  • 端点路由器(及其接口(:https://github.com/IdentityServer/IdentityServer4/blob/master/src/IdentityServer4/src/Hosting/EndpointRouter.cs
  • 端点
  • 实现(例如令牌端点(:https://github.com/IdentityServer/IdentityServer4/blob/master/src/IdentityServer4/src/Endpoints/TokenEndpoint.cs

这意味着他们不在MVC中,所以你不能和他们一起使用你的AuthenticationHandler

提示:如果您阅读了所有文档并且答案不存在,那么是时候深入研究代码了:https://github.com/IdentityServer/IdentityServer4

答案。这比我想象的要明显得多。

对于标准的 .NET Core 身份验证,在AuthenticationHandler<>时成功通过是不够的

如果您有自定义用户类型和自定义登录流程,则在成功验证所述自定义用户类型的凭据后,还需要执行类似操作。

有时,您需要从数据库中检索相应的用户,并将其检索到 MVC Core 身份验证流的其余部分。

因此,在类似AuthenticationHandler<>().Succeeded == true之后,您需要执行以下操作:

var systemUser = await _userResolver.GetUserAsync(user.Email);
await _signInManager.SignInAsync(systemUser, true);

最后一行是最重要的,因为它初始化了正确的MVC Core用户会话

最新更新