OAuth 2.0:我帮你开门,但不给你钥匙
我们做了个网站,想让用户用微信登录。问题来了——用户在微信里已经有账号了,我们不想再管一套密码,用户也懒得注册。怎么办? 前两篇我们讲了 session 和 JWT,但它们有个共同前提:用户得把密码交给我们。我们自己当爹,管注册、管存储、管找回密码。可如果用户已经有微信账号了,他凭什么再把密码给你? 这里要区分两个概念:认证(Authentication)是”你是谁”,授权(Authorization)是”你能干嘛”。OAuth 2.0 本质上是一个授权框架——它让用户可以授权第三方应用访问自己在某个平台上的资源,而不需要把密码给出去。 四个角色OAuth 里有四个角色,搞清楚它们,后面的东西就好理解了: 用户(Resource Owner):微信用户,资源(头像、昵称)的主人 客户端(Client):我们的网站,想用微信登录的那方 授权服务器(Authorization Server):微信的服务器,负责验证用户身份、发令牌 资源服务器(Resource Server):微信的 API 服务器,拿着令牌才能拿到用户信息 有些平台授权服务器和资源服务器是同一台,但概念上它...
我有五台服务器,运维体系是怎么搭起来的
我有五台服务器,分布在三个云厂商,跨了好几个城市。 听起来很夸张,其实就是一步一步长出来的。最早就一台,跑点小东西。后来服务越来越多,一台扛不住了,就开始加。加着加着就五台了。 有人问我,一个人管五台机器不累吗?说实话,要是没有一套体系,确实累。但搭好了体系之后,其实也就那么回事。 今天聊聊我是怎么搭这套运维体系的。 为什么是五台一开始我也觉得一台够用了。Web 服务、数据库、Redis 全放一起,省事。 后来问题来了:服务之间互相抢资源,数据库吃内存把 Web 服务挤挂了。而且鸡蛋放一个篮子里,机器一挂全完蛋。 所以我按职责拆了: A(腾讯云):核心业务,跑主力服务 B(阿里云):轻量应用 + 监控中心 C(腾讯云):网关层 + AI 助手 D(华为云):边缘节点 四个字母代替,不暴露更多信息。你们只要知道:不同云厂商、不同城市、互相备份。 用过三个云厂商的体会是:各有各的坑。腾讯云网络好,阿里云生态全,华为云性价比高。鸡蛋不放一个篮子,不是矫情,是教训。 SSH 管理:密钥是底线五台机器,首先得解决”怎么连上去”的问题。 第一件事:禁掉密码登录,只用密钥。这不是装逼,...
登录方式的演进(二):JWT,带着身份证去办事
上一篇我们讲了 Session + Cookie,那是 Web 登录的开山鼻祖。但当我们把系统拆成微服务之后,Session 的问题就暴露了——Session 存在服务端,服务一多就尴尬了。 一、Session 在微服务下的尴尬想象一下:用户在订单服务登录了,Session 存在订单服务的内存里。然后他去调商品服务——商品服务说「你是谁?我不认识你。」 怎么办?共享 Session 呗。搞个 Redis 集群,所有服务都去查同一份 Session。 听起来没问题,但服务越来越多,每个服务都要依赖这个 Session 存储,耦合度拉满。Redis 一挂,全体服务瘫痪。 更别说移动端了——App 压根没有浏览器的 Cookie 机制,Session ID 要自己手动传,体验一言难尽。 二、JWT:把身份证揣自己兜里JWT 的思路完全不同:别存了,把用户信息直接发给客户端,下次请求带回来就行。 就像你去政府办事,Session 是「你先去窗口登记,窗口给你发个号码牌,工作人员拿着号码牌去档案室查你是谁」;JWT 是「你把身份证揣兜里,到了直接亮证,工作人员看一眼就知道你是谁」。 不...
session与cookie这对好兄弟
我们访问网站,为什么每次打开都得登录? 这个问题我刚入行的时候压根没想过——直到有天要排查一个”用户突然掉登录态”的bug,才发现自己对这俩东西的理解还不如一个实习生。 为什么要有登录态这回事打开百度,搜个东西,关掉。再打开,再搜——百度根本不关心你是谁。 但你打开淘宝,想加个购物车、下个单,服务器就必须知道:这个请求是张三发的,不是李四。 问题来了:HTTP协议天生不认识人。你发第一个请求和第二个请求,在服务器眼里就是两个陌生人。所以我们要搞一个”身份证明”——这就是登录态。 服务端怎么认出你你登录的时候,服务器干了这么几件事: 验证账号密码 在自己内存(或数据库、Redis)里划一块地方,存上你的身份信息 给这块地方一个唯一编号,比如 sessionId: "a1b2c3d4" 把这个编号塞进响应里,发回给浏览器 这个存在服务端的信息集合,就叫 Session。 简单粗暴,session.getId() 一调,服务端就知道你是谁了。 Cookie:浏览器的”身份证夹子”编号发回来了,浏览器怎么存?下次请求怎么带过去? 答案是 Cookie。 服务端...
跨年小记:博客未停,2026 再续征程
2025的篇章已然翻完,2026的序章即将拉开。上来冒个泡,告诉大家这个小小的技术+生活博客依然在正常运营~ 过去一年,虽因琐事牵绊,更新频率没能如最初预期般稳定,但记录的初心从未改变。无论是技术上的新尝试、踩坑后的复盘总结,还是生活里的零星感悟,都一直悄悄攒着,后续会慢慢整理分享。 新的一年,愿日子依旧有光,技术探索的脚步不停,也期待能以更规律的更新,和大家继续在文字里相遇。祝各位2026年平安喜乐,万事顺意,新岁皆得偿所愿~ Jack 2025年12月31日
使用 OpenVPN 实现 NAS 的安全外网访问
背景 自建一台 NAS,系统为 FNOS,位于家中内网; 有一台具备公网 IP 的云服务器; 云服务器上禁用了 FRP 等端口映射工具; 目标:通过 OpenVPN 组建一个安全的虚拟内网,通过 NGINX 反向代理访问 NAS 提供的服务(如 Web UI、文件服务等)。 FNOS 是指的飞牛nas 网络结构概览1234567891011+------------------------+ OpenVPN +----------------------+| 云服务器(VPN 服务端) |<------------------->| 家中 NAS(VPN 客户端) || 公网 IP,可开放端口 | | FNOS,可 ssh 操作 |+------------------------+ +----------------------+ | | NGINX 反向代理 |+-------------------...
使用阿里云函数部署bitwarden
背景介绍Bitwarden是一款开源的密码管理工具,能够帮助用户安全地存储和管理密码、登录信息等敏感数据。很多企业和个人用户都在寻找一种高效且安全的方式来部署Bitwarden服务,以便于随时随地访问自己的密码库。 本文使用的镜像是vaultwarden/server:1.26.0,非官方原版镜像,并且将bitwarden部署到FC的目的主要是想估算成本,目前运行15天以上,实际花费不到5毛钱,个人使用比单独购买服务器省钱,切记:一定要配置告警规则,防止被刷 目标将说明以下几个步骤: 1、将bitwarden镜像push到阿里云的ACR个人镜像仓库(自行push)。2、在阿里云 Functions 中创建一个新的函数服务:使用 Docker 镜像部署 Bitwarden3、配置函数服务,保证 Bitwarden 正常运行。 具体步骤1、创建一个自定义环境的镜像 2、高级配置:CPU/内存配置 3、环境变量: 注意:填写以下环境变量: ADMIN_TOKEN:xxxxxxxxx //超管密码 DATABASE_URL:mysql://us...
一次横跨三个不同云基础设施的超长流水线尝试
前言 Tencent Pages 是腾讯云推出的一款静态网站托管服务,可以通过腾讯云的自有 CDN 将静态网站部署至全球访问(免费)。最近,我一直在致力于将部分静态网站迁移到这个服务上。然而,由于 Pages 服务本身的一些限制,例如 yarn build 时内存溢出,导致部署失败。 因此,我考虑了多种方案来实现自动化部署,以下是我探索的几种选择: 1、从 Docker 镜像中直接将 HTML 文件复制出来,然后手动提交到 GitHub 仓库。2、使用 Aliyun Flow 进行代码编译,编译后的代码直接提交到 GitHub 仓库。3、使用 GitHub Actions 进行编译后提交到 GitHub 仓库。 最终,我选择了第二种方案。第一种方案需要手动操作,第三种方案无法直接提交代码。 部署流程部署方案经历了多次曲折,包括编译失败和 Git 代码提交失败等。最终完整的流程如下:1、将https://github.com/standardnotes/app 仓库 fork 到自己的 GitHub 仓库中。2、在 Aliyun Codeup 新建同名仓库,并使用 GitHub...
在Windows Server 2022 服务器上搭建FTP站点
前言最近朋友有需求,需要在win server服务器搭一个ftp站点,我本想着是一个比较简单的事情,但是在操作的过程中却频频踩坑,所以本文简单说明一下搭建的步骤,主要说明一下踩的坑,记录一下得失。 准备工作 云服务器的管理员账号密码 ftp用户的账号和密码 云服务器的公网IP 会操作云服务器的安全组(防火墙外置) 步骤一:IIS(web服务器)配置及增加FTP服务在创建FTP站点前,需确保实例内已添加IIS及FTP服务。如果还没有添加,请参见以下操作步骤,添加IIS及FTP服务。 点击 管理-添加角色和功能 在服务器角色中选择:Web服务器(IIS) 在角色服务中选择:FTP服务器(全选)、管理工具-IIS控制台 点击确认安装IIS和FTP 步骤二:创建用于访问FTP服务的用户创建Windows用户,用于访问FTP站点时的身份验证。如果只需要匿名用户(即仅提供用户名anonymous或ftp的用户)访问FTP站点,可以跳过本步骤。1、在Windows桌面的左下角单击win图标,然后Windows 管理工具 > 计算机管理。2、在左侧导航栏,选择系统工具 > ...
备份postgres到OSS和COS
背景上一篇文章异地备份MYSQL数据库已经写明了如何备份Mysql数据库到oss和cos,如果使用的是postgres数据库,这种方法也仍然适用。 备份脚本准备备份脚本基本和Mysql的备份脚本一致,工具是专用的工具:pg_dump,对应的shell: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#!/bin/bashDB_HOST=""DB_PORT=""DB_USER=""DB_PASSWORD=""OSS_BUCKET_NAME=""COS_BUCKET_NAME=""PREFIX="postgrep"# 备份目录BACKUP_DIR="postgrepbackup"BACKUP_FOLDER=$(date +"%Y-%m-%d-%H_%M_%S")# 拼接最新的文件...