作者回复: id_token是用户身份令牌、access_token是访问令牌,这两个一定要区别开,access_token永远不能被任何第三方软件去解析,就是一个令牌,用来后续请求受保护资源。
1、id_token是包含代表用户身份信息的声明,access_token是访问受保护资源的凭证,是用来请求平台上资源的,id_token的秘钥可以通过access_token来请求获取,如果access_token也使用JWT格式的数据,两个秘钥肯定不会相同。
2、ID令牌id_token是在访问令牌access_token基础上的补充,而不是替换访问令牌。“这是因为这两种令牌有不同的目标受众和用途。这种双令牌的方式可以让访问令牌在常规的OAuth 2.0中那样继续保持对第三方软件不透明,而让ID令牌能够被解析。而且,这两种令牌还具有不同的生命周期,ID令牌通常会很快过期。ID令牌代表一个单独的身份认证结果,并且永远不会传递给外部服务,而访问令牌可以在用户离开后的很长时间内用于获取受保护资源。”比如举个例子小明使用了小兔打单软件的批量导出订单功能,如果耗时相对比较长,小明不必一直在场。
3、id_token和access_token没有关系,access_token过期用refresh_token刷新,只是在第一次登陆的时候将它们两个同时返回给了三方软件,id_token的使命本身就是用来标识用户的,这个标识不是用户名,用户登录的时候用的是用户名而不是这个id_token。
OIDC是在OAuth 2.0 的基础上产生的。
作者回复: Access Token 无论什么格式的都不能被第三方软件解析,永远不透明。
ID Token是OIDC在OAuth2.0的基础上实现身份认证的产物,从某个意义上讲可以这样理解,但实际上实现一个OIDC还需要实现RP 和 OP。
作者回复: 要通知
作者回复: 像Kerberos、SAML这些的特点就是复杂,至少相对于OAuth 2.0 要复杂的多,现在基于OAuth 2.0的OIDC是趋势。
作者回复: 重复1-6的本意是要表达都需要进行1-6步骤,在图中我们分了已登录和未登录两种情况,那个步骤3是在未登录的情况下发生的。
作者回复: id_token是想客户端证明用户是谁,已通过身份认证。这个问题有一个假设就是”ID令牌和访问令牌应同时使用“,这是不对的。
关于access_token和id_token的区别:
第一,ID 令牌是对访问令牌的补充,而不是要替换访问令牌。之所以采用这样双令牌的方式,就是想让早先存在的访问令牌,可以在 OAuth 2.0 中继续保持对第三方软件的不透明性,而让后来新增的 ID 令牌要能够被解析,目的就是方便应用到身份认证协议中。
第二,ID 令牌和访问令牌有不同的生命周期,ID 令牌的生命周期相对来说更短些。因为 ID 令牌的作用就是代表一个单独的身份认证结果,它的使命就是用来标识用户的。而这个标识并不是用户名,用户登录的时候用的是用户名而不是这个 ID 令牌,所以如果用户注销或者退出了登录,ID 令牌的生命周期就随之结束了。
访问令牌可以在用户离开后的很长时间内,继续被第三方软件用来请求受保护资源服务。比如,小明使用了小兔打单软件的批量导出订单功能,如果耗时相对比较长,小明不必一直在场。
作者回复: 需要的,a2.com要识别用户标识,需要解析id_token的值。
作者回复: CAS是实现SSO的一种方式,如果是保护的服务端资源,当然OAuth是最好的选择。
作者回复: access_token与id_token不会合并,它们分别代表了两个用途的事物,id_token表示身份认证,是一个用户标识,用户退出登录id_token随机失效,但是access_token只要不过期还是会被第三方软件用来请求访问受保护资源的。
作者回复: 是的
作者回复: 是的,在04中我们指的是access_token,那个时候还没有接触和提到ID_TOKEN。
id_token 的密钥的粒度,这个要结合我们自己对安全要求的级别来对待,粒度一般是有这样几种,到第三方软件应用级别粒度,到第三方软件应用的用户级别粒度。实际上id_token的安全要求是要比access_token的低。
作者回复: 无论普通的access_token还是JWT格式的access_token,归根结底还是【访问令牌】,访问令牌永远对第三方软件不透明,JWT格式的access_token包含用户信息,也是在当第三方软件请求到受保护资源的时候,受保护资源去解析识别。
id_token是我们说的OIDC这样的协议在OAuth 2.0的基础上增加的一个可以包含用户ID属性的事物。
作者回复: userinfo 端点,授权端点、令牌端点都是OAuth 2.0协议里面的惯用叫法,这里的userinfo 端点表示的是平台一方支持获取详细用户信息的地方。
app_id是第三方软件的标识。
作者回复: session是什么?会话,而JWT本身就包含了”会话信息“,相当于一个session,但这个session并不是传统意义上所指的session存储。