OAuth 2.0 是一种用于授权的开放标准,它允许用户授权第三方应用程序访问他们在其他服务提供的资源上的数据,而不必共享他们的凭据或密码。它被广泛使用,包括 Google、Facebook、Twitter 等大型服务。
这篇文章将介绍如何在 Node.js 和 Express.js 中使用 OAuth 2.0,包括如何配置认证信息、访问 OAuth 2.0 授权服务器和使用 access token 访问受保护的资源服务器。
配置认证信息
在使用 OAuth 2.0 之前,您需要注册一个 OAuth 应用程序,并获得以下信息:
- client ID
- client secret
- 授权终端地址
- token 终端地址
- 范围
client ID 和 client secret 是提供给您的 OAuth 应用程序的唯一标识符和秘密。它们通常与授权终端地址和 token 终端地址一起提供,后者是用于获取 access token 的地址。
范围是指可以访问的资源类型,例如用户资料、邮件、日历等。通过授权终端,应用程序会请求针对某些范围进行授权,因此在注册 OAuth 应用程序时需要明确指定这些范围。
访问 OAuth 2.0 授权服务器
在 Node.js 中,您可以使用 npm
安装许多用于 OAuth 2.0 的库,包括 passport
、oauth
、oauth2orize
和 request
。在本文中,我们将使用 passport
库将 OAuth 2.0 集成到我们的应用程序中。
首先,您需要安装 passport
和 passport-oauth2
:
npm install passport passport-oauth2
接下来,您需要创建一个新的 Passport 实例并配置 OAuth 2.0 策略。例如,如果您想使用 Google 的 OAuth 2.0 API:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- -------------- - --------------------------- ---------------------- --- ---------------- ----------------- -------------------------------------------- --------- --------------------------------------------- --------- ------------------------ ------------- ---------------------------- ------------ -------------------------------------- -- --------------------- ------------- -------- ----- - -- ------------------------------ ---------- ------ ----
以上代码将创建一个名为 google
的新策略,并在用户成功授权时将 access token
和 refresh token
传递给回调函数。
在您的应用程序中,您需要添加以下路由来将用户重定向到授权终端:
app.get('/auth/google', passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login'] }));
此路由将重定向用户到 Google OAuth 2.0 的授权页面,并请求访问 https://www.googleapis.com/auth/plus.login
范围。
当授权成功时,用户将被重定向回您的应用程序,并在路由 /auth/callback
上获得一个包含access token
和 refresh token
的令牌。对于 google
策略,您可以像这样添加回调路由:
app.get('/auth/callback', passport.authenticate('google', { successRedirect: '/profile', failureRedirect: '/' }));
如果验证成功,用户将被重定向到 /profile
路由,否则将被重定向回根路由 /
。
访问受保护的资源服务器
发出 OAuth 2.0 请求后,您可以使用 access token
来访问您的 OAuth 2.0 API。例如,如果您想访问 Google OAuth 2.0 API 的用户资料:
-- -------------------- ---- ------- ----- ------- - ------------------- ------------------- ------------- ---- - ----- ------- - - ---- ------------------------------------------------ -------- - ---------------- ------- - - --------------------- - -- ---------------- --------------- --------- ----- - -- ------- -- ------------------- --- ---- - ----- ------- - ----------------- --------------------- - -------- ------- --- - ---- - ------------------ - --- ---
以上代码将从 https://www.googleapis.com/plus/v1/people/me/
目标地址获得用户资料,并将用户资料呈现到 profile
视图中。
在请求中,您需要在 Authorization
标头中传递 Bearer
令牌前缀和 access token
的值。如果成功,您将从 API 获得带有 access token
的响应。
总结
在本文中,我们介绍了如何在 Node.js 和 Express.js 中使用 OAuth 2.0。我们涵盖了如何配置认证信息、访问 OAuth 2.0 授权服务器和使用 access token 访问受保护的资源服务器。我们还提供了示例代码,以帮助您更好地理解这些概念,并在您的应用程序中实现 OAuth 2.0。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651b564395b1f8cacd303b00