理解 OAuth

本次分享的是阮一峰老师 2019 年写的介绍 OAuth 的 3 篇系列文章,深入浅出,值得一看。

  1. OAuth 2.0 的一个简单解释
  2. OAuth 2.0 的四种方式
  3. GitHub OAuth 第三方登录示例教程

下面是我总结的要点:

一、OAuth 是什么?

OAuth 2.0 是一种授权机制,主要用来给颁发令牌(token),获得用户在第三方网站上的数据。

比如,A 网站可以不要求用户在本网站注册,只要让用户提供 Ta 在某个第三方网站(比如 Github)上的数据,那么就能登录 A 网站。

理解 OAuth

其中,用户数据是从第三方网站授权得到的 token 中拿到的;同时,A 网站还要在第三方网站上登记,这样在请求 token 时,第三方能知道是谁在要我的用户数据。

二、OAuth 如何实现?

现在最常用的是通过授权码(authorization code)的方式进行 OAuth 授权,获取访问令牌(access token)。

以 Github OAuth 授权为例,步骤如下:

  1. A 网站让用户跳转到 GitHub。
  2. GitHub 要求用户登录,然后询问”A 网站要求获得 xx 权限,你是否同意?”
  3. 用户同意,GitHub 就会重定向回 A 网站,同时发回一个授权码。
  4. A 网站使用授权码,向 GitHub 请求令牌。
  5. GitHub 返回令牌.
  6. A 网站使用令牌,向 GitHub 请求用户数据。

具体如下:

  1. 先在 Github 上 登记应用
  2. 使用登记信息,访问 https://github.com/login/oauth/authorize?client_id=7e015d8ce32370079895&redirect_uri=http://localhost:8080/oauth/redirect
  3. 在 Github 上同意授权后,GitHub 跳转到 redirect_uri 指定的地址,携带授权码,如 http://localhost:8080/oauth/redirect?code=859310e7cecc9196f4af
  4. oauth/redirect 是我们的后端接口,接口内部 POST 请求 https://github.com/login/oauth/access_token?client_id=${clientID}&client_secret=${clientSecret}&code=${requestToken},得到 access_token,
  5. 最后使用 access_token,就能请求得到用户数据了
const result = await axios({
  method: 'get',
  url: `https://api.github.com/user`,
  headers: {
    accept: 'application/json',
    Authorization: `token ${accessToken}`
  }
});

(完)

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!