最近,在 Web 开发领域,OpenID Connect(OIDC)标准已经得到了广泛的应用。OIDC 是一种基于 OAuth 2.0 协议的身份验证和授权协议。 OIDC 针对于 Web 应用程序客户端和已经等外部 IdP 进行整合。
在 Node.js 中,可以使用 oidc-rp-gen npm 包轻松集成 OIDC 验证,并获得用户身份验证信息。该 npm 包是一个用于生成 OpenID Connect 客户端配置的命令行工具,方便开发人员快速进行 OIDC 集成。
在本篇文章中,我们将介绍如何使用 oidc-rp-gen npm 包进行 OIDC 集成。
安装 oidc-rp-gen
首先,我们需要安装 Node.js 和 npm。 接下来,我们可以在终端中使用以下命令来全局安装 oidc-rp-gen:
npm install oidc-rp-gen --global
安装完成后,我们可以在终端输入 oidc-rp-gen,验证我们已经成功安装 oidc-rp-gen。
使用 oidc-rp-gen
考虑到 oidc-rp-gen 是用于客户端 OIDC 集成的工具,因此我们首先需要有一个渴望集成 oidc-rp-gen 的应用程序。 在我们继续之前,您需要有一个账号与应用程序的身份验证环境。
然后,我们可以在终端中输入以下命令,生成 OIDC 的客户端配置:
oidc-rp-gen -o config.yaml
在该命令中,-o 选项指定了我们想要生成的配置文件的名称。 这个文件包含了 OIDC 集成所必需的所有信息,包括 clientId、clientSecret、redirectUri 和 authEndpoint 等。
一旦您完成了生成客户端配置,您就可以开始实现 OIDC 集成。 以下是您需要在应用程序代码中执行的步骤:
首先,将 OIDC 配置文件导入您的应用程序:
const config = require('./config.yaml');
然后,使用 express 和 oidc-rp npm 包根据下面的示例创建 express 应用程序:
const express = require('express'); const { ExpressOIDC } = require('@okta/oidc-rp'); const app = express(); const oidc = new ExpressOIDC(config); app.use(oidc.router);
在上面的代码中,ExpressOIDC パッケージ提供了一个实用程序,可用于处理 OIDC 集成。 为了配置服务器,我们创建了“ExpressOIDC”实例,并向其提供上面提到的配置文件中的信息。 然后我们将它的路由附加至 express 应用程序。
我们在头文件中使用 middleware,在路由处理程序之前进行验证:
app.use((req, res, next) => { if (req.isAuthenticated()) { next(); } else { res.redirect('/login'); } });
当您首次进入 应用程序 URL 时,您将被重定向到 IdP 站点以进行身份验证,验证后您会被重定向回应用程序。 如果您成功地进行了身份验证,则应该可以使用 req.isAuthenticated()访问验证状态。
我们在以下代码中使用路由器来处理成功的身份验证:
app.get('/', (req, res) => { res.send(`Welcome ${req.user.name}!`); }); app.get('/login', oidc.ensureAuthenticated(), (req, res) => { res.redirect('/'); });
在上面的代码中,我们告诉路由器用户已经通过身份验证且其姓名已存储在 req.user 对象中。使用回调,如果用户已被身份验证,那么我们将负责渲染欢迎消息。如果用户未被身份验证,则我们将通过 oidc.ensureAuthenticated ()中间件自动重定向至 IDP 进行身份验证。
最后,我们创建一个监听端口的服务器实例,并启动应用程序:
app.listen(3000, () => { console.log('Server started on http://localhost:3000'); });
在上面的代码中,我们启动了一个监听在3000端口的服务器,并显示了上面代码中的欢迎消息。
总结
在本文中,我们详细介绍了如何使用 oidc-rp-gen npm 包集成 OpenID Connect。我们从安装 oidc-rp-gen 开始,然后演示了如何创建 OpenID Connect 客户端配置文件。最后,我们提供了一个使用 express 和 oidc-rp 包来实现 OpenID Connect 集成的示例应用程序。 这里我们使用了 oidr-rp-gen 可以快速得到我们应用中要用到的一系列 OIDC 相关信息,极大的简化了应用开发过程!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6006736a890c4f7277584068