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(服务器…...
开箱即用环境+保姆级教程:深度学习项目训练环境助你快速入门AI
开箱即用环境保姆级教程:深度学习项目训练环境助你快速入门AI 1. 镜像环境概述 深度学习项目训练环境镜像是一个预装了完整深度学习开发环境的解决方案,专为快速启动AI项目而设计。这个镜像基于深度学习项目改进与实战专栏,集成了训练、推理…...
3步快速恢复ROG游戏本色彩配置文件的终极指南
3步快速恢复ROG游戏本色彩配置文件的终极指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: https://gitcode.…...
C语言main函数怎么写?6种写法教你正确使用入口函数
名为main的函数,是C程序的入口之处的函数,也就是程序的执行,是从main函数起始的,对于其他函数的调用,也是直接或者间接地,在main函数当中被调用的。那么main函数又究竟是被谁所调用的呢?答案是操…...
基于STM32与ADS1258的高精度电流数据采集方案实现
1. 高精度电流采集系统设计思路 电流测量在工业自动化、新能源和车载电子等领域都是基础但关键的环节。传统方案使用普通ADC配合分压电阻,精度往往只能达到1%左右,而采用ADS1258这类24位Σ-Δ ADC,配合STM32主控,可以实现0.01%级的…...
Python扩展模块发布即弃坑?PyPI审核新规+manylinux2014/2023+musllinux多目标轮子构建全流程(含CI/CD自动化脚本)
第一章:Python扩展模块发布即弃坑?PyPI审核新规manylinux2014/2023musllinux多目标轮子构建全流程(含CI/CD自动化脚本)PyPI自2023年起强化了对二进制轮子(wheel)的合规性审查,尤其针对C/C扩展模…...
在大数据领域发挥 RabbitMQ 的消息队列流量控制策略
在大数据领域发挥 RabbitMQ 的消息队列流量控制策略关键词:RabbitMQ、消息队列、流量控制、大数据、QoS、背压机制、负载均衡摘要:本文深入探讨如何在大数据场景下有效利用RabbitMQ的消息队列流量控制策略。我们将从RabbitMQ的核心架构出发,详…...
Windows用户福音:WSL2+Docker快速部署Coze Studio开源版(附常见错误解决方案)
Windows平台高效部署Coze Studio开源版的完整指南 对于Windows开发者而言,在本地环境搭建Coze Studio开源版可能面临诸多挑战。本文将提供一套经过验证的完整解决方案,从WSL2配置到Docker优化,帮助您避开常见陷阱,快速实现Coze St…...
3个AI工具如何提升动态图像质量?专业级画质增强全攻略
3个AI工具如何提升动态图像质量?专业级画质增强全攻略 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/…...
基于北方苍鹰优化算法优化径向基函数神经网络(NGO - RBF)的时间序列预测
基于北方苍鹰优化算法优化径向基函数神经网络(NGO-RBF)的时间序列预测 NGO-RBF时间序列 优化参数为扩散速度,采用交叉验证防止过拟合 matlab代码注:暂无Matlab版本要求 -- 推荐 2018B 版本及以上在时间序列预测领域,寻找高效准确的模型一直是…...
LaTeX投稿Elsevier期刊必备:elsarticle.cls从安装到实战避坑指南
LaTeX投稿Elsevier期刊必备:elsarticle.cls从安装到实战避坑指南 科研工作者向Elsevier投稿时,elsarticle.cls文档类是最常用的工具之一。不同于基础教程,本文将聚焦实际投稿过程中的高频痛点,从环境配置到排版细节,提…...
