PyPI 与 GitHub 的双因素认证 | 2FA 配置指南

唠唠闲话

最近登录 GitHub 一直提示设置双重验证。除此之外,开发 Python 包常用的平台—— PyPI ,也宣布从今年开始强制启用双因素认证(2FA)。这一变化虽然在提高安全性方面起到了积极作用,但也给日常工作带来了麻烦。本篇将介绍如何管理和配置 PyPI 和 GitHub 的 2FA,并使用 Python 脚本简化验证过程。

参考链接:

  • Python: 代码打成pip包并发布到 PyPi
  • 什么是双因素验证 2FA,如何用 Python 实现?

PyPI 双重验证

我们先讲讲配置方法,然后再介绍 2FA 的原理。

配置恢复代码

在 PyPI 上,首先要做的是设置恢复代码。这些代码在你无法使用常规 2FA 方法时至关重要。

  1. 打开 Account settings 页面。

  2. 在 2FA 设置区域,生成并下载恢复代码。

    PyPI Recovery Codes

重要事情说三遍:

请妥善保存这些代码,它们是你在遇到问题时重置 2FA 的关键!
请妥善保存这些代码,它们是你在遇到问题时重置 2FA 的关键!
请妥善保存这些代码,它们是你在遇到问题时重置 2FA 的关键!

添加 2FA

接下来,将添加 2FA 到你的 PyPI 账户。

  1. 点击使用身份验证程序添加 2FA。

    PyPI 2FA Setup

  2. 你会看到一个弹出的二维码和应用代码。

    PyPI 2FA QR Code

  3. 安装 Python 包 pyotp 来生成 2FA 验证码。

    pip install pyotp
    
  4. 复制应用代码,并使用以下 Python 脚本获取验证码。

    import pyotpkey = '粘贴 2FA 代码'
    totp = pyotp.TOTP(key)
    print(totp.now())
    
  5. 将脚本保存为 get2fa.py,在需要用时运行脚本。

    #!/usr/bin/env python3
    import pyotpkey = '粘贴 2FA 代码'
    totp = pyotp.TOTP(key)
    print(totp.now())
    
  6. 此外,对于 Mac/Ubuntu 用户,有一个更简洁的方案,使用 mintotp

    pip install mintotp
    mintotp <<< "粘贴 2FA 代码"
    

    创建一个别名:

    alias py2fa="mintotp <<< '粘贴 2FA 代码'"
    

    这样每次在终端运行 py2fa 就能获取 2FA 验证码。

GitHub 2FA

从去年(2023)3 月开始,GitHub 将逐步要求所有用户在提交代码时启用 2FA。下面是如何在 GitHub 上设置 2FA 的步骤。

  1. 在 密码和安全性 页面开启 2FA。

    GitHub 2FA Setup

  2. 你将看到一个提供 2FA 的二维码。

    GitHub 2FA QR Code

  3. 使用二维码识别器获取其中的链接,其中 secret= 后的内容为 2FA 密钥

  4. 后续步骤与 PyPI 类似,可以用同样的脚本或 mintotp 获取验证码。

此外,GitHub 还支持一些选项,比如 passkey 可以将当前设备的指纹功能作为验证因素:

GitHub 2FA Options

2FA 的原理介绍

最后,简单聊聊双因素认证(2FA)的工作原理。

什么是双因素认证(2FA)

双因素认证(2FA)是一种安全机制,它要求用户在登录过程中提供两种不同类型的认证信息。通常包括:

  1. 知识因素(Something You Know):比如密码、PIN 码或安全问题的答案。
  2. 拥有因素(Something You Have):通常是手机应用生成的一次性代码,或者是硬件令牌,比如银行的 U 盾。

通过结合这两种因素,即使其中一个因素(如密码)被泄露,账户仍然安全,因为非法用户缺少第二个必要的认证信息。

一次性密码(OTP)

在 2FA 中,经常使用的“拥有因素”是一次性密码(One-Time Password)。OTP 的生成可以基于时间(TOTP)或事件(HOTP)。

  • 时间基准的一次性密码(TOTP):依据当前时间和一个秘钥生成 OTP。由于时间在不断变化,生成的 OTP 也会在一定时间间隔后失效,通常是30秒。
  • 事件基准的一次性密码(HOTP):基于一个计数器和一个秘钥生成 OTP。每次使用后,计数器增加,生成新的 OTP。

这些一次性密码通常通过哈希算法(如 HMAC)生成的。HMAC(Hash-based Message Authentication Code)结合了一个加密密钥(我们前边复制的代码)和一个加密哈希函数(如SHA-1),以产生功能强大的认证标记。

2FA 密钥

由于 TOTP 和 HOTP 标准的算法是公开和标准化的,不同的应用和工具(如 Google Authenticator, Authy, pyotp 等)在实现时遵循相同的算法和标准,因此用不同的工具使用相同的秘钥能生成相同的 OTP。秘钥的共享通常是通过扫描二维码实现的,这个二维码实际上包含了秘钥和账户信息。

简言之,通过使用 2FA,特别是基于时间或事件的一次性密码(TOTP/HOTP),可以增强账户的安全性。这种方法的关键在于使用一个秘钥生成一次性密码,这个密码对外部攻击者来说几乎不可能预测或复制,除非他们获得了秘钥本身。因此,即使你的主密码泄露,只要 2FA 保持安全,你的账户仍然是安全的。


以上,如果遇到问题,欢迎在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

情感聊天赛道用al制作一分钟一条视频无脑玩法日入500+

详情介绍 这个赛道是用al快速制作情感故事聊天 原理就是用爆款的文案 al生成情感聊天视频全网独家赛道不拥挤 这个赛道几乎没人做一片蓝海 视频号分成计划 抖音中视频都可以做 建议做视频号创作者分成计划 单价高事少 视频号的平均用户年龄都是比较大的 对于这种情感故事的…

【UE+MQTT】Mqtt Client插件使用记录

步骤 1. 在虚幻商城中下载“Mqtt Client”插件 插件地址&#xff1a;https://www.unrealengine.com/marketplace/zh-CN/product/34cbcaef7a664451a886dba37b4769bc?sessionInvalidatedtrue 文档地址&#xff1a;[虚幻引擎] DT Mqtt 插件详细说明 – DT 2. 在虚幻编辑器中确…

菜鸡学习netty源码(四)—— EventLoopGroup

1.概述 我们前面进行过分析,channel为netty网络操作的抽象类,EventLoop负责处理注册到其上的Channel处理的I/O事件;EventLoopGroup是一个EventLoop的分组,它可以获取到一个或者多个的EventLoop对象。 2.类关系图 NioEventLoopGroup的类继承图,蓝色部分为对应的java类,绿…

正点原子imx6ull内核移植网络驱动修改无法出现两个网络端口

重点1&#xff1a;手册上让我们在&iomuxc_snvs节点中做点添加网络复位信息&#xff0c;我们这里不需要做&#xff0c;直接下一步。 这里与手册不同&#xff0c;这里直接像我这样将pinctrl_enet2和pinctrl_enet1中对最后两行做修改和添加。直接将复位引脚的配置加入这个节点…

TalkingGaussian:基于高斯溅射的结构保持3D说话人头合成

TalkingGaussian: Structure-Persistent 3D Talking Head Synthesis via Gaussian Splatting TalkingGaussian&#xff1a;基于高斯溅射的结构保持3D说话人头合成 Jiahe Abstract 摘要 TalkingGaussian: Structure-Persistent 3D Talking Head Synthes…

基于树莓派的六足机器人方案设计+源代码+工程内容说明

文章目录 源代码下载地址项目介绍项目内容说明简单预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 项目内容说明 hardware为项目相关硬件设计 机械结构为六足机器人的3d建模工程&#xff0c;包括本体和云台遥控器在ESP32最小开发板上集成了MPU605…

留学资讯 | 曼大突然官宣接受雅思单科重考!单科重考体验大揭秘!

雅思单科重考于昨日&#xff08;5月6日&#xff09;进行了大陆地区的首场考试&#xff0c;不少烤鸭都在观望状态&#xff0c;表示&#xff1a;虽然我很心动&#xff0c;但是学校们可不心动&#xff01;&#xff01; 别急&#xff01;好消息这不就来了&#xff01;曼大官网明确表…

PaddleOCR使用

最近在项目过程中需要用到文字识别的能力&#xff0c;之前没有接触过。需要对现有的开源能力进行调研和学习。 1. 基本概念 1.1 PaddlePaddle PaddlePaddle 是一个由百度开源&#xff0c;基于 Python 的深度学习框架。PaddlePaddle 针对不同的硬件环境提供了不同的安装包或安…

vue导出大量数据的表格方法

我目前的项目导出4万7数据没问题 先安装 npm install -S file-saver npm install xlsx0.16.0 -S npm install -D script-loader 我使用的版本是"file-saver": “^2.0.5”, “xlsx”: “^0.16.0” 新建Export2Excel.js //Export2Excel.js /* eslint-disable */ requ…

MP4视频转MOV电影视频格式的方法?汇帮视频格式转换器帮你实现一键转MOV

有关MOV视频格式的介绍&#xff1a; MOV视频是一种多媒体文件格式&#xff0c;它被广泛用于存储和播放音频和视频内容。这种文件格式由苹果公司开发&#xff0c;作为QuickTime播放器的一部分&#xff0c;用于在Mac OS操作系统上播放多媒体内容。MOV格式的文件通常包含视频、音…

2024年数维杯数学建模A题思路

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

vscode与git下载安装

粉丝不过W git下载地址: https://git-scm.com/downloads, 安装git时, 记住你安装Git的路径 vscode下载地址: https://code.visualstudio.com/ 下载完后, 并默认安装好, 你就可以进入配置git的环境变量了, 点击win, 点击设置 在搜索框里搜索, 高级系统设置 点到 高级 , 然后点击…

一文详解Spring与JDK注入

目录 一、Spring框架 二、JDK 三、什么是Spring的注入 四、如何实现Spring与JDK注入 一、Spring框架 Spring框架是一个开源的Java EE应用程序框架&#xff0c;它为企业级Java应用程序提供了全面的基础设施支持。Spring框架的核心特点包括依赖注入&#xff08;Dependency I…

TikTok营销策略解析:7大关键要素打造品牌影响力

TikTok作为近年来迅速崛起的短视频社交平台&#xff0c;已经成为全球范围内品牌营销的重要阵地。对于品牌而言&#xff0c;如何在TikTok上有效地开展营销活动&#xff0c;吸引目标受众的注意力&#xff0c;提升品牌知名度和影响力&#xff0c;是摆在他们面前的重要课题。本文No…

LINUX 入门 8

LINUX 入门 8 day10 20240507 耗时&#xff1a;90min 有点到倦怠期了 课程链接地址 第8章 TCP服务器 1 TCP服务器的介绍 开始讲服务器端&#xff0c;之前是客户端DNShttps请求 基础&#xff1a;网络编程并发服务器&#xff1a;多客户端 一请求&#xff0c;一线程 veryold…

[图解]DDD架构好简单我学会了-学会也没啥用

1 00:00:03,720 --> 00:00:05,920 内部共有&#xff0c;首先是内部的 2 00:00:08,150 --> 00:00:09,220 所以不能说什么 3 00:00:09,630 --> 00:00:10,730 不能跟外部连在一起 4 00:00:10,740 --> 00:00:15,280 比如说&#xff0c;功能架构&#xff0c;可以吗 …

Linux中gitlab-runner部署使用备忘

环境&#xff1a; 操作系统:&#xff1a;CentOS8 gitlab版本&#xff1a;13.11.4 查看gitlab-runner版本 可以从https://packages.gitlab.com/app/runner/gitlab-runner/search找到与安装的gitlab版本相近的gitlab-runner版本以及安装命令等信息&#xff0c;我找到与13.11.4相…

便签怎么设置不同的标签 便签创建不同分组标签的方法

在日常工作和生活中&#xff0c;便签已成为我随身携带的小助手。每当灵感闪现&#xff0c;或是需要临时记录一些重要事项&#xff0c;我都会随手打开便签&#xff0c;快速记录下来。然而&#xff0c;随着记录的内容越来越多&#xff0c;如何高效地管理和查找这些信息成为了一个…

分布式关系型数据库管理系统 OceanBase 安装和配置教程

&#x1f30a; 分布式关系型数据库管理系统 OceanBase 安装和配置教程 &#x1f680; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝…

js自定义实现类似锚点(内容部分滚动)

场景&#xff1a; 效果图如上&#xff0c;类似锚点&#xff0c;但是屏幕不滚动。高度计算我不是很熟练。for循环写的比较麻烦。element plus 和Ant Design有类似组件效果。 html&#xff1a; <template><div><div style"height: 400px;" class&q…