我正在考虑使用ID令牌代替ID令牌进行授权,以便资源服务器可以验证其标志并从中提取用户ID。这种方法有什么我不知道的地方吗?
我想如果我放弃访问令牌,就不能使用验证端点。对于我们而言,用户授予访问权限的范围无关紧要,因为客户端应用程序和OIDC的身份提供者均归我们所有。
我正在使用该库来实现OAuth2和OpenID服务器。 https://github.com/bshaffer/oauth2-server-php
答案 0 :(得分:3)
ID令牌的使用旨在用于客户端应用程序。客户端使用它来认证最终用户。通过索赔ID令牌转移,所有这些都可以实现。这些声明内置在JWT中。简单来说,ID令牌是一个自包含的令牌。
现在,如果您控制所有预定的参与者,则可以在客户端外部共享ID令牌。考虑一下您通过ID令牌泄漏敏感用户信息的情况。例如,如果ID令牌包含有关性别的声明,而该声明仅供客户使用。但是,当您与第三方共享ID令牌时,您会暴露那些敏感信息。如果存在法律障碍,这可能是犯罪。
另一点是关于ID令牌验证。因此,ID令牌以客户为目标,因此设置了重要声明,例如aud
。当您将ID令牌传递给要使用的后端时,这种验证可能会失败。
有两种解决方案。首先是使用自包含的访问令牌。如今,使用基于JWT的访问令牌已很普遍。有了它们,您将获得相同的解决方案。它将包含最终用户身份,范围值以及令牌验证信息。 Azure AD使用这种方法-check this link。
第二个是使用ID令牌。考虑到您同时控制前端和后端,我认为您可以使用它。但是请注意将来的扩展。特别不要将其暴露给其他方。