我正在考虑使用id令牌代替id令牌进行授权,以便资源服务器可以验证其签名并从中提取用户ID。我不知道这种方法有什么缺点吗?

我想如果放弃访问令牌,就无法使用验证端点。对于我们来说,用户授予访问权限的范围无关紧要,因为客户端应用程序和OIDC的身份提供者均归我们所有。

我正在使用该库来实现OAuth2和OpenID服务器。
https://github.com/bshaffer/oauth2-server-php

最佳答案

ID令牌的用途旨在用于客户端应用程序。客户端使用它来认证最终用户。通过索赔ID令牌转移,所有这些都可以实现。这些声明已内置到JWT中。简而言之,ID令牌是一个独立的令牌。

现在,如果您控制所有预定的参与者,则可以在客户端外部共享ID令牌。考虑一下您通过ID令牌泄漏敏感用户信息的情况。例如,如果ID令牌包含有关性别的声明,而该声明仅供客户使用。但是,当您与第三方共享ID令牌时,您会暴露那些敏感信息。如果存在法律障碍,这可能是犯罪。

另一点是关于ID令牌验证。因此,ID令牌以客户为目标,因此设置了重要声明,例如aud。当您将ID令牌传递给要使用的后端时,这种验证可能会失败。

有两种解决方案。首先是使用自包含的访问令牌。如今,使用基于JWT的访问令牌已很普遍。有了它们,您将获得相同的解决方案。它将包含最终用户身份,范围值以及令牌验证信息。 Azure AD使用这种方法-check this link

第二个是使用ID令牌。考虑到您同时控制前端和后端,我认为您可以使用它。但是请注意将来的扩展。特别不要将其暴露给其他方。

08-07 18:21
查看更多