在NancyFx上下文中获取Windows用户

时间:2016-03-02 23:30:01

标签: c# authentication authorization nancy

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

坦率地说,我绝对没有使用Windows用户进行Auth的经验,并且由于一般不推荐(正确地说是这样),因此很难找到具体的信息。

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

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

不幸的是,this.Context.CurrentUser似乎永远不会被填充,并始终是null

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

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

1 个答案:

答案 0 :(得分:5)

Nancy提供NancyContext类型,为您提供进行调用的上下文。

Unfortunatelty Nancy不包含开箱即用的Windows用户。实际上,Nancy没有IUserPrincipal类型的本地知识,这通常用于表示窗口身份。

好消息是Nancy确实与Owin集成,而Owin提供了自己的上下文,其中包含了这些信息,此外,这将被注入Nancy上下文,无需额外费用!

要实现这一点,您需要做的是安装Nancy.Owin nuget包,然后从Owin“Startup”类调用扩展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