我的任务是创建一个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用户的推荐方法是什么?我已经研究了两天以上,而且我很担心告诉我的老板我不知道如何处理这个相当重要的问题。
答案 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