Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4561927
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: 网络与安全

2018-11-20 10:06:05

source:

现在很多站点都支持第三方登录功能。
作为一个技术博客,目标受众项是一批程序员,第三方登录的就选中了github。
这篇文章注意是讲一讲如何给自己的博客添加github自动登录功能。

OAuth 2.0

说到第三方登录,不得不提的一个知识点就是 oauth 2.0。

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 ---- 百度百科

这个协议在认证和授权的时候涉及到:

  1. 服务提供方,例如 GitHub,GitHub上储存了用户的登录名,Email,昵称,头像等信息
  2. 用户
  3. 客户端,例如我的博客就是一个客户端,需要服务方向我提供用户的一些基本信息

OAuth 协议的认证和授权的过程如下:

  1. 用户打开我的博客后,我想要通过GitHub获取改用户的基本信息
  2. 在转跳到GitHub的授权页面后,用户同意我获取他的基本信息
  3. 博客获得GitHub提供的授权码,使用该授权码向GitHub申请一个令牌
  4. GitHub对博客提供的授权码进行验证,验证无误后,发放一个令牌给博客端
  5. 博客端使用令牌,向GitHub获取用户信息
  6. GitHub 确认令牌无误,返回给我基本的用户信息

如何使用GitHub提供的 OAuth 服务

  1. 打开 Setting > Developer setting > OAuth applications
  2. 点击 Register a new application
  3. 填入基本的app信息
  4. 创建成功,会有如下页面

这里的各项配置具体的作用,我们还是看一看GitHub提供的文档 OAuth GitHub Developer Guide

使用第三方网站登录的流程如下:

  1. 转跳到 GitHub 用户授权页面, client_id 必须传
    其他参数如果有需要就传,例如我这里需要获取用户的邮箱信息,就加了一个 scope=user:email
    最终拼成的URL如下:
    github.com/login/oauth/

  2. 当用户同意授权后,链接地址就会转跳到 我们配置页面内的 Authorization callback URL 所填写的URL地址,并且会带上一个 code参数,这个参数在后面获取用户token是必须的一个参数。
    获取到这个code参数后,我会将这个code传到服务器的后台,然后后台调用 github.com/login/oauth/ 这个api,传入client_id client_secret code 这三个参数,可以获取到一个 access_token。

  3. 获取到 access_token 后, 再调用 api.github.com/user? 这个API,就可以获取到基本的用户信息了。
    用户的基本信息内容如下所示, 根据第一步传入的不同的 scope,获取到的用户信息也是不同的。博客后台使用 login 字段作为用户的唯一标示,因为email 可能为空,之前用email发生了一些bug。

{ "login": "Diamondtest", "id": 28478049, "avatar_url": "", "gravatar_id": "", "url": "", "html_url": "", "followers_url": "/followers", "following_url": "/following{/other_user}", "gists_url": "/gists{/gist_id}", "starred_url": "/starred{/owner}{/repo}", "subscriptions_url": "/subscriptions", "organizations_url": "/orgs", "repos_url": "/repos", "events_url": "/events{/privacy}", "received_events_url": "/received_events", "type": "User", "site_admin": false, "name": null, "company": null, "blog": "", "location": null, "email": null, "hireable": null, "bio": null, "public_repos": 0, "public_gists": 0, "followers": 0, "following": 0, "created_at": "2017-05-06T08:08:09Z", "updated_at": "2017-05-06T08:16:22Z" } 

这样,从获取授权,到获得用户信息的流程就走完了。 再根据自己的需求进行用户信息储存,自有登录的接入,用户资料的管理。就完成了一套第三方登录的方案。

目前市面上主流的协议就是 OAuth2.0。 例如 QQ,微信,微博等等。 所以只要搞明白大概流程,那么接入其他供应商的第三方登录也是小菜一碟了。

希望这篇文章对大家有所帮助,有什么意见和想法,也可以在本文底部留言。

阅读(3579) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~