快速入门: Node.js Web 应用程序
通过 App ID,您可以轻松保护 Node.js 前端 Web 应用程序。 通过本指南,您可以在 20 分钟内建立并运行简单的身份验证流程。
查看下图以了解授权代码 OAuth 2.0 工作流程。
- 用户尝试获取对受保护 Web 应用程序的访问权,但该用户未经授权。
- 应用程序将该用户重定向到 App ID。
- App ID 显示一个登录屏幕,用户可使用该屏幕进行身份验证。
- 用户输入其凭证,例如用户名和密码。 App ID 对凭证进行验证。
- App ID 使用授权代码将用户重定向回应用程序。
- 通过使用授权代码,应用程序向 App ID 发出请求以确保对用户进行验证。 有关获取访问令牌的更多信息,请参阅获取令牌。
- App ID 返回已验证用户的访问令牌和身份令牌。
- 然后,授权用户访问应用程序。
视频教程
请查看以下视频,以了解如何使用 App ID 来保护简单的 Node.js Web 应用程序。 视频中涉及的所有信息也可以在本页中以书面形式找到。
您没有可以试用此流程的应用程序吗? 没有问题! App ID 提供了 简单 Node.js Web 样本应用程序。
准备工作
在 Node.js 网络应用程序中开始使用 App ID 之前,您必须具备以下前提条件。
此 SDK 使用 log4js
包进行日志记录。 默认情况下,日志记录级别设置为 info
。 要创建您自己的日志记录配置,请添加 log4js.json
文件并将 process.env.LOG4JS_CONFIG
环境变量设置为 JSON 文件。
注册重定向 URI
重定向 URI 是应用程序的回调端点。 在登录流程中,App ID 会在允许客户参与授权工作流程之前验证 URI,这有助于防止网络钓鱼攻击和授权代码泄漏。 通过注册 URI,即向 App ID 表明该 URI 是可信的,重定向您的用户没有问题。
-
单击管理认证 > 认证设置。
-
在添加 Web 重定向 URI 字段中,输入 URI。 每个 URI 必须以
http://
或https://
开头,并且必须包含完整路径,包括任何查询参数,这样重定向才能成功。 -
单击添加 Web 重定向 URI 框中的 + 号。
-
重复步骤 1 到 3,直到将所有可能的 URI 都添加到列表中。
获取凭证
可以通过以下两种方式之一来获取凭证。
-
导航至 App ID 仪表板的应用程序选项卡。 如果尚未具有应用程序,那么可以单击添加应用程序来创建新应用程序。
-
向
/management/v4/<tenantID>/applications
端点 发出 POST 请求。Request format: ```sh {: codeblock} curl -X POST \ https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <IAMToken>' \ -d '{"name": "ApplicationName"}' ``` Example response: ```json {: screen} { "clientId": "xxxxx-34a4-4c5e-b34d-d12cc811c86d", "tenantId": "xxxxx-9b1f-433e-9d46-0a5521f2b1c4", "secret": "ZDk5YWZkYmYt*******", "name": "app1", "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxx-9b1f-433e-9d46-0a5521f2b1c4", "profilesUrl": "https://us-south.appid.cloud.ibm.com", "discoveryEndpoint": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxxx-9b1f-433e-9d46-0a5521f2b1c4/.well-known/openid-configuration" } ```
初始化 SDK
使用 App ID 的最简单方法是利用 Node.JS SDK。
-
使用命令行来切换到包含 Node.js 应用程序的目录。
-
安装以下 NPM 需求。
npm install --save express express-session passport log4js pug
-
安装 App ID 服务。
npm install --save ibmcloud-appid
-
将以下需求添加到
server.js
文件。const express = require('express'); // https://www.npmjs.com/package/express const log4js = require('log4js'); // https://www.npmjs.com/package/log4js const session = require('express-session'); // https://www.npmjs.com/package/express-session const passport = require('passport'); // https://www.npmjs.com/package/passport const WebAppStrategy = require('ibmcloud-appid').WebAppStrategy; // https://www.npmjs.com/package/ibmcloud-appid
-
通过使用在步骤 1 中获取的凭证,将应用程序设置为使用 express-session 中间件。 您可以选择通过两种方法之一来格式化重定向 URI。 手动使用新的
WebAppStrategy({redirectUri: "...."})
或将值设置为环境变量,如示例代码中所示。const app = express(); const logger = log4js.getLogger("testApp"); app.use(session({ secret: '123456', resave: true, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser((user, cb) => cb(null, user)); passport.deserializeUser((user, cb) => cb(null, user)); passport.use(new WebAppStrategy({ tenantId: "<tenantID>", clientId: "<clientID>", secret: "<secret>", oauthServerUrl: "<oauthServerURL>", redirectUri: "<redirectURI>" }));
必须针对生产环境为中间件配置合适的会话存储量。 更多信息,请参阅 express.js 文档。
保护应用程序
既然您已安装了 App ID,说明您已准备好保护应用程序。 您可以选择通过定义 Web 应用程序策略来保护整个应用程序或仅保护特定资源。
-
配置回调端点。 该回调通过从 App ID 中检索访问令牌和身份令牌,并将用户重定向到下列其中一个位置来完成授权过程:
- 触发认证的请求的原始 URL,此 URL 持久存储在
WebAppStrategy.ORIGINAL_URL
所在的 HTTP 会话中。 - 指定用于在认证成功时执行的重定向。
- 应用程序根目录 (
/
),如下一步中所示。
app.get(CALLBACK_URL, passport.authenticate(WebAppStrategy.STRATEGY_NAME));
- 触发认证的请求的原始 URL,此 URL 持久存储在
-
设置一个登录端点,始终将浏览器重定向到登录 Widget。 确保添加成功重定向选项,以避免最终产生无限认证循环。
app.get('/appid/login', passport.authenticate(WebAppStrategy.STRATEGY_NAME, { successRedirect: '/', forceLogin: true }));
个性化应用程序
可以拉取身份提供者提供的信息来个性化应用程序体验。
-
配置应用程序以获取用户信息。
protected
是占位符变量,您可以将其更改为与应用程序的端点匹配。app.get("/protected_resource", passport.authenticate(WebAppStrategy.STRATEGY_NAME), function(req, res){ res.json(req.user); });
例如,在样本应用程序中,可以看到如何获取用户名来个性化应用程序。
app.get('/api/user', (req, res) => { // console.log(req.session[WebAppStrategy.AUTH_CONTEXT]); res.json({ user: { name: req.user.name } }); });
测试配置
要测试授权配置,请导航至服务器在侦听的 URL(在应用程序中定义)。 请尝试登录,然后尝试注销。 确保配置按预期工作。
准备好移至下一步时,可以尝试启用针对 Cloud Directory 的多因子认证或添加定制属性以进一步个性化应用程序。