我有一个OWIN自托管应用程序,它有一个用户可以注册的前端。 Nancyfx为路由和模型做了逻辑,在documentation我看到Nancyfx有3种类型的身份验证。
Nancy.Authentication.Forms
)Nancy.Authentication.Basic
)Nancy.Authentication.Stateless
)我已经确定了无状态身份验证,并在this example之后尝试设置基本身份验证形式。
我想进一步扩展这一点,使用JWT获得一些基本信息,并作为基本身份验证的一种形式(例如,客户端有令牌,因此他已经过验证。),但这是我遇到一些问题的地方。
Home -> login -> redirect upon success
的方式导致我的Response.Header.Authorization被清除,不允许我在我的自定义Bootstrapper中捕获令牌。代码:
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;
}
由于我的授权标题在每次请求时都会消失,我需要保留JWT。我认为可以使用OWIN环境或Nancy上下文,但这是可取的+对于安全性的多用户环境会产生什么影响。
OWIN有自己的身份验证管理器,我可以使用它,我已经尝试过它,但它会在成功登录时提供cookie,但它似乎不会在Logout上撤销。我刚刚遇到了一些问题,所以我选择了NancyFx身份验证。 (作为一个更普遍的评论,我认为不是真正的问题)
提前感谢您的帮助!
答案 0 :(得分:1)
关于(1),如果您在成功登录后滚动自己的重定向,请考虑在重定向期间设置授权标头,例如
return Response.AsRedirect("/").WithHeader("Authorization", token);
客户端负责在身份验证后保留有效的JWT令牌。将其作为cookie返回(并在注销时删除它)可以使客户端实现更容易,并避免令牌持久性问题。
关于(2),不是真的,没有必要。 JWT令牌是独立的,这就是他们在无状态身份验证方案中有用的原因。