如何用我们的自定义身份验证替换 NancyFx 基本身份验证?

问题描述

我们被迫使用 NancyFX,无论是 1.4.4 还是 2.0.0。我们使用 .NET Framework 4.7.2 和 Visual Studio 2019。该解决方案在 OWIN 中自托管,并在 Windows Server 2012 R2 或 2016 上运行。

当前的源代码使用 Nancy.Authentication.Basic.1.4.1,我们被迫用我们自己的自定义身份验证(例如绕过浏览器 HTTP 401 处理)替换它,该身份验证从一个自定义安全令牌中检索在用户在我们的新自定义登录视图上输入他们的凭据或外部应用使用他们的凭据调用我们的 API 之后,外部系统。

我在互联网上阅读了有关 Nancy 和 OWIN JWT 中的无状态和令牌身份验证的各种帖子,以及这些 SO 帖子:

我也下载了示例,但似乎没有任何东西可以正常或轻松地工作。

当前代码在 CustomBootstrapper 中有这个:

pipelines.EnableBasicAuthentication(new BasicAuthenticationConfiguration(
                                    container.Resolve<IUserValidator>(),"OurRealm"));

由于代码已经设置为使用 this.RequiresAuthentication() 和 ICurrentUser,并且我已经成功注释掉了上面的代码暂时将 UserValidator 的代码放在我的模块的其中一个 Get 中(只是为了证明它有效),现在我需要删除我的临时调用替换引导程序代码调用 UserValidator

我想下载 Nancy 源代码添加我们自己的 CustomAuthentication,但我觉得这不是最好或最简单的方法。有哪位南希大师可以回答这个问题吗?

解决方法

我创建了一个继承自 NancyModule 的 BaseViewerModule,并将我的所有模块更改为继承基础模块。然后我添加了一个检查以查看用户的请求是否包含安全令牌,如果没有,则显示一个登录表单,调用我的身份验证服务器,将一个 UserIdentity 以安全令牌作为密钥存储在缓存中,并将令牌返回给请求的模块。

然后我在 pipelines.BeforeRequest 中添加了一个钩子,以检查缓存中是否存在该项目,如果找到则将 CurrentUser 设置为该项目。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...