我有一个像这样的南希模块。
public class HomeModule : NancyModule
{
public HomeModule()
{
this.RequiresAuthentication();
var context = this.Context; // this is null
Get["/"] = x =>
{
return "Hello";
};
}
}
OWIN中间件将User
对象的OwinRequest
属性设置为具有身份验证身份的ClaimsPrincipal
。如果我在模块内部破坏并看到Thread.CurrentPrincipal,它会正确设置为我在中间件中设置的ClaimsPrincipal
。然而,RequriesAuthentication
发送回401.顺便说一下,模块内的上下文为空。我做错了什么?
我使用的一些感兴趣的NuGet软件包是
<package id="Microsoft.Owin" version="1.1.0-beta2" targetFramework="net45" />
<package id="Microsoft.Owin.Host.HttpListener" version="1.1.0-beta2" targetFramework="net45" />
<package id="Microsoft.Owin.Hosting" version="1.1.0-beta2" targetFramework="net45" />
<package id="Nancy" version="0.17.1" targetFramework="net45" />
<package id="Nancy.Owin" version="0.17.1" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
答案 0 :(得分:1)
RequiresAuthentication基于Nancy IUserIdentity实现,那么您将需要另一种方法来验证您的ClaimsPrincipal身份。
请参阅此链接以获取一瞥: http://dhickey.ie/post/2014/01/04/Introducing-NancyMSOwinSecurity.aspx
答案 1 :(得分:1)
路由中的Access Context属性,例如
Get["/"] = x => "hello " + this.Context.CurrentUser.UserName;
当前的Nancy auth系统基于IUserIdentity类型,但是OWIN类型是ClaimsPrinciple,所以你需要一些方法来做桥接事情,比如上面提到的包MsOwinSecurity。