在现代 Web 应用程序中,用户的身份认证变得非常重要。OAuth 协议被广泛使用来实现身份验证和授权。本文将介绍如何在 Deno 中使用 OAuth 进行用户身份认证。
什么是 OAuth?
OAuth 是一个开放标准,允许用户授权第三方应用程序使用他们的数据而不共享他们的密码。OAuth 的版本有多个,通常情况下,我们使用的是 OAuth 2.0。OAuth 2.0 是一个比较流行的协议,用于验证和授权用户。它基于令牌的身份验证机制,不需要将密码发送给第三方应用程序。
OAuth 工作流程
OAuth 2.0 的工作流程如下所示:
- 用户请求访问第三方应用程序。
- 第三方应用程序请求访问授权服务器。
- 授权服务器向用户提供一个登录页面或弹出式窗口,以验证用户身份并询问用户是否授权第三方应用程序。
- 如果用户同意授权,授权服务器将向第三方应用程序发送访问令牌。
- 第三方应用程序将访问令牌用于访问资源服务器。
在 Deno 中使用 OAuth 进行用户认证
在 Deno 中,我们可以使用第三方 OAuth 库来实现用户身份认证。我们使用的是 Velociraptor 作为我们的运行脚本工具,这是由 Deno 团队开发的简化脚本管理的工具。
通过以下步骤,在 Deno 应用程序中集成 OAuth:
步骤 1:安装依赖项
我们使用的是第三方库 deno-oauth2 来实现 OAuth。安装依赖项,
$ deno install -A --unstable https://deno.land/x/oauth2_cli/oauth2.ts
步骤 2:在 Google 上创建 OAuth 应用
我们将使用 Google 作为 OAuth 服务提供程序。
首先,我们需要在 Google 进行身份验证并创建一个 OAuth 应用程序。访问 Google Cloud Console 并创建一个新的项目。
接下来,转到“API 和服务”>“凭据”部分,并创建一个新凭据。
选择 OAuth 应用程序类型作为“Web 应用程序”。
填写应用程序的名称和主页网址,之后添加“授权重定向 URL”。
接下来,我们需要区分“授权 URL”和“令牌 URL”。
授权 URL 是用户向 Google 注册应用程序时打开的网址。
令牌 URL 是应用程序向 Google 提供访问令牌的 URL。
我们还需要为应用程序指定“scope”。Scope 定义了可以访问哪些 Google API。
步骤 3:设置 OAuth 凭据
我们需要设置 OAuth 凭据的客户端 ID 和客户端密钥,以便在应用程序中使用。
const OAuthClient = new OAuth2Client({ clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", redirectUri: "YOUR_REDIRECT_URI (e.g. http://localhost:8080/callback)", authorizationEndpoint: "https://accounts.google.com/o/oauth2/auth", tokenEndpoint: "https://oauth2.googleapis.com/token", scopes: ["YOUR_SCOPES"], });
步骤 4:OAuth 授权代码
现在我们将编写一个具有基本功能的 OAuth 授权代码。此代码将获取授权代码并使用该代码获取访问令牌。
-- -------------------- ---- ------- ------ ----- -------- ---------------------- - ----- --- - ------------------------- ----- - ---- - - ----- --------- ----- ------- ----- ------- -------- ------- ----- --- ---------- -------- --- ------ ----- - -- --- ----- ---- ---------- ---- ------ ----- -------- -------------- ------- - ----- - ---- - - ----- --------------------------- ------ ------------------ -
该代码将生成授权 URL,显示在命令行提示符下。
用户浏览到 URL 并授权该应用程序后,系统会提示用户输入授权代码。
最后,该代码将返回访问令牌,供其他应用程序使用。
步骤 5:实现 OAuth 身份认证
有了访问令牌,我们就可以在应用程序中使用它来验证用户身份。我们可以根据访问令牌从 Google API 中获取用户信息。
export async function getUserInfo(token: string) { const { body } = await OAuthClient.get("https://www.googleapis.com/userinfo/v2/me") .set("Authorization", `Bearer ${token}`) .send(); return body; }
上述代码将使用访问令牌调用 Google API,从而揭示用户的用户信息。
示例代码
以下是完整的示例代码:
-- -------------------- ---- ------- ------ -------------- ---- ------------------------------------ ------ ------- ---- ------------------------------------- ----- ----------- - --- -------------- --------- ----------------- ------------- --------------------- ------------ ------------------ ----- --------------------------------- ---------------------- -------------------------------------------- -------------- -------------------------------------- ------- ---------------- --- ------ ----- -------- ---------------------- - ----- --- - ------------------------- ----- - ---- - - ----- --------- ----- ------- ----- ------- -------- ------- ----- --- ---------- -------- --- ------ ----- - ------ ----- -------- -------------- ------- - ----- - ---- - - ----- --------------------------- ------ ------------------ - ------ ----- -------- ------------------ ------- - ----- - ---- - - ----- ------------------------------------------------------------ --------------------- ------- ---------- -------- ------ ----- -
该示例将生成授权 URL、获取访问令牌以及获取用户信息并打印到控制台上。
结论
本文介绍了如何在 Deno 中集成 OAuth,以进行用户身份认证。我们还使用 Google 作为 OAuth 服务提供程序,并提供了示例代码以供参考。
OAuth 是一种强大的协议,可以帮助我们保护用户数据,同时确保对资源的访问权限。在开发 Web 应用程序时,应该考虑到身份验证和授权问题,并集成 OAuth 协议。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6708b33ad91dce0dc873b437