当我们使用gcloud auth print-access-token
和gcloud auth print-identity-token
时,访问令牌和身份令牌之间有什么区别?
在谷歌云环境中,我们可以使用其中一种而不能使用另一种的情况是什么。
为什么gcloud auth
和gcloud auth application-default
有print-access-token
,而print-identity-token
只用于gcloud auth
定义和谷歌上下文中的
访问令牌(并不总是JWT)用于通知API令牌的承载者已被授权访问API并执行预定的一组动作(由授予的作用域指定)。
-
访问令牌不得用于身份验证。访问令牌无法判断用户是否已通过身份验证。
-
在Google上下文中,OAuth 2.0访问令牌对于验证服务帐户对Google Cloud API的访问。
ID令牌用于基于令牌的身份验证。这些令牌是签名的JSON Web令牌JWT,用于断言身份,不一定对资源进行任何隐式授权。这些令牌只会声明调用者是谁,令牌被发送到的任何服务都可以通过验证JWT提供的签名有效负载来验证令牌的完整性。应用程序在用户成功验证后接收ID令牌,然后使用ID令牌并从中提取用户信息,然后可以使用这些信息来个性化用户体验。
- aud:字段描述了创建此令牌的服务名称援引如果服务接收到id_token,则必须验证其完整性(签名)、有效性(是否过期)以及aud:字段是它期望看到的预定义名称。如果名称不匹配,服务应该拒绝该令牌,因为它可能是要重播的用于另一个系统
- 在Google上下文中,OIDC ID令牌对于验证接受OpenID Connect的服务的服务帐户标识
考虑下面的示例用例
- 访问令牌:
要获得项目的提升权限,服务管理员可以通过创建属于某个服务帐户的OAuth 2.0访问令牌来模拟该服务帐户以调用Google Cloud API。令牌的生存期很短,因此提升的权限是临时的。使用短命令牌可以帮助您在身份和资源中实现最低特权原则。当生产环境中出现紧急情况,并且服务管理员需要短期提升授权进行调试时,它也很有用。
- ID令牌:
通过创建属于服务帐户的OIDC ID令牌,在谷歌云上运行的服务可以向部署在第三方云提供商上的另一个服务(如数据管道作业)进行身份验证。如果目标服务配置了OIDC,则身份验证将成功。
进入gcloud CLI命令:
- 管理gcloud凭据和应用程序默认凭据单独
- 如果您激活了服务帐户密钥文件,则此文件只能用于gcloud命令,但不适用于应用程序默认凭据
- gcloud auth应用程序的默认命令集仅用于管理应用程序默认值,与中的命令无关gcloud身份验证
- gcloud auth应用程序默认打印访问令牌
- 这将通过web流获取您的凭据,并将其存储在应用程序默认凭据"的已知位置这个"应用程序默认凭据"的已知位置是一个文件命名为application_default_credentials.json,位于您的本地~/.config/gcloud/目录。现在,您运行的任何代码/SDK都可以自动查找凭据。当你想要本地测试通常在服务器上运行的代码使用服务器端凭据文件。在这些情况下,gcloud auth应用程序默认打印访问令牌在使用进行身份验证时工作用户身份(通过web流),但使用凭据作为代理服务帐户
- gcloud auth打印访问令牌
- 显示当前服务帐户的访问令牌
- gcloud身份验证打印标识令牌
-
打印指定帐户的身份令牌。如果没有指定,将使用当前活动帐户。
-
谷歌服务帐户和用户都可以获得id_tokens,但使用重要区别:用户登录oauth流问题id_tokens静态绑定到web或oauth2 client_id流与…有关也就是说,如果用户登录到web应用程序涉及oauth2,提供程序向浏览器将aud:字段绑定到oauth2client_id。另一方面,服务帐户可以参与其中它可以从谷歌接收一个指定了aud:字段的id_token早些时候。
-
您可以使用gcloud命令为服务打印identitytoken帐户、模拟服务帐户和计算引擎实例。