<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Safety on Leanku 的博客</title><link>https://www.leanku.com/post/safety/</link><description>Recent content in Safety on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 02 Dec 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://www.leanku.com/post/safety/index.xml" rel="self" type="application/rss+xml"/><item><title>GitHub 接入与 OAuth 2.0 授权全指南</title><link>https://www.leanku.com/post/safety/a-complete-guide-to-github-access-and-oauth-2.0-authorization/</link><pubDate>Mon, 02 Dec 2024 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/safety/a-complete-guide-to-github-access-and-oauth-2.0-authorization/</guid><description>&lt;p&gt;接入 GitHub（第三方登录或调用 API）主要依赖 &lt;strong&gt;OAuth 2.0 授权协议&lt;/strong&gt;。通过接入 GitHub，开发者可以实现“用 GitHub 账号一键登录平台”以及“获取用户公开信息、仓库数据”等功能。&lt;/p&gt;&#10;&lt;h2 id="1-接入前的准备创建-oauth-app"&gt;1. 接入前的准备：创建 OAuth App&lt;/h2&gt;&#10;&lt;p&gt;在开始写代码前，必须先在 GitHub 注册一个 OAuth Application。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;登录 GitHub，点击右上角头像 -&amp;gt; &lt;strong&gt;Settings&lt;/strong&gt;（设置）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在左侧边栏最下方，点击 &lt;strong&gt;Developer settings&lt;/strong&gt;（开发者设置）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;选择 &lt;strong&gt;OAuth Apps&lt;/strong&gt;，点击 &lt;strong&gt;New OAuth App&lt;/strong&gt;（或 &lt;strong&gt;Register a new application&lt;/strong&gt;）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;填写应用信息：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Application name&lt;/strong&gt;：应用名称（如 &lt;code&gt;MyApp&lt;/code&gt;）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Homepage URL&lt;/strong&gt;：应用主页地址（本地测试可填 &lt;code&gt;http://localhost:3000&lt;/code&gt;）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Authorization callback URL&lt;/strong&gt;：&lt;strong&gt;核心字段&lt;/strong&gt;，授权成功后的回调地址（如 &lt;code&gt;http://localhost:3000/api/v1/auth/callback/github&lt;/code&gt;）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;点击 &lt;strong&gt;Register application&lt;/strong&gt; 完成注册。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;注册完成后，系统会生成：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Client ID&lt;/strong&gt;：应用的公开唯一标识。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Client Secret&lt;/strong&gt;：密钥，点击 &lt;strong&gt;Generate a new client secret&lt;/strong&gt; 生成（&lt;strong&gt;切记妥善保管，严禁暴露在前端&lt;/strong&gt;）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;官方参考文档&lt;/strong&gt;：&lt;a href="https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app"&gt;Creating an OAuth app - GitHub Docs&lt;/a&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="2-github-oauth-20-核心交互流程"&gt;2. GitHub OAuth 2.0 核心交互流程&lt;/h2&gt;&#10;&lt;p&gt;GitHub OAuth 2.0 采用标准的&lt;strong&gt;授权码模式（Authorization Code Grant）&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>MFA</title><link>https://www.leanku.com/post/safety/mfa/</link><pubDate>Fri, 12 May 2023 13:46:01 +0800</pubDate><guid>https://www.leanku.com/post/safety/mfa/</guid><description>&lt;h1 id="mfa"&gt;MFA&lt;/h1&gt;&#10;&lt;h2 id="一mfa-是什么"&gt;一、MFA 是什么&lt;/h2&gt;&#10;&lt;p&gt;MFA（Multi-Factor Authentication，&lt;strong&gt;多因素认证&lt;/strong&gt;） 是一种提高账户安全性的认证方式。&#10;它要求用户在登录或进行敏感操作时提供 多种不同类别的验证因素，从而增强安全性。&lt;/p&gt;&#10;&lt;p&gt;通常 MFA 包含三类因素：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;因素类型&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;描述&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;示例&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;知识因素（Something you know）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;用户知道的信息&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;密码、PIN&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;持有因素（Something you have）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;用户拥有的物品&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;手机验证码（OTP）、硬件密钥&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;固有因素（Something you are）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;用户自身的特征&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;指纹、面部识别、虹膜识别&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;核心理念：仅凭密码不安全，增加第二甚至第三因素可以有效防止账号被盗。&lt;/p&gt;&#10;&lt;h2 id="二常见应用场景"&gt;二、常见应用场景&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;金融系统&lt;/strong&gt;&lt;br&gt;&#10;登录网银或支付系统时，需要输入密码 + 手机短信验证码。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;企业内部 SSO / VPN 登录&lt;/strong&gt;&lt;br&gt;&#10;员工登录内部系统时，需要密码 + 动态令牌或硬件钥匙。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;云服务 / SaaS 平台&lt;/strong&gt;&lt;br&gt;&#10;如 GitHub、Google、AWS 等，用户可启用 MFA 提高账户安全。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;敏感操作验证&lt;/strong&gt;&lt;br&gt;&#10;修改密码、提现或支付等操作，需要额外的 MFA 验证。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="三mfa-的典型流程以-totp-为例"&gt;三、MFA 的典型流程（以 TOTP 为例）&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;绑定 MFA&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;用户登录后扫描二维码绑定 MFA（生成密钥），服务器存储密钥。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;生成动态验证码&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;用户通过 App（Google Authenticator、Authy）生成 6 位一次性验证码。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;登录验证&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>OAuth 2.0</title><link>https://www.leanku.com/post/safety/oauth-2.0/</link><pubDate>Fri, 12 May 2023 13:46:01 +0800</pubDate><guid>https://www.leanku.com/post/safety/oauth-2.0/</guid><description>&lt;h1 id="oauth-20"&gt;OAuth 2.0&lt;/h1&gt;&#10;&lt;h2 id="一oauth20-是什么"&gt;一、OAuth2.0 是什么&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;OAuth 2.0&lt;/strong&gt; 是一种开放标准的授权协议，用于在不暴露账号密码的情况下，让用户授权第三方应用访问其受保护的资源。&lt;br&gt;&#10;它主要解决的问题是：&lt;strong&gt;如何安全地委托访问权限&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;核心概念：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;角色&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;资源所有者（Resource Owner）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;用户或数据所有者&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;客户端（Client）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;第三方应用，需要访问资源&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;授权服务器（Authorization Server）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;颁发令牌的服务器，负责验证用户身份并授权&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;资源服务器（Resource Server）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;存储用户受保护资源的服务器，验证令牌后提供数据&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="二-常用场景"&gt;二、 常用场景&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;第三方登录（Social Login）&lt;/strong&gt;&lt;br&gt;&#10;用户使用微信、GitHub、Google 登录你的站点，后端获取 Access Token 调用接口获取用户信息。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;开放 API / 平台化&lt;/strong&gt;&lt;br&gt;&#10;向合作伙伴提供 API，使用 OAuth 2.0 控制访问权限和作用域。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;微服务内部接口调用&lt;/strong&gt;&lt;br&gt;&#10;服务 A 调用服务 B 的接口，通过 Client Credentials 模式获取 Token，避免硬编码密码。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;企业内部 SSO（单点登录）&lt;/strong&gt;&lt;br&gt;&#10;多系统统一认证，用户在登录一次后，访问其他系统不需要重复登录。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;前后端分离应用（SPA / Mobile App）&lt;/strong&gt;&lt;br&gt;&#10;前端获取授权码，换取 Access Token，安全访问 API，密码不在前端传递。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="三oauth-20-主要流程"&gt;三、OAuth 2.0 主要流程&lt;/h2&gt;&#10;&lt;p&gt;以 &lt;strong&gt;授权码模式（Authorization Code Grant）&lt;/strong&gt; 为例：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;请求授权&lt;/strong&gt;：客户端引导用户跳转到授权服务器，传入 &lt;code&gt;client_id&lt;/code&gt;、&lt;code&gt;redirect_uri&lt;/code&gt;、&lt;code&gt;scope&lt;/code&gt;。&lt;/p&gt;</description></item></channel></rss>