oauth2.0 授权码登录后,是如何和应用进行交互的?
比如授权 qq 登录后,我要发帖,通过什么方式应用知道我是我的?
比如授权 qq 登录后,我要发帖,通过什么方式应用知道我是我的?
@Xusually 这一步是什么时候发生的呢?用户是如何得到访问 A 应用的 jwt 的呢?
项目系统怎么知道,该用户是“我”, 阅读 auth + 登陆系统的资料可知;
oauth 第三方 怎么让你知道这个人是谁,返回一个可查询的 token,让你去获取这个人资料
回到你的问题
你应该认真去看下原理以及认真看下请求流程图;
流程大概可以是
用户访问你页面 — 跳到 QQ 鉴权页面 — QQ 带回一个 code — 你用这个 code 通过一定的方式获取了一个唯一的值,无论它叫 uid 也好,openid 也好,qq 也好 —- 取回你的系统
拿着这个值,去查表,查到之后,转换成你鉴权的方式,token 也好,就算你返回 123 也好,每次你鉴权看到这个值,就代表是这个用户。
在上面这堆话里面,都是每个 oauth 写烂的东西,
拆成 3 个基本问题就是
怎么从第三方拿到一个唯一值
怎么把这个唯一值跟你系统的用户联系起来
知道用户之后,返回什么让他可以通过项目鉴权系统
能拿到 openid 就说明用户授权登录了,相当于用户输入账户密码并验证通过了,接下来的登录步骤是一样的,就是写 cookie 什么的
比如 shiro 框架,qq 登录后,返回 code 和用户信息,你需要在自己系统里面创建一个用户来绑定 qq,并且进行自动登录,使用 shiro 可以实现无密码自动认证和授权,shiro 认证后,会产生一个 jessionid 发给客户端(浏览器),浏览器保存在 cookie 中,当你浏览器请求服务端时,会带上这个 cookie,shiro 框架取到这个 cookie 后,经过判断 jessionid 有效,即浏览器已登录用户
至于如何知道谁登录的,shiro 的认证方法可以重构,一般也需要自己重构。认证方法在认证完成后,可以往 session 写入用户信息,当页面请求服务端时,controller 或 service 可以获取这个用户 session,就知道当前操作用户是谁了