验证servicebus后面的过期JWT令牌

时间:2016-02-11 18:19:13

标签: c# security authentication jwt azureservicebus

我有一个Web API服务,允许用户创建一个新资源,如:POST /api/resource。然后,该服务将创建请求放在服务总线上,并以HTTP 202 Accepted响应。

后台进程从服务总线中获取消息,并调用数据访问层来创建资源。但是,为了实施访问控制,数据访问层需要知道用户是谁以确定是否允许他/她创建该资源。 我无法将此授权逻辑移动到前端Web API中,并将受信任的子系统用于数据访问层。

enter image description here

所以我的解决方案是获取数据访问层的访问令牌,并将其与资源创建有效负载一起存储。但这提出了一个问题。由于消息可以在重负载下稍后处理,因此令牌可能在后台进程尝试使用它时已过期。在那一刻,也无法续订令牌。

所以我想在后端层处理时放松对令牌有效性的要求。如果令牌有效(受信任的颁发者等),除了它已超过过期时间,我希望验证中间件接受令牌。

但是没有办法配置System.IdentityModel.Tokens.Jwt令牌处理程序来验证过期的令牌。这可以在不编写我自己的令牌验证器的情况下完成吗?

我的方法有误吗?什么是解决这个问题的可行方案?

2 个答案:

答案 0 :(得分:2)

JWT处理程序具有扩展点,允许您保留所有默认验证逻辑,并仅覆盖要自定义的方面 - 在这种情况下是到期​​验证。您可以通过自己的TokenValidationParameters.LifetimeValidator实现来实现这一目标。

答案 1 :(得分:0)

使用刷新令牌查看。 Auth0 has a good article用一些示例代码解释了背景及其使用方法。