Asp.net mvc 调用ThinktectureV3在api服务上验证令牌的目的是什么?

Asp.net mvc 调用ThinktectureV3在api服务上验证令牌的目的是什么?,asp.net-mvc,api,asp.net-web-api2,thinktecture,Asp.net Mvc,Api,Asp.net Web Api2,Thinktecture,我正在使用thinktecture identity server v3。我创建了web应用程序和web api服务。当我访问web应用程序时,我从identity server获得了访问令牌。我使用这个令牌作为承载令牌与web api通信。一切正常 但我注意到,在api服务器上,对于每个带有访问令牌的请求,它都会自动调用identity server。如果idenity服务器已启动,则它已服务,否则它将给出未授权错误 这通电话的目的是什么? 它在通话中携带了什么数据? 如果是为了验证权限,则会

我正在使用thinktecture identity server v3。我创建了web应用程序和web api服务。当我访问web应用程序时,我从identity server获得了访问令牌。我使用这个令牌作为承载令牌与web api通信。一切正常

但我注意到,在api服务器上,对于每个带有访问令牌的请求,它都会自动调用identity server。如果idenity服务器已启动,则它已服务,否则它将给出未授权错误

这通电话的目的是什么? 它在通话中携带了什么数据? 如果是为了验证权限,则会给identity server带来更大的负担。 可以跳过这个电话吗? 你无法避免这一点:

当用户使用identity server进行身份验证时,它将创建一个令牌,该令牌将被提供给客户端以标识自身。此令牌由标识服务器动态创建,标识服务器会记住它 客户端将此令牌呈现给您的Web API服务器,该服务器不知道该令牌的任何标志,但知道谁可以验证它。因此,您的Web API服务器与identity server通信,以便它可以从identity server获取标识 这就是它以这种方式工作的原因


如果要避免这种行为,可以将外部标识服务器中的标识映射到由自己的web API服务器控制的标识,并使用自己控制的身份验证方法来避免从外部标识服务器查询令牌。然而,如果您使用的是identity server,则正是因为您不想自己实现它,所以此选项没有意义。当您想将用户从流行的外部身份服务器(如Google或Facebook)映射到您控制下的用户时,可以使用此选项。

对于每个请求,api都会去验证令牌。这给identity server带来了更大的负担。我的观点是,api服务应该在不访问identity server的情况下进行自我验证。假设有一个包含10家公司的建筑。有人来见X公司的总经理。首先,他在大门口停了下来,保安人员询问了他的详细情况,并给了一些cardtoken。他从大门来到X公司,出示代币。然后他核实了卡片并接受了它。但在我们的观点中,X公司再次前往个人安全部门验证令牌。这是正确的方式吗?门口的安保人员正在组建一个外部公司S,并给访客一个公司S的令牌。在您公司的方式下,您不知道来自S的令牌是否有效,因此您联系S,他们确认令牌有效。从这一点开始,你可以做两件事。1您可以继续这样做,每当您的用户从S出示令牌时,请向S公司检查其是否有效2向他提供您自己的令牌X控制下的任何身份验证方法,因此,当此人回来时,您在不与S再次联系的情况下重新确认他。我的问题是,我们已经信任外部公司S作为身份验证提供商,为什么我们应该回去验证它。如果不查看您的代码和配置,您很难给出答案。您是否已在Web API中获得身份提供商的公钥以验证令牌,而无需再次联系Id提供商?看起来您没有或没有使用它。为什么不在这里添加缓存?您可以继续,并且只在第一次对颁发者进行验证,并缓存响应以供后续请求使用。此外,您可以控制缓存到期时间,以确保在设置的时间间隔后再次触发此检查。您可能正在生成对客户端不透明的引用令牌。它只是一个字符串,没有供客户端验证的信息。若您正在生成jwt令牌,那个么api可以通过验证颁发者、受众和验证签名来自行进行验证。