分享好友 最新动态首页 最新动态分类 切换频道
OAuth 2.0 授权流程(以 Github 为例)
2024-12-26 07:57

在现代微服务架构中,安全性是一个至关重要的方面。随着微服务数量的增加,如何确保服务间的安全通信成为了一个挑战。本文将介绍几种常见的微服务认证方式,帮助你在设计和实现微服务系统时选择合适的认证方案。

下表列出了几种微服务中常用的认证方式,并从优点、缺点、适用场景和现实示例等维度进行比较。

认证方式 优点 缺点 运行位置 适用场景 典型用途 现实使用场景 JWT 自包含令牌,减少服务器负担 令牌较大,可能会增加带宽开销 API 网关、服务间 微服务之间无状态通信 用户认证和授权 在微服务架构中,用户认证(如 Auth0、Firebase) OAuth 2.0 广泛支持,灵活性高 实现复杂,需要额外的交互 API 网关 第三方应用授权 第三方应用访问用户数据 Github OAuth,用于第三方应用访问 Github 数据和 API mTLS 高安全性,防止中间人攻击 证书管理复杂,性能开销较大 服务间 高安全性要求的通信 安全敏感的服务通信 银行系统中的服务通信 Basic 认证 简单易实现 不安全,容易被拦截 API 网关、服务间 简单的 API 保护 简单的内部服务 Kubernetes API Server 的基本认证 API Key 认证 简单易用 安全性低,容易被滥用 API 网关、服务间 低安全性要求的场景 简单的服务访问控制 各种公共 API,如 OpenAI API

下面我们将详细介绍这几种常见的认证方式。

JWT(JSON Web Token)最早由 IETF JSON Web Token (JWT) 工作组提出,并在 2015 年作为 RFC 7519 标准正式发布。JWT 的设计目标是提供一种紧凑且自包含的方式,用于在各方之间安全地传递信息。由于其易于使用和无状态的特性,JWT 迅速被广泛采用,成为身份验证和信息交换的标准之一,特别是在微服务和现代 Web 应用中。

  1. 用户提供凭证
  2. 客户端请求访问令牌
  3. 认证服务器返回 JWT 令牌
  4. 客户端带 JWT 令牌请求资源服务器
  5. 资源服务器验证 JWT

JWT(JSON Web Token)由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature),分别通过 Base64 编码后用点(.)连接在一起组成。

  1. 头部(Header):头部包含令牌类型和签名算法。

  2. 载荷(Payload):载荷包含声明(claims),即关于用户或其他数据的断言。

  3. 签名(Signature):签名由编码后的头部、编码后的载荷以及一个密钥通过头部中指定的算法生成。

下面是一个 JWT 令牌示例:


OAuth(Open Authorization)协议最早由 Blaine Cook 和 Chris Messina 在 2006 年提出。最初的目标是为 Twitter 提供一个开放的授权标准。OAuth 1.0 于 2007 年发布,提供了一个允许用户授权第三方应用访问其资源的标准化方式,但由于其复杂的签名机制和其他安全问题,受到了一些限制。

为了克服这些缺点,IETF(Internet Engineering Task Force)成立了 OAuth 工作组,旨在开发一个更简化、更灵活的授权协议。2012 年,OAuth 2.0 正式发布(RFC 6749 和 RFC 6750)。OAuth 2.0 简化了授权流程,增加了多种授权模式,如授权码模式、简化模式、资源所有者密码凭证模式和客户端凭证模式。

OAuth 2.0 迅速成为行业标准,广泛应用于各种网络服务和应用程序,如 Google、Facebook、GitHub 等。在此基础上,出现了多个扩展和补充协议(如 OpenID Connect),进一步增强了 OAuth 2.0 的功能和安全性。

OAuth 2.0 的发展和扩展使其成为现代互联网身份验证和授权的重要基石,提供了灵活和安全的解决方案,满足了不断变化的网络应用需求。

  1. 用户请求访问资源
  2. 客户端请求认证
  3. 用户登录并授权
  4. 认证服务器返回授权码
  5. 客户端交换授权码获取访问令牌
  6. 客户端带访问令牌请求资源服务器

在 OAuth 2.0 授权码模式中,授权码是客户端在用户授权后从授权服务器获取的短期凭证,用于交换访问令牌。授权码是一个临时的字符串,可以在授权服务器和客户端之间传递以获得更安全的访问令牌。

OAuth 2.0 在发展过程中,为了适应不同的场景,发展出了众多的扩展,下表罗列出一些常用的扩展名称、主要功能及适用场景。

扩展名称 主要功能 适用场景 授权码 PKCE 扩展 提高授权码模式的安全性,防止授权码拦截攻击 公共客户端(如移动应用、单页应用) 动态客户端注册协议 允许客户端动态注册和更新客户端信息 自动化和灵活性要求高的系统 Token Introspection 允许资源服务器验证和获取访问令牌的详细信息 需要验证令牌有效性和获取令牌详细信息的场景 Token Revocation 提供令牌撤销的标准接口 提高系统安全性和控制能力 Device Authorization Grant 允许输入受限的设备通过其他设备完成身份验证 智能电视、游戏机等输入能力有限的设备 Mutual TLS Client Authentication 基于双向 TLS 的客户端认证 高安全性要求的应用场景 Resource Indicators 允许客户端在授权请求中指定访问的资源服务器 多资源服务器的支持 Step-up Authentication Challenge Protocol 允许资源服务器按需请求更强的身份验证(如多因素认证) 高风险操作的高级认证

GitHub 使用 OAuth 2.0 来授权第三方应用访问用户的 GitHub 数据。OAuth 2.0 令牌在 GitHub 上被称为 “access tokens”,用于验证和授权访问 GitHub API。它提供了一种安全、标准化的方法,允许第三方应用在用户授权的情况下访问 GitHub 资源。通过使用访问令牌,应用程序可以代表用户执行各种操作,如读取用户信息、访问仓库、创建 gists 等。这个过程确保了用户的安全和隐私,同时简化了应用程序的认证和授权流程。

以下是使用 GitHub OAuth 2.0 令牌的详细流程和示例:

  1. 用户授权:用户在第三方应用程序的界面上点击“Login with GitHub”按钮。应用程序将用户重定向到 GitHub 的授权页面。

  2. 获取授权码:用户在 GitHub 授权页面上登录并同意授权,GitHub 会将用户重定向回应用程序,并在 URL 参数中附带一个授权码(authorization code)。

    示例:

  3. 交换访问令牌:应用程序服务器使用授权码向 GitHub 的授权服务器请求访问令牌。

    请求示例:

  4. GitHub 返回访问令牌:GitHub 验证请求并返回访问令牌。

    响应示例:

  5. 使用访问令牌访问资源:应用程序使用获取的访问令牌访问 GitHub API。

    请求示例:

    响应示例:

  1. 权限范围(Scopes):访问令牌的权限范围由用户在授权时指定,可以包括读取用户资料、访问用户仓库、管理 gists 等。例如,在上述示例中, 包含 和 。

  2. 有效期和刷新:访问令牌的有效期可以是长期的也可以设置时间范围,直到用户主动撤销。

  3. 安全传输:访问令牌应通过 HTTPS 传输,以确保其不被截获。

mTLS(Mutual TLS)是一种在客户端和服务器之间进行双向身份验证的技术,最早起源于 TLS(传输层安全协议),TLS 的前身 SSL(安全套接层)协议于 1995 年由 Netscape 开发。随着互联网安全需求的增加,TLS 逐步发展为一个高度安全的通信标准,而 mTLS 则在此基础上进一步提升了安全性,通过要求双方互相验证身份,广泛应用于金融、医疗等对安全性要求极高的领域。

  1. 客户端与服务器互相发送证书
  2. 双方验证对方证书
  3. 建立安全连接

更多关于 TLS 和 mTLS 的内容请参考博客 如何理解 Istio 中的 mTLS 流量加密。

Basic 认证是一种最早由 HTTP/1.0 规范(RFC 1945)定义的简单认证机制,它通过将用户名和密码进行 Base64 编码后附加到 HTTP 请求头中进行身份验证。由于实现简单且易于使用,Basic 认证在早期的 Web 应用中被广泛采用。然而,由于其固有的安全性问题(如明文传输容易被截获),它在现代应用中通常与 HTTPS 一起使用,或被更安全的认证方式所替代。

  1. 用户提供用户名和密码
  2. 客户端带用户名和密码请求资源服务器
  3. 资源服务器验证

Basic 认证使用 Base64 编码的用户名和密码进行认证。下面是使用 命令进行 Basic 认证请求的示例:

如果用户名为 ,密码为 ,请求示例如下:

API Key 认证是一种通过在请求中包含预先分配的唯一密钥来进行身份验证的方法,最早在 2000 年代初随着 Web API 的兴起而流行。API Key 认证由于其简单易用和便于管理的特性,被广泛应用于各种公共和私有 API 中。尽管它的安全性较低,容易被滥用,但在许多场景中仍然是控制访问的一种有效手段,特别是对于不需要高度安全保护的应用。

  1. 客户端带 API Key 请求资源服务器
  2. 资源服务器验证 API Key

API Key 是在请求中传递的一个唯一标识符,用于验证客户端身份。API Key 通常通过 HTTP 请求头或 URL 参数传递。

HTTP 请求头中的 API Key 示例:

URL 参数中的 API Key 示例:

API Key 格式通常是一个字符串,包含字母和数字,例如:


最新文章
百度、吉利就“极越汽车”发表联合声明
集度汽车有限公司是百度控股与吉利控股投资设立的造车新势力初创公司,是探索汽车智能化转型的创新产物。由于行业竞争格局发生巨大变化,既定商业计划无法执行,经营遇到了挑战。极越汽车产品由吉利工厂制造,授权集度独家经营。百度、吉利
阿里云搜索是什么,与百度搜索有什么不同
阿里云搜索是阿里开发的提供给网购人群的一个专属的搜索引擎。
成品网站1.1.719:10分钟打造你的专属平台,原来建站竟然如此简单!
你想要拥有一个高端、精美、实用的网站?但繁琐的建站过程、昂贵的开发费用和专业技能的缺乏总让人头疼。其实,搭建网站也能像组装乐高一样简单有趣!成品网站1.1.719就是一款能快速帮你实现梦想的网站构建工具。这款神器就像一个建站百宝箱
剧本写作生成器app免费
剧本写作生成器app是一款免费的智能剧本生成软件。操作较为简单,用户只需简单描述角色的性格、外貌、背景等基本信息,AI就能快速生成人物形象,输入关键词即可生成各类剧本,涵盖悬疑推理、浪漫爱情等多种类型。在软件主页点击特定位置可
手机刷机怎么刷
手机刷机,是指通过特定的工具和步骤,为手机重新安装或升级操作系统,以达到优化性能、解锁新功能或解决系统问题的目的。以下是详细的刷机步骤及注意事项,帮助用户顺利完成刷机过程。### 一、刷机前的准备工作1. **备份数据**:刷机会清
开源抖音卡片系统源码 抖音跳转微信卡片外链系统安装教程
抖音内嵌的卡片通常是为了引导用户完成某种操作,比如关注、访问外部链接等。如果你想让抖音内的卡片直接跳转到微信的二维码页面,这通常是通过内置的分享功能或者集成第三方服务来实现的。1. **官方分享功能**:抖音提供了API供开发者定制
高清美女写真:AI绘画神器让你一键生成惊艳美图
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个看脸的时代,美容自拍和写真已经成为许多年轻人的日常。然而,想要拍出令人惊艳的美女
解放品区·年度词
转自:上观新闻1一整年,徐汇都不缺重磅科技盛会。3月下旬,徐汇接连两个周末举办了2024全球开发者先锋大会、首届中国具身智能大会;7月,连续第七年承办世界人工智能大会;12月初,2024科创大会,徐汇密集举办近10场分论坛。这些分论坛的
网易云外链规划师:提升网站知名度和搜索引擎排名
简介在当今竞争激烈的在线环境中,建立有效的网站外链对于提高知名度、吸引流量和改善搜索引擎排名至关重要。网易云分享外链是一个绝佳的机会,可以利用这个流行平台的力量来获得这些优势。本计划概述了为网易云分享外链建立全面的外链建设
朗玛信息:招商证券投资者于12月10日调研我司
证券之星消息,2024年12月10日朗玛信息(300288)发布公告称招商证券顾佳 刘晓珊于2024年12月10日调研我司。具体内容如下:问:公司进行医学人工智能大模型的产品研发的优势有哪些?答:公司从 2014年起深耕互联网医疗领域,旗下“39健康网
相关文章
推荐文章
发表评论
0评