1

我有一个像这样的 Nancy 模块。

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

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

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

OWIN 中间件将对象的User属性设置为具有经过身份验证的身份。如果我在模块内部中断并看到 Thread.CurrentPrincipal,它被正确设置为我之前在中间件中设置的值。然而,发回 401。顺便说一句,模块内的上下文为空。我做错了什么?OwinRequestClaimsPrincipalClaimsPrincipalRequriesAuthentication

我使用的一些感兴趣的 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" />
4

2 回答 2

1

RequiresAuthentication 基于 Nancy IUserIdentity 实现,那么您将需要另一种方法来验证您的 ClaimsPrincipal 身份。

请参阅此链接一瞥: http ://dhickey.ie/post/2014/01/04/Introducing-NancyMSOwinSecurity.aspx

这是代码: https ://github.com/NancyFx/Nancy.MSOwinSecurity/blob/master/src/Nancy.MSOwinSecurity/NancyContextExtensions.cs

于 2014-04-03T11:38:31.330 回答
1

访问路线中的 Context 属性,例如

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

当前的 Nancy 身份验证系统是基于 IUserIdentity 类型,但 OWIN 类型是 ClaimsPrinciple,所以你需要一些方法来做桥接的事情,比如上面提到的包 MsOwinSecurity。

于 2016-04-20T12:07:36.040 回答