开放平台OAuth 2.0授权开发实践

由于网站的用户规模小,一开始没有自建用户体系,使用的是国内流行的几个开放平台的第三方帐号登录。比如:新浪微博、QQ、淘宝、人人网。
这些网站使用的都是OAuth 2.0协议实现的认证和授权,下面是我按照自己理解画的OAuth 2.0认证和授权流程图:

使用开放平台帐号登录

整个流程设计3个角色:用户,或者称浏览器;应用服务器,也就是用户访问的站点;开放平台(微博、QQ等)。这里以Weibo为例详细讲讲各个步骤:

  1. 用户点击网站页面上的“登录”按钮:
    微博登录按钮
  2. 网站收到用户请求后,向开放平台请求一个Authorization Code。网站发送的这个请求url中会包含开放平台分配的APP KEY和一个回调地址。回调地址的作用是用户授权后开放平台通过该回调地址将access token返回给应用服务器。
  3. 浏览器页面跳转到开放平台的登录页面,要求用户登录。可以注意到这时浏览器地址栏中的地址是开放平台的域名,而非用户访问的站点,因此不必当心应用站点知道你的开放平台用户名密码。
    微博登录页面
  4. 用户输入用户名、密码,点击“登录”
  5. 用户在开放平台登录成功后,如果用户之前没有对当前访问的站点授权,或者已经取消了授权,那么开放平台会将页面跳转到授权确认页面:
    授权页面
    默认都是最普通的权限。如果网站想要更高级的权限,需要将权限对应的编码作为scope参数添加到2中的url中。
  6. 用户根据网站需要的权限内容选择授权或拒绝。不管用户有没有授权,其实到了这一步都已经完成了2A中的Authentication即认证这一步了。只是如果用户没有对网站授权的话,网站就无法获取到用户的数据,无法进一步为用户提供相关服务。
  7. 用户授权以后,开放平台会生成一个Authorization Code,并通过网站提供的回调地址将该code发送给网站。
  8. 网站在拿到授权码(Authorization Code)后,就可以使用授权码到开放站点换取Access Token了。Authorization Code只表示得到了用户授权,具体访问用户资源还需要Access Token。
  9. 开放站点将Access Token返回给应用服务器。
  10. 网站使用Access Token请求用户基本信息。这里由于各个开放平台的api不一样,有时候可能需要不止一次请求,但逻辑上已经没有多大区别了。一旦网站有了这个Access Token,就可以调用开放平台提供的接口请求授权的用户资源。
    Access Token有一个有效时间,通常是24小时。在这段时间内,如果用户不做修改密码或取消授权等动作,网站都可以使用该token获取用户的资源。
  11. 开放平台校验Access Token无误后,将当前用户的基本信息返回给站点。通常这段信息中会包括用户的昵称、性别、头像等。
  12. 站点获取到用户信息后,将页面跳转到登录成功页面,并使用获取到的信息为用户提供一个友好的页面提示,也可以利用该信息为用户提供更多的个性化服务。

你可能感兴趣的:(登录,授权,oauth2,第三方帐号)