关于IDToken和userinfo接口
errol发表于2024-03-28 12:23:11 | 分类为 编程 | 标签为IDTokenuserinfo endpointOAuth认证授权

之前很疑惑id_token的用途,从看到它的那一刻开始。

查了很多相关的资料,看了很多文章,全部都在强调“认证”两个字,为了用于“认证”,可以用于“认证”,只是用于“认证”,听得我犯迷糊。固然知道认证的重要性,但紧接着在“验证”之后,发现只是获取到了一组表示用户的数据信息。

同样的,userinfo接口也能返回类似的结果,因此我不是很明白id_token跟接口的区别。

在经历一段长时间的困惑与不解之后,终于在stackoverflow上找到一种比较容易接受的解释:

ID token or /userinfo for Identity assertion

该文主要提及两点:

1)id_token是用来验证的,它由授权服务器颁发,且里面包含了完整的用户信息;

2)使用id_token来获取信息,可以减少网络请求,但因其使用了非对称加密,客户端需要使用公钥进行验证签名。

文章强调,id_token和userinfo接口的作用是一样的,即在用户通过服务器的认证之后,用于获取用户信息,两者可以任选其一。

当然,也有一点区别:userinfo接口,没有session的作用

因为获取用户信息的访问令牌(access_token)只能表示它自己的过期时间,不能表示当前用户的登录状态,也就是session,而id_token正是为了解决这个问题而存在的,id_token有独立的过期时间,且比访问令牌的短,这段时间内,表示用户正在使用系统。

大概就是这样,虽然可能不太准确,但我觉得这样的说法是比较容易让人理解的。

事实上,对于id_token,我目前没有想到在什么场合使用它。一般情况下,认证的最终目的就是为了获取某些数据,而现在通过访问令牌调用userinfo接口也能达到相同的效果,哪里还需要用到什么会话(session)?

所以,我感觉它好像没啥用处?不过鉴于大家一直都强调它,那就这样吧,可能还有其他特别的用处也说不定。

总得来说,在很多场景里,id_token和userinfo接口的作用都是一样的(调用接口之前需要认证),可以将它们简单地看作是获取用户信息的用途。

其他一些参考文章:

返回