前言
在现今多样化的 Web 开发环境下,用户认证和授权变得越来越重要。为了方便开发者在 Node.js 应用中实现认证和授权,社区涌现出了大量的认证和授权库。
@gitterhq/passport-oauth2 是一个基于 Passport 的 OAuth2 认证库,可以帮助开发者简单且自由地实现 OAuth2 认证协议。本文将介绍如何使用该 npm 包进行认证。
安装
首先,安装下面这些依赖:
passport
用于用户验证@gitterhq/passport-oauth2
是我们要使用的 npm 包express-session
确保 Node.js 应用支持会话数据(session data)cookie-parser
和express
用于管理会话 Cookies 和解析 HTTP 请求
npm i passport @gitterhq/passport-oauth2 express-session cookie-parser express
注册应用
在让用户使用第三方账户进行认证前,开发者必须注册认证应用。这个过程需要开发者提供一些信息,包括应用名称、描述、应用图标等等。
要注册一个 Gitter OAuth2 应用,请移步 Gitter Developer Dashboard,并选择 "Create New Application"。在填写必要信息后,记得保存应用的 client_id
和 client_secret
,因为它们会在之后的开发过程中用到。
创建路由和认证中间件
-- -------------------- ---- ------- ----- -------- - -------------------- ----- -------------- - ---------------------------------------------------- ----- ------- - --------------------------- ----- ------------ - ------------------------- ----- ------- - ------------------- ----- --- - ---------- ------------------------ ----------------- ------- ----------------- ------- ----- ------------------ ----- ---- ------------------------------- ---------------------------- ------------------------------------- ----- - ---------- ------ --- --------------------------------------- ----- - ---------- ------ --- ---------------- ---------------- ----------------- ------------------------------------------ --------- -------------------------------------- --------- --------------------- ------------- ------------------------- ------------ -------------------------------------------------------- -- --------------------- ------------- -------- --- - -- ------------ ------ -------- --------- ------------ -------------- - --- ---------------------- --------------------------------- ------------------------------- ------------------------------- - ---------------- -------- --- ------------- ---- - -- ------------------- ------------------ ---
认证过程
现在让我们来深入学习一下 OAuth2 认证协议,更好地理解代码实现过程。
OAuth2 有 4 个角色:
- Resource Owner:资源的拥有者,即用户。
- Client:客户端,即开发者的应用。
- Authorization Server:认证服务器,用于给用户提供授权。
- Resource Server:资源服务器,存储了用户分享的数据。当一个应用程序请求访问用户数据时,会从这个服务器上获取数据并将其返回给应用端。
OAuth2 认证协议主要通过如下几个步骤来实现:
- 用户访问 Client,Client 发现用户未得到认证,于是将用户重定向到 Authorization Server(AS)。
- 用户向 AS 提供身份信息,AS 核对身份,如果验证通过,在授权页面上向用户提供同意或拒绝的选项。
- 用户同意授权。
- AS 向 Client 返回一个授权码(Authorization Code)。
- Client 向 AS 提供授权码,并要求换取 Access Token。
- AS 确认授权码,小心翼翼地将 Access Token 授权给客户端。
- Client 使用 Access Token 向 Resource Server(RS)发送请求。
- RS 确认 Access Token,如果验证通过,返回数据给 Client。
我们现在已经完成了路由和认证中间件的开发,那么什么时候使用它呢?也就是什么时候用户需要进行认证?
/login/auth
是一个 GET 请求路由,当用户从客户端向该路由发起请求时,客户端将用户重定向到认证服务器 AS 的登录认证页面。在认证成功后,AS 会将用户重定向到 /login/auth/callback
路由,用户完成授权,并获取到 Access Token。
在我们这个例子中,成功认证后,Access Token 将存在返回的 request
对象中,request.session
对象中也存储了当前的认证状态,开发者可以在整个会话过程中,检查是否存在认证会话。这意味着我们不必在每个请求路由中都进行身份验证,并且可以在任何时候访问用户的身份数据。
示例代码
在下面这个示例中,我们假设用户每次进入页面前,需要执行身份验证。请注意,如果用户没有通过有效认证,将被重定向到 Gitter 的认证服务器。
-- -------------------- ---- ------- ----- -------- - -------------------- ----- -------------- - ---------------------------------------------------- ----- ------- - --------------------------- ----- ------------ - ------------------------- ----- ------- - ------------------- ----- --- - ---------- ------------------------ ----------------- ------- ----------------- ------- ----- ------------------ ----- ---- ------------------------------- ---------------------------- ------------------------------------- ----- - ---------- ------ --- --------------------------------------- ----- - ---------- ------ --- ---------------- ---------------- ----------------- ------------------------------------------ --------- -------------------------------------- --------- --------------------- ------------- ------------------------- ------------ -------------------------------------------------------- -- --------------------- ------------- -------- --- - -- ------------ ------ -------- --------- ------------ -------------- - --- -- ---- ------------ -------------------- ----- ---- -- - -------------------------------------- --- ----------------- ----- ---- -- - -------------------- -- ------------------ ------------------ --- ------------------ ----- ---- -- - ------------- ------------------ --- ---------------------- --------------------------------- ------------------------------- ------------------------------- - ---------------- -------- --- ------------- ---- - -- ------------------- ------------------ --- -------- ------------------------ ---- ----- - -- ----------------------- - ------ ------- - ----------------------- -
总结
在这篇文章中,我们详细了解了如何使用 @gitterhq/passport-oauth2
库进行 OAuth2 认证授权,也学习了一些 OAuth2 认证协议的相关内容。希望这篇文章对您的前端开发有帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/83545