c# - 在 NancyFx 上下文中获取 Windows 用户

标签 c# authentication authorization nancy

我的任务是创建一个 Intranet Web 应用程序。它最终将由位于 NancyFx API 之上的 SPA 前端(可能是 Angular)组成。

坦率地说,我对使用 Windows 用户进行身份验证的经验绝对为零,并且由于通常不推荐(正确的),因此很难找到这方面的具体信息。

我想根据发送每个请求的用户授权用户。但是,我不知道如何从南希的每个请求上下文中访问用户信息。我已经看过了:

public class IndexModule : NancyModule
{
    public IndexModule()
    {
        Get["/"] = parameters =>
        {
            var User = this.Context.CurrentUser;
            return View["index"];
        };
    }
}

不幸的是,this.Context.CurrentUser 似乎从未被填充并且始终为 null

如何使用 Windows 用户填充每个请求上下文?

或者,我做错了吗?在南锡处理 Windows 用户的推荐方法是什么?我已经研究了两天多了,我很紧张地告诉我的老板我不知道如何处理这个相当重要的问题。

最佳答案

Nancy 提供了 NancyContext 类型来为您提供调用发生的上下文。

不幸的是,Nancy 不包含开箱即用的 windows 用户。事实上,Nancy 对 IUserPrincipal 类型一无所知,该类型通常用于表示 Windows 身份。

好消息是 Nancy 确实与 Owin 集成,并且 Owin 提供了它自己的包含此信息的上下文,此外,这将被注入(inject)到 Nancy 上下文中,无需额外费用!

要实现这一点,您需要做的是安装 Nancy.Owin nuget 包,然后从 Owin“启动”类调用扩展 IAppBuilder.UseNancy():

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // other owin config here...

        // Register Nancy with Owin middleware...
        app.UseNancy();
    }
}

这将使您能够像这样从 NancyContext 访问 Owin 环境:

var owinEnv = context.GetOwinEnvironment(); // context = your NancyContext
var windowsUser = (IPrincipal) owinEnv["server.User"];

或者,如果您不喜欢 Owin,也可以这样做:https://stackoverflow.com/a/28976742/569662

关于c# - 在 NancyFx 上下文中获取 Windows 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35760334/

相关文章:

c# - 在 RavenDb 中,我能否在将这些结果传递给转换器之前查看特定索引查询的结果?

c# - 字符串列表的排列算法

apache - 通过 AJP 将 REMOTE_USER 转发到 tomcat(例如,用于 shibboleth)

rest - 使用 Azure API 管理 REST API 时的 AuthenticationFailedInvalidHeader

asp.net-mvc - ASP.NET MVC : Authorization inside an Action - Suggested Patterns or this is a smell?

ruby-on-rails - 错误率: Different user roles for each new created record?

c# - 在 C# 中不使用 Invoke 访问控件

c# - 如何在 WPF View XAML 中显示 List<KeyValuePair<string,string>>

javascript - 使用 token 在后端和前端识别用户进行身份验证

ruby-on-rails - last_login_at 不工作(空)w/Authlogic Magic Columns