Nancy无状态身份验证不会在多个并发请求上触发

时间:2017-09-27 12:51:45

标签: c# angular nancy

我有一个使用无状态身份验证运行的自托管Nancy应用程序。 我还有一个角度4.x应用程序同时在此api上运行3个请求,不同的端点但相同的标题(相同的Authorization令牌等....)。

3个目标终点:

api/v2/vnos/{idVno:Guid}/vnos

api/v2/vnos/{idVno:Guid}/distributors

api/v2/vnos/{idVno:Guid}/final-users

我当前的Bootstrapper auth config:

protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{

    base.ApplicationStartup(container, pipelines);

    VnoAppDAO appDao = container.Resolve<VnoAppDAO>();

    StatelessAuthenticationConfiguration configuration = new StatelessAuthenticationConfiguration(ctx =>
    {
        if (string.IsNullOrEmpty(ctx.Request.Headers.Authorization))
        {
            Response response = new Response { StatusCode = HttpStatusCode.Unauthorized };
            return null;
        }

        var returned = appDao.GetVnoAppFromToken(ctx.Request.Headers.Authorization).Fold(() =>
        {
            logger.Debug("Didn't find user for {0} Token", ctx.Request.Headers.Authorization);
            return null;
        }, (vnoapp) =>
        {

            App app;
            if (vnoapp.IdVno == new Guid("f968e957-1b4c-4a21-a09f-459e80dcf91c"))
            {
                return app = new App(vnoapp.Name, vnoapp.IdVno, true);
            }
            else
            {
                return app = new App(vnoapp.Name, vnoapp.IdVno);
            }
        });

        logger.Debug("Type returned when auth = {0}", returned.UserName);
        ctx.CurrentUser = returned;
        return (IUserIdentity)returned;

    });

    StatelessAuthentication.Enable(pipelines, configuration);
}

这里是我的应用提供的日志:

enter image description here

所以我们在这里看到的是,在第一次尝试时,我的所有请求都有效,但是当我重新发送它们时,其中2个失败了(在curentUser日志中没有出现在管道之前的模块中)我得到的两个例外是由模块中的前管道引发的,因为请求没有通过身份验证,他们没有声明并且被拒绝了。

我无法理解为什么这些请求并不总是通过nancyFx身份验证。

编辑:验证逻辑的工作原理如下:

如果Authorization标题为空,则响应将为401(未授权)

如果它不是空的,它会检查它是否可以在数据库中找到使用提供的令牌发出请求的人。如果它没有找到任何内容,那么它就会记录下来并没有找到[...]&#34;否则它将返回在数据库中找到的对象。(应将其设置为上下文中的currentUser)

0 个答案:

没有答案