【发布时间】:2016-06-23 01:33:19
【问题描述】:
在使用 OWIN 在 Web API 中使用 JWT 进行了数小时研究之后,我仍然对 Audience 所代表的目的感到困惑。有些页面说受众是验证令牌的资源服务器。其他人则认为 Audience 是访问资源服务器的客户端,并且实际上经常将此值称为 client_id 和 Audience 互换。
根据 JWT 规范,Audience 似乎是资源服务器 (https://www.rfc-editor.org/rfc/rfc7519#page-9)。因此,我认为每个 API 应用程序都不需要拥有多个受众。但是许多实现正在向单个 Web API 应用程序添加多个受众,并且 Microsoft 的 JwtBearerAuthenticationOptions 实现也允许这样做。
在这些实现中,他们交替使用受众和 client_id(这里是一个示例:https://auth0.com/docs/server-apis/webapi-owin)我觉得这将您的资源服务器与您的客户端紧密耦合,并在您的资源服务器上强制执行客户端声明。我觉得这是身份验证服务器的工作(因此能够根据 JWT 规范向令牌添加多个受众声明)。
我觉得我在这里遗漏了一些重要的东西。我的目标是能够开发可供多个客户端使用的多个 API,但必须在资源服务器和身份验证服务器上动态管理受众声明似乎违背了 JWT 的精神。然而,许多人以其他方式实现了它,甚至 MS 也允许每个资源服务器有多个受众,所以我希望在这里能澄清一些。
【问题讨论】:
标签: asp.net-web-api oauth-2.0 owin jwt