【问题标题】:Identity Server 4 won't use custom Authentication HandlerIdentity Server 4 不会使用自定义身份验证处理程序
【发布时间】:2020-02-14 00:23:11
【问题描述】:

我有一个适用于 MVC Core 的 AuthenticationHandler,它运行良好。现在我想为 Identity Server 4 重新使用整个东西,但该框架似乎对我不利。

我已经添加了

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

就像我说的那样,它 100% 可用于 MVC 核心部分。现在,我无法使用它访问像 /connect/authorize/callback 这样的 IdentityServer4 端点。我已经一遍又一遍地阅读了 Identity Server 4 文档,但不知何故我在这里遗漏了一些关键的东西。

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

【问题讨论】:

    标签: c# .net-core identityserver4


    【解决方案1】:

    Identityserver 端点就是这样,作为管道中间件实现的普通端点。

    Identityserver4上的相关文件有:

    这意味着它们已脱离 MVC,因此您不能将 AuthenticationHandler 与它们一起使用

    提示:如果您阅读了所有文档但没有找到答案,那么是时候深入研究代码了:https://github.com/IdentityServer/IdentityServer4

    【讨论】:

    • 好的,这是朝着正确方向迈出的非常好的一步。但是如果它不在 MVC 的手中,为什么默认的 MVC AuthenticationHandler 似乎可以完美地工作?
    【解决方案2】:

    回答。这比我想象的要明显。

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

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

    在某一时刻,您需要从数据库中检索相应的用户并进入 MVC Core 身份验证流程的其余部分。

    所以在AuthenticationHandler<>().Succeeded == true 这样的事情之后,你需要这样做:

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-04
      • 2017-06-26
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2010-11-08
      • 1970-01-01
      相关资源
      最近更新 更多