2013-07-08 26 views
1

我有一個這樣的Nancy模塊。OWIN託管的Nancy模塊調用RequiresAuthentication返回401

public class HomeModule : NancyModule 
{ 
    public HomeModule() 
    { 
     this.RequiresAuthentication(); 

     var context = this.Context; // this is null 

     Get["/"] = x => 
     { 
      return "Hello"; 
     }; 
    } 
} 

甲OWIN中間件設置與通過驗證的身份OwinRequest對象的屬性UserClaimsPrincipal。如果我在模塊內部中斷並看到Thread.CurrentPrincipal,它將正確設置爲我在前面設置的中間件中的ClaimsPrincipal。然而,RequriesAuthentication發回401. BTW,模塊內的上下文爲空。我做錯了什麼?

一些感興趣的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" /> 

回答

1

訪問上下文屬性在你的路線,像

Get["/"] = x => "hello " + this.Context.CurrentUser.UserName; 

目前南希身份驗證系統是基於類型IUserIdentity,但OWIN類型是ClaimsPrinciple,所以您需要一些方法來完成橋接事物,如上面提到的包MsOwinSecurity。