NPM与外部服务的集成(下)
目录
1、撤消访问令牌
2、在CI/CD工作流中使用私有包
2.1 创建新的访问令牌
持续整合
持续部署
交互式工作流
CIDR白名单
2.2 将令牌设置为CI/CD服务器上的环境变量
2.3 创建并签入特定于项目的.npmrc文件
2.4 令牌安全
3、Docker和私有模块
3.1 背景:运行时变量
3.2 更新Dockerfile
3.3 构建Docker镜像
1、撤消访问令牌
为了确保您的帐户和软件包的安全,我们强烈建议您撤销(删除)不再需要或已被泄露的令牌。您可以撤销已创建的任何令牌。
npm token list
2、在令牌表中,查找并复制要删除的令牌的ID。
3、在命令行上,运行以下命令,例如删除的令牌的ID为0a4d81
npm token delete 0a4d81
4、要确认令牌已删除,请再次运行如下命令,查看下令牌是否已删除:
根据创建时间倒序排列的令牌列表,可以发现刚才的只读令牌已删除。
注意:必须使用令牌ID来删除令牌,而不是令牌的截断版本。在某些情况下,在令牌被成功撤销之前可能存在长达一小时的延迟。
2、在CI/CD工作流中使用私有包
您可以使用访问令牌在持续集成(CI)系统中测试私有npm包,或者使用持续部署(CD)系统部署它们。
2.1 创建新的访问令牌
创建一个新的访问令牌,仅用于从CI/CD服务器访问npm包。
持续整合
当生成用于持续集成环境的访问令牌时,我们建议使用具有有限访问权限的粒度访问令牌,以提供更高的安全性。
如果您使用传统令牌,默认情况下,npm token create
将生成具有读写权限的令牌。我们建议创建只读令牌:
npm token create --read-only
有关创建访问令牌(包括CIDR白名单令牌)的详细信息,可以参考之前的文章,NPM与外部服务的集成(上)
持续部署
由于持续部署环境通常涉及到创建部署工件,因此您可能希望在网站上创建一个自动化令牌
。这将允许您发布,即使您在帐户上启用了双因素身份验证。
交互式工作流
如果您的工作流生成了一个包,但您在验证后手动发布了它,那么您将需要创建一个具有读写权限的令牌,这些权限是通过标准令牌创建命令授予的:
npm token create
CIDR白名单
为了提高安全性,您可以使用CIDR白名单令牌,该令牌只能在特定的IP地址范围内使用。您可以使用CIDR白名单和读取和发布令牌或只读令牌:
npm token create --cidr=[list]
npm token create --read-only --cidr=[list]
Example:范例:
npm token create --cidr=192.0.2.0/24
2.2 将令牌设置为CI/CD服务器上的环境变量
在CI/CD服务器中将令牌设置为环境变量或密码。
例如,在GitHub Actions中,您可以将令牌添加为密钥
。然后,您可以将密钥设置为可用于工作流。
如果您将secret命名为NPM_TOKEN
,那么您需要从该secret创建一个名为NPM_TOKEN
的环境变量。
steps:- run: |npm install- env:NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
2.3 创建并签入特定于项目的.npmrc文件
使用特定于项目的.npmrc
文件和令牌的变量,以使用npm安全地验证CI/CD服务器。
1、在项目的根目录中,创建包含以下内容的自定义.npmrc
文件:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
注意:您指定的是一个文本值
${NPM_TOKEN}
。npm cli会将这个值替换为NPM_TOKEN
环境变量的内容。不要在此文件中放置令牌。
2.4 令牌安全
您的令牌可能有权读取私有包、代表您发布新包或更改用户或包设置。保护好你的令牌。
不要将令牌添加到版本控制中或以不安全的方式存储令牌。将其存储在密码管理器、云提供商的安全存储或CI/CD提供商的安全存储中。
如果可能,请使用具有最低必要权限的粒度访问令牌,并为令牌设置较短的到期日期。
3、Docker和私有模块
要在Docker容器中安装私有npm包,您需要使用Docker构建密钥。
3.1 背景:运行时变量
您不能仅使用运行时变量在Docker容器中安装私有npm包。考虑以下Dockerfile:
FROM nodeCOPY package.json package.json
RUN npm install# Add your source files
COPY . .
CMD npm start
它将使用官方的Node.js镜像,将package.json
复制到我们的容器中,安装依赖项,复制源文件并运行package.json
中指定的start命令。
为了安装私有包,你可能会认为我们可以在运行npm install
之前添加一行,使用ENV参数:
ENV NPM_TOKEN=00000000-0000-0000-0000-000000000000
然而,这并不像你期望的那样工作,因为你希望npm安装在你运行docker build
时发生,在这个例子中,没有使用ENV
变量,它们只为运行时设置。
你必须使用Docker构建秘密,而不是运行时变量。
3.2 更新Dockerfile
利用这一点的Dockerfile比前面的示例多了几行,允许我们使用您的全局.npmrc
和在运行npm login
命令时创建的访问令牌(如果您还没有运行它-请在继续之前运行它)。
# https://docs.npmjs.com/docker-and-private-modules
FROM node:18ENV APP_HOME="/app"WORKDIR ${APP_HOME}COPY package*.json ${APP_HOME}/RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm installCOPY . ${APP_HOME}/CMD npm start
这将配置您的Dockerfile通过build secrets接收.npmrc
文件,在npm依赖安装完成后不会留下任何痕迹。
3.3 构建Docker镜像
要使用上述Dockerfile和npm身份验证令牌构建镜像,可以运行以下命令。请注意,最后给予.
将当前目录作为参数提供给docker build
。
docker build . -t secure-app-secrets:1.0 --secret id=npmrc,src=$HOME/.npmrc
这将使用通过build secrets接收的全局.npmrc
文件中的访问令牌构建Docker镜像,因此您可以作为当前登录用户在容器中运行npm install
。
注意:您可能需要指定一个不同于默认
/
的工作目录,否则某些框架(如Angular)将失败。

相关文章:

NPM与外部服务的集成(下)
目录 1、撤消访问令牌 2、在CI/CD工作流中使用私有包 2.1 创建新的访问令牌 持续整合 持续部署 交互式工作流 CIDR白名单 2.2 将令牌设置为CI/CD服务器上的环境变量 2.3 创建并签入特定于项目的.npmrc文件 2.4 令牌安全 3、Docker和私有模块 3.1 背景:运…...

Flask Web开发实战(狼书)| 笔记第1、2章
前言 2023-8-11 以前对网站开发萌生了想法,又有些急于求成,在B站照着视频敲了一个基于flask的博客系统。但对于程序的代码难免有些囫囵吞枣,存在许多模糊或不太理解的地方,只会照葫芦画瓢。 而当自己想开发一个什么网站的时&…...

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例
目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是: DFA(确定性有限状态自动机) NFA(非确定性有限状态自动机) 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 &…...

读书笔记 |【项目思维与管理】➾ 顺势而动
读书笔记 |【项目思维与管理】➾ 顺势而动 一、企业步入“终结者时代”二、过去成功的经验也许是最可怕的三、做好非重复性的事四、适应客户是出发点五、向知识型企业转变六、速度是决胜条件 💖The Begin💖点点关注,收藏不迷路💖 …...
开发利器:接口代理和接口模拟工具
前端开发过程往往需要和后端对接接口,而且一般开发都是前后端同步开发,这就难免出现接口提供滞后的问题,从而导致我们前端开发 UI 开发完成而无法调试的问题。面对这种问题,一般我们会有很多种方式处理,比如在代码中写一些模拟数据,或者打断点调试,或者用代理工具 Fidde…...

MAVEN利器:一文带你了解MAVEN以及如何配置
前言: 强大的构建工具——Maven。作为Java生态系统中的重要组成部分,Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用,Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…...

解决 adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE
最近给游戏出包,平台要求 v1 签名吧,AS 打包后,adb 执行安装到手机,我用的设备是google pixel6 , android 系统 13, 提示如下: adb install -r v5_android_202308161046.apk Performing Streamed Install a…...
学习Vue:Event Bus 与 Provide/Inject
在Vue.js中,兄弟组件通信是指两个没有直接父子关系的组件之间如何进行数据传递和通信。为了实现兄弟组件通信,我们可以借助Vue的一些特性,如Event Bus和Provide/Inject。让我们一起来深入了解这些方法,并通过实例来看看如何实现兄…...
Java 工具类之JSON key根据ASCII排序
Java按键值字典序排列 参数按照KEY值进行字典序排序(按照KEY值的ASCII码从小到大),并用&作为各参数之间的分隔符将参数拼接成字符串。这里用到了SortedMap,复制以下代码开箱即用~ /*** getSortedString 对参数按照Key进行ASCII排序* param jsonObject 请求参数…...

深兰科技提出新多模态谣言监测模型,刷新世界纪录
近日,深兰科技旗下深兰科技科学院投稿的《基于二部特定事件树的分层表示的谣言检测》(Rumor Detection With Hierarchical Representation on Bipartite Ad Hoc Event Trees)研究论文被全球人工智能领域*期刊《IEEE Transactions on Neural Networks and Learning S…...
【从零学习python 】33.装饰器的作用(二)
文章目录 再议装饰器4. 装饰器(decorator)功能5. 装饰器示例例1:无参数的函数例2:被装饰的函数有参数例3:被装饰的函数有不定长参数例4:装饰器中的return例5:装饰器带参数 进阶案例 再议装饰器 # 定义函数:完成包裹数据 def makeBold(fn):def wrapped():return &qu…...

【自动电压调节器】无功功率控制的终端电压控制研究(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

比ChatGPT更强的星火大模型V2版本发布!
初体验 测试PPT生成 结果: 达到了我的预期,只需要微调就可以直接交付,这点比ChatGPT要强很多. 测试文档问答 结果: 这点很新颖,现在类似这种文档问答的AI平台收费都贵的离谱,星火不但免费支持而且效果也…...
Character Animation With Direct3D 读书笔记
角色动画简介 2D动画:循环播放多张图片 3D动画: 骨骼动画、变形动画 DirectX入门 Win32 应用程序 Application类:处理主程序循环,图形设备的初始化 Init:加载资源并创建图形设备Update:更新游戏世界&am…...

SpringBoot之HandlerInterceptor拦截器的使用
😀前言 本篇博文是关于拦截器-HandlerInterceptor的使用,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…...

【共同缔造 情暖襄阳】 暑期关爱未成年人志愿服务活动合集(三)
结合2023年襄阳市民政局“共同缔造 情暖襄阳”社会工作服务项目,在襄阳市民政局、襄州区民政局支持下,襄州社工协会联合肖湾街道育红社区开展暑期“希望家园”志愿服务活动,关爱未成年人。 8月4日,为培育孩子们广泛的兴趣爱好和动…...

私密相册管家-加密码保护私人相册照片安全
App Store史上最安全、最强大、最卓越的私密相册App!再也不用担心私密照片视频被别人看见了! 私密相册为你提供多重密码保护机制、简单便捷的照片存储空间,完美地将你的私密照片远离一切恶意偷窥者的窥探! 【产品功能】 √ 支…...

webpack 热更新的实现原理
webpack 的热更新⼜称热替换(Hot Module Replacement),缩写为HMR。这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。 原理: ⾸先要知道 server 端和 client 端都做了处理⼯作: 在 webpack 的 watch…...

OpenCV-Python中的图像处理-傅里叶变换
OpenCV-Python中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…...

阿里云FRP内网穿透挂载多台服务器
1. FRP介绍 FRP (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用,它支持 TCP、UDP 协议, 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站, 帮你实现 公网 ←→ FRP(服务器…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...