使用NancyFx,OWIN和JWT进行无状态身份验证

时间:2017-03-30 14:46:03

标签: c# authentication owin nancy

我有一个OWIN自托管应用程序,它有一个用户可以注册的前端。 Nancyfx为路由和模型做了逻辑,在documentation我看到Nancyfx有3种类型的身份验证。

  • 表格(Nancy.Authentication.Forms
  • 基本(Nancy.Authentication.Basic
  • 无国籍(Nancy.Authentication.Stateless

我已经确定了无状态身份验证,并在this example之后尝试设置基本身份验证形式。

我想进一步扩展这一点,使用JWT获得一些基本信息,并作为基本身份验证的一种形式(例如,客户端有令牌,因此他已经过验证。),但这是我遇到一些问题的地方。

  1. 我验证Home -> login -> redirect upon success的方式导致我的Response.Header.Authorization被清除,不允许我在我的自定义Bootstrapper中捕获令牌。
  2. 代码:

    protected override void RequestStartup(TinyIoCContainer requestContainer, IPipelines pipelines, NancyContext context)
    {
       AllowAccessToConsumingSite(pipelines);
       StatelessAuthentication.Enable(pipelines, requestContainer.Resolve<IStatelessAuthConfigurationFactory>().Config());
    }
    
    //Returns ClaimsPrincipal or Null;
    public StatelessAuthenticationConfiguration Config()
    {
        if(_stat == null)
        {
            _stat = new StatelessAuthenticationConfiguration(VerifyToken);
        }
        return _stat;
    }
    
    1. 由于我的授权标题在每次请求时都会消失,我需要保留JWT。我认为可以使用OWIN环境或Nancy上下文,但这是可取的+对于安全性的多用户环境会产生什么影响。

    2. OWIN有自己的身份验证管理器,我可以使用它,我已经尝试过它,但它会在成功登录时提供cookie,但它似乎不会在Logout上撤销。我刚刚遇到了一些问题,所以我选择了NancyFx身份验证。 (作为一个更普遍的评论,我认为不是真正的问题)

    3. 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

关于(1),如果您在成功登录后滚动自己的重定向,请考虑在重定向期间设置授权标头,例如

return Response.AsRedirect("/").WithHeader("Authorization", token);

客户端负责在身份验证后保留有效的JWT令牌。将其作为cookie返回(并在注销时删除它)可以使客户端实现更容易,并避免令牌持久性问题。

关于(2),不是真的,没有必要。 JWT令牌是独立的,这就是他们在无状态身份验证方案中有用的原因。