在使用OWIN在Web API中使用JWT进行了几个小时的研究之后,我仍然对Audience的目的所代表的内容感到困惑。有些页面表示受众是验证令牌的资源服务器。其他人建议,受众是访问资源服务器的客户端,并且经常实际上将此值称为client_id和受众。
根据JWT规范,Audience似乎是资源服务器(https://tools.ietf.org/html/rfc7519#page-9)。所以我认为每个API应用程序不需要有多个Audience。但是许多实现都在为一个Web API应用程序添加多个Audience,而Microsoft的JwtBearerAuthenticationOptions实现也允许它。
在这些实现中,他们可以互换地使用受众和client_id(这里是一个示例:https://auth0.com/docs/server-apis/webapi-owin)我觉得这太过紧密地将资源服务器与客户端耦合,并在资源服务器上强制执行客户端声明。我觉得这是认证服务器的工作(因此能够根据JWT规范向令牌添加多个受众声明)。
我觉得我在这里缺少一些重要的东西。我的目标是能够开发多个客户端可以使用的多个API,但是必须在资源服务器和auth服务器上动态管理受众声明似乎违背了JWT的精神。然而很多人已经实现了它,甚至MS允许每个资源服务器有多个受众,所以我希望这里有一些清晰度。
答案 0 :(得分:0)
audience
标识了预期的"消费者"令牌。通常,应用程序(API)从客户端应用程序接收令牌。
期望JWT需要检查(并验证)audience
以防止某人发送(有效)令牌的服务。
您可以想象 API-1 和 API-2 使用基于角色的安全性的情况,并且用户获得声明 admin 适用于 API-1 。如果 API-2 没有检查audience
那么用户可以发送令牌(包含管理员声明)并成功(当它不应该'吨)。