云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

中间件_数据库批量添加数据_多少钱

小七 141 0

打字稿使用TypeScript创建具有节点.js和Express:保护API了解如何使用JSON Web令牌(JWTs)保护expressapi。

从这一章开始?克隆应用程序存储库并查看创建端点分支:git克隆git@github.com:auth0博客/wab ts express-原料药.git\快速ts api\--分支创建端点将项目文件夹设为当前目录:cd express ts api然后,安装项目依赖项:npm一最后,创建一个.env隐藏文件:触摸环境使用以下内容填充.env:端口=7000此项目的一个要求是,只有授权用户才能向存储区写入记录。要快速、安全地实现这一点,可以使用Auth0管理应用程序的用户凭据。设置Auth0 API首先,你必须创建一个免费的Auth0帐户,如果你还没有。创建帐户后,转到Auth0仪表板中的API部分,然后单击createapi按钮。然后,以Auth0显示的形式:向API添加名称。比如菜单API。将其标识符设置为https://menu-api.demo.com。将签名算法保留为RS256,因为从安全角度来看,这是最好的选择。标识符是唯一的字符串,有助于Auth0区分不同的api。我们建议使用url,因为它们有助于可预测地创建唯一标识符;但是Auth0从不调用这些url。点击按钮,创建这些值。现在,单击"快速入门"选项卡。本页介绍如何设置不同的API。从代码框中,选择节点.js. 保持此窗口打开,因为您很快将使用代码段中的值。您的API需要这些配置变量来用Auth0标识自己:访问群体和域值。存储这些值的最佳位置是在项目的.env文件中。打开.env并向其添加以下键:端口=7000身份验证颁发者=授权观众=的代码段中可以找到这些键所需的值节点.js快速入门。AUTH0_ISSUER是ISSUER属性的值。访问群体的属性值为AUTH0。不要在.env变量值中包含引号。只在引号中包含字符串。例如,我的.env文件如下所示:端口=7000身份验证颁发者=https://whatabyte.auth0.com/授权观众=https://menu-api.demo.com您的.env文件应在Auth0\u ISSUER属性的值内使用Auth0租户名称,而不是whatabyte。创建认证中间件为了保护Express中的端点,您需要依赖一个中间件函数,该函数在处理请求的控制器的回调函数之前执行。有两种方法可以做到这一点。第一个选项是在控制器中"注入"一个授权中间件函数,如下所示:项目路由器.post("/",授权函数,异步(req:Request,res:Response)=>{//控制器逻辑。。。});在这里,authorizationFunction在项目路由器.post. 反过来,authorizationFunction中的业务逻辑可以执行两个任务:(a) 调用中间件链中的下一个函数router handler函数,如果它可以确定用户有权访问资源,或者,(b) 通过响应401未经授权的消息来关闭请求-响应周期,这将阻止API执行路由处理程序。通过控制器添加授权中间件的方法使您能够对授权流进行细粒度和低级别的控制。但是,如果每个控制器的功能都很繁琐的话,你可以给每个控制器注入很多的授权。作为替代方案,您可以使用授权中间件作为组之间的边界,将公共控制器与受保护的控制器分开。例如,在快速路由器中,可以执行以下操作:itemsRouter.get(...);itemsRouter.use(授权功能);项目路由器.post(...);itemsRouter.put项(...);itemsRouter.delete项(...);因此,客户机可以访问GET端点,而无需提供任何"授权证明"——它是一个公共端点。但是,只有当authorizationFunction能够确定发出端点请求的客户端有权访问它时,才能访问在应用程序将authorizationFunction装入itemsRouter之后定义的任何其他端点。对于这个API,Auth0以称为访问令牌的JSON Web令牌(JWT)的形式提供了授权证明。JWT定义了一种紧凑的、自包含的方式,在各方之间以JSON对象安全地传输信息。这个信息可以被验证和信任,因为它是数字签名的,这使得JWTs有助于执行授权。一旦用户使用客户端应用程序登录,Auth0将向客户端提供一个访问令牌,该令牌定义客户端有权使用该令牌访问或操作的资源。访问令牌在它封装的JSON对象中定义了关于用户可以在API中做什么的信息。因此,客户机必须在对受保护的API端点发出的每个后续请求中包含访问令牌。有兴趣尽快了解JWTs吗?下载免费电子书$('.jwt手册按钮a')。单击(功能(e){metricsLib.track('博客:点击:jwt手册广告");});您将对这个应用程序使用分区方法,因为您需要保护向存储区写入数据的所有端点。安装授权依赖项要创建授权中间件功能,需要安装以下两个包:npm i express jwt jwks rsa以下是这些软件包为您提供的功能:express jwt:使用jwt令牌验证HTTP请求的授权级别节点.js应用程序。jwks rsa:从jwks(JSON Web Key Set)端点检索rsa签名密钥的库。由于您正在TypeScript项目中工作,因此还需要这些包的类型定义;但是,@types npm命名空间中只有express jwt包可用:npm i-D@类型/express jwtjwks rsa包中需要的helper函数很简单,不需要强类型。接下来,创建一个文件来定义您的授权中间件功能:触摸式src/中间件/authz.middleware.ts填充src/中间件/authz.middleware.ts具体如下:从"express jwt"导入jwt;从"jwks rsa"导入jwksRsa;从"dotenv"导入*为dotenv;dotenv.config文件();export const checkJwt=jwt({秘密:jwksRsa.expressJwtSecret({缓存:对,费率限制:正确,工作时间:5,jwksUri公司:`${process.env.AUTH0_颁发者}.知名度/jwks.json文件`}),//验证受众和发行人。观众:process.env.AUTH0_访问群体,发行人:`${process.env.AUTH0_颁发者}`,算法:RS256"]});当您调用checkJwt函数时,它将调用jwt函数,该函数将验证请求负载中存在的用于授权请求的任何JSON Web令牌(jwt)是否格式正确且有效。Auth0确定JWT的有效性。因此,您向jwt函数传递一些变量,以帮助它联系Auth0,并向它提供它需要的所有jwt信息:JWT的访问群体和发布者,它们在.env文件中定义,并使用dotenv.config文件().用于签署JWT的算法。签署智威汤逊的秘密。要获得机密,您需要做一些额外的工作:使用jwks rsa库中的expressJwtSecret helper函数来查询Auth0租户的JSON Web Key Set(jwks)端点。此端点有一组密钥,其中包含应用程序可以用来验证由授权服务器颁发并使用RS256签名算法签名的任何JSON Web令牌(JWT)。checkJwt函数隐式地接收来自Express的请求、req、res、object以及next()函数,它可以使用该函数调用链中的下一个中间件函数。剩下要做的就是在挂载itemsRouter write端点之前挂载checkJwt中间件函数。打开src/items/项目.router.ts并在Required External Modules and Interfaces部分导入checkJwt:/***所需的外部模块和接口*/从"express"导入express,{Request,Response};将*作为ItemService从""导入/项目.服务";从""导入{Item}/项目.接口";从""导入{Items}/项目.接口";从"./中间件"导入{checkJwt}/authz.中间件";然后,在Controller Definitions部分下,找到POST items/endpoint的定义,并在其正上方添加以下代码以装载授权中间件,itemsRouter.use(检查工作组):/***控制器定义*///获取项目/itemsRouter.get(...);//获取项目/:iditemsRouter.get(...);//装载授权中间件itemsRouter.use(检查工作组);//过帐项目/项目路由器.post(...);//放置项目/itemsRouter.put项(...);//删除项目/:iditemsRouter.delete项(...);要测试写入端点是否确实受到保护,请在终端中发出以下请求:curl-xpost-H'内容类型:application/json'-d'{"项目":{"name":"沙拉","价格":4.99,"description":"新鲜","图像":https://cdn.auth0.com/blog/whatabyte/salad-sm.png"}}' :7000/项目-i服务器以HTTP/1.1 401未经授权的响应状态进行响应,并且消息No authorization token was was found,确认您的写入端点受到保护。要访问它们,需要Auth0发布的JWT。获取令牌的最快方法是像任何用户一样使用客户端。创建Auth0客户端应用程序您可以使用WHATABYTE客户机应用程序创建Auth0用户、登录并从API请求受保护的数据。要配置此客户机,您需要在Auth0仪表板中创建一个Auth0单页应用程序,它为您提供配置演示客户机应用程序以与Auth0身份验证服务器对话并获取登录用户的访问令牌所需的Auth0域和Auth0客户机ID值。创建Auth0客户机应用程序的过程非常严格