RP从OP接收到令牌(ID /访问/刷新令牌)并验证ID令牌后,RP是否应将ID令牌存储在资源所有者的会话中?
如果是,则ID令牌用于什么目的?
我认为,出于以下原因,应该存储访问和刷新令牌:
答案 0 :(得分:1)
答案取决于身份提供者(Google,Auth0,IBM,Twitter等)。
在OAuth 2.0中,返回了两个令牌:访问令牌和(可选)刷新令牌。
访问令牌用于授权访问。这可能允许也可能不允许您从userinfo端点访问身份信息。身份令牌确实包含此信息。访问令牌可以是不透明令牌,这意味着令牌中没有存储可解码的信息,或者是签名JWT。信息的数量和类型是特定于身份提供商的。访问令牌的寿命很短并且会过期,通常在3600秒之后。除了本地缓存外,无需存储访问令牌,因为过期后令牌就一文不值了。
刷新令牌用于创建新的访问令牌。结合OAuth 2.0客户端ID和客户端密钥,您可以创建访问令牌,直到刷新令牌过期或无效。
OIDC(OpenID Connect)在OAuth 2.0之上添加了身份。 OIDC提供了一个身份令牌,该令牌提供了由OAuth范围请求并由拥有该身份的用户批准的用户信息。大多数身份提供商都使用其OAuth实现来实现OIDC。身份令牌也将过期并且可以被撤销。
在Google Cloud中,您可以使用身份令牌来提供基于身份的访问。您将具有角色的身份(电子邮件地址)分配给服务(Compute Engine实例或Cloud Storage对象)。如果HTTP标头“ Authorization:Bearer”存在,有效且与电子邮件地址匹配,则根据分配给该服务的身份的角色来授予访问权限。
除非在每个会话中进行唯一加密,否则将OAuth令牌存储在Web会话中是不安全的做法。更好的做法是将OAuth令牌存储在数据库中,并在需要时使用Web会话中存储的不透明ID进行查找。
并非所有的身份提供者都支持所有OAuth授予类型的刷新令牌。这称为“离线”访问,可能会被拒绝,这意味着一旦访问令牌过期,用户将需要再次授权您的应用。