简介
@authorization/full 是一个 npm 包,它提供了一种简单的方式来实现权限控制,包括身份验证、授权、角色和权限管理。本教程将介绍如何使用 @authorization/full。
安装
在命令行中输入以下命令来安装 @authorization/full。
npm install @authorization/full
快速上手
首先,让我们创建一个基本的应用程序,它将使用 @authorization/full 来实现身份验证和授权。可以使用以下命令来创建一个新的应用程序:
mkdir my-app && cd my-app npm init -y npm install express @authorization/full
我们将使用 Express 框架来创建应用程序。
现在,创建一个名为 index.js 的新文件,并添加以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ---- - ----------------------------------- ----- --- - --------- ----- ----- - - ------ - --------- ----------- ------ --------- -- ---- - --------- ----------- ------ -------- - - ----------------------- ------------------ ----- ---- -- - ----- - --------- -------- - - -------- ----- ---- - --------------- -- ------ -- ------------- --- --------- - ----------------------------- -------- -- ---------- ------ - ----- ----- - -------------------------- ---------- ----- -- -- ----- --------- - ---------------------------- ----------------- -------------- ---------- ----- ---- -- - --------------- ------- -- ----- -------- - --------------------------- ---------------- -------------- --------- ----- ---- -- - --------------- ------ -- ---------------- -- -- - ------------------- ------- -- ----------------------- --
在这个例子中,我们定义了两个用户:alice 和 bob,并分配了不同的角色。我们还定义了两个路由:/admin 和 /user,使用 auth.role() 创建了两个处理程序:adminOnly 和 userOnly。这些处理程序将检查当前用户是否有所需的角色,并在用户没有足够权限的情况下返回 403。
我们使用 express.json() 中间件来解析 JSON 请求体,并使用 auth.useToken() 在路由处理程序之前验证令牌。
现在可以使用以下命令来启动应用程序:
node index.js
现在打开浏览器并访问 http://localhost:3000/user。由于没有提供令牌,将返回 401。
使用 curl 或其他 HTTP 客户端来模拟用户登录:
curl -H "Content-Type: application/json" -X POST -d '{"username":"alice","password":"password"}' http://localhost:3000/login
这将返回一个包含访问令牌的 JSON。
现在再次访问 http://localhost:3000/user,并在请求头中添加 Authorization: Bearer <token>。
您应该看到 Hello user 的消息。现在访问 http://localhost:3000/admin 会返回 403,因为 alice 用户没有 admin 角色。如果使用 bob 用户登录,并使用相应的令牌访问 /admin,您将看到消息 Hello admin。
使用指南
配置
您可以使用 auth.configure() 方法配置 @authorization/full。这些配置选项包括:
- jwtSecret: 用于签署和验证 JWT 的密钥。
- tokenExpiration: 令牌过期时间(秒数)。
- roles: 角色和相应的权限。
-- -------------------- ---- ------- ----- ---- - ----------------------------------- ---------------- ---------- ------------ ---------------- -- - --- -- -- ------- ------ - ------ -------- -------- ---------- ----- -------- - --
身份验证
要使用 @authorization/full 进行身份验证,可以使用 auth.createToken() 创建包含用户名和过期时间的 JWT。要验证令牌,可以使用 auth.verifyToken()。
const auth = require('@authorization/full').auth const token = auth.createToken('alice') const verified = auth.verifyToken(token) console.log(verified) // { sub: 'alice', exp: 1646479335 }
授权
要使用 @authorization/full 进行授权,可以使用 auth.role() 创建相应的角色。每个角色都包含一组权限,并且可以使用 auth.role().handler() 创建一个路由处理程序,用于验证当前用户是否具有所需的角色和权限。这些角色和权限通常在应用程序启动时配置。
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ---- - ----------------------------------- ----- --- - --------- ---------------- ---------- ------------ ------ - ------ -------- -------- ---------- ----- -------- - -- ----- --------- - ---------------------------- ----- -------- - --------------------------- ----------------- -------------- ---------- ----- ---- -- - --------------- ------- -- ---------------- -------------- --------- ----- ---- -- - --------------- ------ -- ---------------- -- -- - ------------------- ------- -- ----------------------- --
自定义角色
如果默认角色不能满足您的要求,可以使用 auth.createRole() 创建自定义角色。创建角色时,您可以指定角色名称、父角色、权限和权限集。
-- -------------------- ---- ------- ----- ---- - ----------------------------------- ---------------- ---------- ------------ ------ - ------ -------- -------- ---------- ----- -------- - -- ----- ---------- - ------------------------- - ------- ------- -- ------------------------------------------- ----------------------------------- -- -------- -------- --------- ------------------
要创建一个自定义角色,请使用 auth.createRole()。该方法接受一个名称和一个可选的选项对象。选项对象可以包括以下字段:
- parent: 父角色的名称或角色对象。
- permissions: 一个或多个权限。
要从自定义角色创建处理程序,请使用 auth.role() 并传递自定义角色名称。
-- -------------------- ---- ------- ----- ---- - ----------------------------------- ----- ---------- - ------------------------- - ------- ------- -- ------------------------------------------- ----- ---------- - ----------------------------- ------------------ -------------- ----------- ----- ---- -- - --------------- -------- --
自定义权限
如果默认权限无法满足您的需要,可以使用 auth.createPermission() 创建自定义权限。
-- -------------------- ---- ------- ----- ---- - ----------------------------------- ---------------- ---------- ------------ ------ - ------ -------- -------- ---------- ----- -------- - -- ----- ---------- - ---------------------------------------- ----------------------- -- -----------------
要创建自定义权限,请使用 auth.createPermission()。该方法接受一个字符串作为参数,该字符串表示自定义权限的名称。
您可以基于自定义权限创建自定义角色。
-- -------------------- ---- ------- ----- ---- - ----------------------------------- ---------------- ---------- ------------ ------ - ------ -------- -------- ---------- ----- -------- - -- ----- ---------- - ---------------------------------------- ----- ---------- - ------------------------- - ------------ ------------ -- ----------------------------------- -- -------------------
示例代码
完整的示例代码可以在 Github 仓库 中找到。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056be381e8991b448e5940