JWT、OAuth 和 OIDC 中受众、发行者和客户端术语之间的差异

Abu*_*ood 6 asp.net oauth-2.0 openid-connect asp.net-core

“知识的一半是在你不知道的时候说我不知道​​”谚语

每次我都尽力保持对这些术语的了解清晰且正确。然而,随着新项目的开发和新知识的获取(SaaS、多租户、两步验证、IdP、SSO),我觉得我仍然没有正确理解它们。任何人都可以给出一个简单而有效的解释吗?

我是一名 ASP.NET 开发人员。

小智 16

我喜欢这句话,所以,这是一些答案。假设我们有一个像这样的 jwt

{
   // ...Some other claim
   iss: "MyKnowledgeCenter.com",
   aud: "Abu.questioning.com",
   // ...Some more other claims
}
Run Code Online (Sandbox Code Playgroud)

首先是关于发行人,代表为iss。这表明你的整个 Jwt 来自哪里。例如:我们在 处有一个访问令牌请求https://abu.Identity.com,但颁发者可能是MyKnowledgeCenter.comhttps://abu.Identity.com或其他任何东西。当我们自己编写身份集中服务器时,我们可以自由地指示这些内容。

简而言之,iss它只是一个 Jwt 声明,与其他声明没有任何区别,只是它的含义是表明该 jwt 是来自本示例self-declared中调用的发行者MyKnowledgeCenter.com

再说一次,关于Audience,它只是 Jwt 中的一个声明,旨在按照我们的意愿设置,代表 Jwt 本身打算使用的一项或一组服务。

我喜欢的例子:我有 2 个微服务 和CatalogUserProfile它们要求客户端发出 JwtMyKnowledgeCenter.com来访问它们的资源。如果在这两个方面,需要对受众进行验证(我们可以设置它),那么,即使标志有效,但aud缺少Catalog,客户端也无法访问Catalog微服务资源。这同样适用于所有其他人。

好的,那么客户在哪里?

嗯,这表示某些设置但未在 Jwt 中重新呈现。

想象一下,我们有一个集中式身份验证服务器,但我们只想为我们自己的服务和客户提供服务。不是整个互联网世界,对吧?

因此,指定这些特定的客户端会受益匪浅,因为我只想在 iO 上提供一个应用程序,另一个来自 android word 和我们自己的网站。因此,有 3 个客户。如果来自任何其他拥有信息的客户的任何请求与这三个请求之一不匹配,我们会立即拒绝它们。

够简单吗?