在NancyFx上下文中获取Windows用户

rom*_*the 1 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"];
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

tom*_*ern 5

Nancy提供NancyContext类型,为您提供调用发生的上下文.

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

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

要做到这一点,你需要做的是安装Nancy.Owin nuget包,然后从Owin"Startup"类调用extention IAppBuilder.UseNancy():

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

        // Register Nancy with Owin middleware...
        app.UseNancy();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将使您能够从NancyContext访问Owin环境,如下所示:

var owinEnv = context.GetOwinEnvironment(); // context = your NancyContext
var windowsUser = (IPrincipal) owinEnv["server.User"];
Run Code Online (Sandbox Code Playgroud)

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