Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用NancyFx、OWIN和JWT进行无状态身份验证_C#_Authentication_Owin_Nancy - Fatal编程技术网

C# 使用NancyFx、OWIN和JWT进行无状态身份验证

C# 使用NancyFx、OWIN和JWT进行无状态身份验证,c#,authentication,owin,nancy,C#,Authentication,Owin,Nancy,我有一个OWIN自托管应用程序,它有一个用户可以注册的前端。Nancyfx负责路由和模型的逻辑,在本文中,我看到Nancyfx提供了3种类型的身份验证 表单(Nancy.Authentication.Forms) 基本(Nancy.Authentication.Basic) 无状态(Nancy.Authentication.Stateless) 我已经确定了无状态身份验证,接下来我尝试设置一种基本的身份验证形式 我想在这方面做进一步的扩展,使用JWT可以方便地获得一些基本信息,并作为基本身份

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

  • 表单(
    Nancy.Authentication.Forms
  • 基本(
    Nancy.Authentication.Basic
  • 无状态(
    Nancy.Authentication.Stateless
我已经确定了无状态身份验证,接下来我尝试设置一种基本的身份验证形式

我想在这方面做进一步的扩展,使用JWT可以方便地获得一些基本信息,并作为基本身份验证的一种形式(例如,客户端有令牌,所以他被验证了),但这就是我遇到一些问题的地方

  • 我的身份验证方式
    Home->login->redirect on success
    导致Response.Header.Authorization被清除,不允许我在自定义引导程序中捕获令牌
  • 代码:

    protectedoverride void RequestStartup(TinyIoCContainer requestContainer、IPipelines管道、NancyContext上下文)
    {
    允许进入铝土矿(管道);
    无状态身份验证.Enable(管道,requestContainer.Resolve().Config());
    }
    //返回ClaimsPrincipal或Null;
    公共无状态身份验证配置()
    {
    如果(_stat==null)
    {
    _stat=新的无状态身份验证配置(VerifyToken);
    }
    返回状态;
    }
    
  • 由于我的授权头会在每个请求中消失,因此我需要持久化JWT。我认为使用OWIN环境或Nancy上下文是可能的,但这是否可取+对于多用户环境的安全性会有什么影响

  • OWIN有自己的身份验证管理器,我可以使用它,我已经尝试过了,但它往往在成功登录时提供cookie,而在注销时它似乎不会撤销cookie。我只是在总体上遇到了一些问题,所以我决定使用NancyFx身份验证。(我想这不是一个更一般的问题)

  • 提前感谢您的帮助

    >(1),如果您在成功登录后翻转了自己的重定向,请考虑在重定向期间设置授权头,例如

    return Response.AsRedirect("/").WithHeader("Authorization", token);
    
    实际上,客户机负责在身份验证后持有有效的JWT令牌。将其作为cookie返回(并在注销时删除)可以简化客户端实现,并避免令牌持久性问题

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

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