nodejs如何实现OAuth2.0授权服务认证

  

小编给大家分享一下nodejs如何实现OAuth2.0授权服务认证,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

JS是什么

JS是JavaScript的简称,它是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一部分,主要用于web的开发,可以给网站添加各种各样的动态效果,让网页更加美观。

OAuth是一种开发授权的网络标准,全拼为open authorization,即开放式授权,最新的协议版本是2.0。

举个栗子:

有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。

传统方法是,用户将自己的Google用户名和密码,告诉"云冲印",后者就可以读取用户的照片了。这样的做法有以下几个严重的缺点。

  1. "云冲印"为了后续的服务,会保存用户的密码,这样很不安全。

  2. Google不得不部署密码登录,而我们知道,单纯的密码登录并不安全。

  3. "云冲印"拥有了获取用户储存在Google所有资料的权力,用户没法限制"云冲印"获得授权的范围和有效期。

  4. 用户只有修改密码,才能收回赋予"云冲印"的权力。但是这样做,会使得其他所有获得用户授权的第三方应用程序全部失效。

  5. 只要有一个第三方应用程序被破解,就会导致用户密码泄漏,以及所有被密码保护的数据泄漏。

所以OAuth就诞生了!

  1. Third-party application:第三方应用程序,本文中又称"客户端"(client),即上一节例子中的"云冲印"。

  2. HTTP service:HTTP服务提供商,本文中简称"服务提供商",即上一节例子中的Google。

  3. Resource Owner:资源所有者,本文中又称"用户"(user)。

  4. User Agent:用户代理,本文中就是指浏览器。

  5. Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。

  6. Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

登录层提供令牌(token)的生成,其中token包括:有效期、权限范围。客户端拿到token去访问受限资源。

  1. access_token:请求资源时需要携带的token,即访问token。

  2. refresh_token:刷新token,如果access_token过期,可以使用该token获取一份新的access_token和新的refresh_token。一般refresh_token时效性较长,比如一年,而access_token时效性较短,比如几分钟。

  3. 权限范围:即指定客户端可以获取的资源权限范围。

OAuth授权模式

OAuth有四种授权模式,分别为:

  1. 授权码模式(authorization code)

  2. 简化模式(implicit)

  3. 密码模式(resource owner password credentials)

  4. 客户端模式(client credentials)

1、授权码模式

授权码模式是最为严密的授权模式,整体流程为:浏览器携带必要信息至授权页面,正常登录成功后,返回一个code(授权码),客户端拿到code后在后台获取拿code换取token。

nodejs如何实现OAuth2.0授权服务认证

nodejs如何实现OAuth2.0授权服务认证

2、密码模式

密码模式,简单地理解即为使用用户名密码等参数获取access_token,它的步骤如下:

  1. 用户向客户端提供用户名和密码。

  2. 客户端将用户名和密码发给认证服务器,向后者请求令牌。

  3. 认证服务器确认无误后,向客户端提供访问令牌。

nodejs如何实现OAuth2.0授权服务认证

3、refresh_token的应用

refresh_token被用来获取新的access_token和refresh_token,使用方式简单如下:

nodejs如何实现OAuth2.0授权服务认证

nodejs如何实现OAuth2.0授权服务认证