【问题标题】:Stateless authentication with NancyFx, OWIN and JWT使用 NancyFx、OWIN 和 JWT 进行无状态身份验证
【发布时间】:2017-04-25 05:03:12
【问题描述】:

我有一个 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 被清除,不允许我在自定义引导程序中捕获令牌。

代码:

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,它似乎不会在注销时撤销它。我只是遇到了一些问题,所以我选择了 NancyFx 身份验证。 (我想这不是一个更笼统的评论)

提前感谢您的帮助!

【问题讨论】:

    标签: c# authentication owin nancy


    【解决方案1】:

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

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

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

    关于(2),不是真的,没必要。 JWT 令牌是自包含的,这就是它们在无状态身份验证场景中有用的原因。

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      相关资源
      最近更新 更多