- Client:需要授权的客户端,本文中就是【简书】。
- Resource Owner:资源所有者,在本文中你可能会以为是 QQ,但要想清楚,QQ是属于个人的,所以在本文中资源所有者是指【QQ用户】。
- Authorization Server:认证服务器,本文中特指【QQ互联平台】。
- Resource Server:资源服务器,顾名思义,用来专门保存资源的服务器,接受通过访问令牌进行访问。本文特指【QQ用户信息中心】。
- 授权码(Authorization Code):相当于授权服务器口头告诉简书,用户同意授权使用他的QQ登录简书了。
- 令牌(Access Token):相当于临时身份证。
M站服务器会响应一个重定向地址,指向qq授权登录
M站服务器返回重定向地址:
注意到这次访问带了一个参数是callback,以便qq那边授权成功再次让浏览器发起这个callback请求。不然qq怎么知道你让我授权后要返回那个页面啊,每天让我授权的像M站这样的网站这么多。
认证服务器如何知道是简书过来的认证请求?
另外,返回:
- response_type:表示响应类型,必选项,此处的值固定为"code";
- client_id:表示客户端的ID,用来标志授权请求的来源,必选项;
- redirect_uri:成功授权后的回调地址;
- scope:表示申请的权限范围,可选项;
- state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
访问https://graph.qq.com/oauth2.0/authorize
跳转到qq的登录页面,用户输入账号密码点击授权并登录按钮后,一定还会访问qq服务器中校验用户名密码的方法,若校验成功,该方法会响应浏览器一个重定向地址,并附上一个code(授权码)。
302:
访问:https://www.kujiale.com/sns/callback/qq/bS5rdWppYWxlLmNvbQ==&code=xxx
- grant_type:表示授权类型,此处的值固定为"authorization_code",必选项;
- client_id:表示从QQ互联平台申请到的客户端ID,用来标志请求的来源,必选项;
- client_secret:这个是从QQ互联平台申请到的客户端认证密钥,机密信息十分重要,必选项;
- redirect_uri:成功申请到令牌后的回调地址;
- code:上一步申请到的授权码。
校验client真实性
- 发送完该请求后,认证服务器验证通过后就会发放令牌,并返回到简书后台,其中应该包含以下信息:
- access_token:令牌
- expires_in:access token的有效期,单位为秒。
- refresh_token:在授权自动续期步骤中,获取新的Access_Token时需要提供的参数。
在此服务器收到请求后,做了两件再次与QQ沟通的事,即模拟浏览器发起了两次请求。一个是用拿到的code去换token,另一个就是用拿到的token换取用户信息。最后将用户信息储存起来,返回给浏览器其首页的视图