OAuth2 authorization_code模式 客户端向认证服务器申请token 为何没有看到 user_id 字段?

access_token 肯定是要与 user_id 绑到一起,按照 OAuth2 标准为何没有 user_id 字段?

文档参看 4.1.3 节。

http://tools.ietf.org/html/rfc6749#section-4.1.3

如果没有 user_id,那么生成的 token,都是给到 client_id 对应的 user_id。

而存取用户资源的时候,又需要 user_id 来选择是哪个用户。

还是说,按照文档的流程对了即可,添加字段是可以自己把握的?

阅读 9.9k
7 个回答

你可以想象成为3个点,客户端->授权服务器->业务服务器,客户端与业务服务器通过API交互数据时需要user_id而get_authorization_code这个阶段是客户端与授权服务器的事,只要提供类似这样的参数就可以了。
client_id=the_client_id&response_type=code&redirect_uri=client_redirect_uri&scope=scope1,scope2&state=654321其中前面2个参数是必传的(根据http://tools.ietf.org/html/rfc6749#section-4.1.1)。

一种方法服务器端会做好token和user_id 的一一映射,存取用户资源的时候,服务器会根据token找到对应的user_id。

1.引导用户点击链接进入OAuth登录流程,携带client_id
2.用户输入信息点击登录,(此时已经有了user_id了)
3.OAuth平台生成token(服务端映射user、session、private_cache等数据与client_id绑定,比如user_id+client_id+client_ip+rand_str & sha1)
4.输出token给服务器

如果是获取当前用户,不用根据user_id来选择,发token就可以识别了,原理同session一样。很多网站,特别是腾讯旗下的,根本就不会给你user_id

access_token 要与 user_id 和 clint_id 绑在一起
那个第一次登陆返回的code中记录了user_id和client_id的~~

每个用户的access_token是不一样的,有了access_token再去换user_id

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进