我有一个使用无状态身份验证运行的自托管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);
}
这里是我的应用提供的日志:
所以我们在这里看到的是,在第一次尝试时,我的所有请求都有效,但是当我重新发送它们时,其中2个失败了(在curentUser
日志中没有出现在管道之前的模块中)我得到的两个例外是由模块中的前管道引发的,因为请求没有通过身份验证,他们没有声明并且被拒绝了。
我无法理解为什么这些请求并不总是通过nancyFx身份验证。
编辑:验证逻辑的工作原理如下:
如果Authorization
标题为空,则响应将为401
(未授权)
如果它不是空的,它会检查它是否可以在数据库中找到使用提供的令牌发出请求的人。如果它没有找到任何内容,那么它就会记录下来并没有找到[...]&#34;否则它将返回在数据库中找到的对象。(应将其设置为上下文中的currentUser)