老旧系统接入统一认证

前言

为提高人员效率,近期为已有的一些业务系统接入了统一认证,这些系统的技术栈都非常老,主要包括 C/S 架构以及一小部分 B/S 架构的。统一认证系统开放了基于 HTTP 的接口,业务系统通过与接口交互实现统一认证登录。

本文对老旧系统接入OAuth2认证的相关工作进行一个总结和记录。

OAuth2 原理

注意:以下内容由 AI 生成

首先,要理解 OAuth 2.0 的核心目标:它不是一个认证协议,而是一个授权框架。 它的主要作用是让一个应用(第三方应用)能够安全地、受限制地访问用户在另一个服务(如 Google、微信、GitHub)上存储的资源(如个人信息、联系人、照片),而无需将用户的用户名和密码交给这个第三方应用。

简单来说,OAuth 2.0 解决的是 “授权” 问题,即“应用A能否代表用户去操作应用B的某些数据?”。而我们常说的“用微信登录”是建立在 OAuth 2.0 授权基础上的 “认证” 行为。

一个生动的比喻:酒店钥匙卡

想象一下你去住酒店:

  1. 前台登记(认证和授权): 你出示身份证(​认证​),证明你是你。然后前台给你一张钥匙卡,并设定好权限(只能打开你的房间门,有效期到退房那天,这就是​授权)。

  2. 使用设施(访问资源): 你不需要每次都去前台证明身份。要去健身房(第三方应用)时,只需在门口刷一下钥匙卡(​Access Token)。健身房系统会检查:

    • 这张卡是不是我们酒店发的?(​Token 是否有效
    • 这张卡有没有权限进健身房?(​Scope 权限范围
    • 这张卡过期了吗?(​Token 是否过期

如果检查通过,门就开了。健身房始终不知道你的身份证信息,非常安全。

OAuth 2.0 的核心参与角色

在 OAuth 2.0 流程中,有四个关键角色:

  1. 资源所有者 (Resource Owner): 就是用户本人。
  2. 客户端 (Client): 想要访问用户资源的第三方应用(比如一个想读取你 GitHub 头像的网站)。
  3. 授权服务器 (Authorization Server): 负责对用户进行认证,并颁发令牌(Token)的服务器。这是流程的核心(比如 Google 的登录页面和令牌颁发端点)。
  4. 资源服务器 (Resource Server): 存放用户受保护资源的服务器(比如 Google 的 API,存储着你的个人资料信息)。通常授权服务器和资源服务器属于同一个服务提供商。

以最常见的授权码模式举例

deepseek_mermaid_20250926_baaf61

第三方应用如何知道“用户是谁”?

既然拿不到用户名,第三方应用怎么显示“欢迎,Alice!”呢?这里就引出了一个重要的概念:OAuth 2.0 用于授权,而 OpenID Connect (OIDC) 建立在 OAuth 2.0 之上,用于认证。

OpenID Connect (OIDC) 是一个建立在 OAuth 2.0 之上的简单身份层。它解决了“你是谁?”(认证)的问题。

  • 当第三方应用在请求权限时,除了请求 scope=contacts​(访问联系人)这样的授权范围,它还可以请求一个特殊的范围:scope=openid profile email

  • 如果用户同意,授权服务器在返回访问令牌的同时,还会返回一个 ​ID Token

  • ID Token 是一个加密的、可验证的令牌(通常是 JWT 格式),里面包含了用户的身份信息,比如:

    • sub (Subject):用户的唯一标识符。
    • name:用户的全名。
    • email:用户的邮箱地址(通常也作为用户名)。
    • picture:用户的头像链接。

第三方应用解密这个 ID Token 后,就能安全地获取到用户的身份信息(如邮箱/名称),而无需知道用户的密码。

JWT 的结构

ID Token 是一个 JWT,由三部分组成,用点号分隔:Header.Payload.Signature

  1. Header(头部) ​:包含令牌类型和签名算法,如 {"alg": "RS256", "typ": "JWT"}​。这部分是 ​Base64Url 编码,不是加密。
  2. Payload(负载) ​:包含用户的声明信息,如 sub​(用户ID)、name​、email​ 等。这部分同样是 ​Base64Url 编码,不是加密。
  3. Signature(签名) :对前两部分的签名,用于验证令牌的完整性和来源。

重要提示​:由于 Header 和 Payload 只是 Base64Url 编码,任何人都可以轻松解码并查看其中的内容。你可以把 JWT 粘贴到 jwt.io 这类调试工具中直接查看其内容。所以,JWT 本身并不隐藏信息。

遇到的问题

需要接入的业务系统中有一个是基于 SpringBoot 1.5 和 Angular 5.2 的 B/S 架构的应用,前端的路由模式使用了 HashLocationStrategy ,使得所有的 URL 中包含一个 # ,而认证系统却不支持配置携带 # 的 URL 作为 ReturnURL 。

一方面,认证系统的代码因为一些原因无法修改;另一方面业务系统因为运行维护了很多年(屎山代码),代码中包含了大量写死了的路由地址,修改业务系统的难度大,无法切换到 PathLocationStrategy。这就导致两个系统均无法向对方做出妥协。

最终使用了一种折中的方案:通过 Nginx 配置一个静态的 HTML 页面(URL 中不包含 # )接收授权码,再由这个页面将授权码转发至业务系统的前端(URL 中包含 # )去做 OAuth2 的回调操作。中转页面的代码非常简单,如下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>OAuth Callback</title><script type="text/javascript">window.onload = function() {const urlParams = new URLSearchParams(window.location.search);const code = urlParams.get('code');if (code) {sessionStorage.setItem("redirectUri", window.location.origin + '/infer.html')window.location.href = `http://localhost:8000/#/oauth2/callback?code=${code}`;} else {console.error('No authorization code found in URL parameters.');window.location.href = '/'; // 或者其他错误页面}};</script>
</head>
<body>
<p>Loading...</p>
</body>
</html>

这样就可以最小限度的降低代码的修改量,也可以正常实现认证流程

结语

复杂的问题往往只需要简单的解决方法。

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

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

相关文章

每周读书与学习-初识JMeter 元件(三)

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。 1、取样器 在Jmeter中,…

Playwright MCP浏览器自动化全攻略

让AI理解你的指令,自动操作浏览器完成复杂任务 在AI技术飞速发展的今天,传统浏览器自动化工具仍然需要编写复杂代码的时代正在过去。Playwright MCP的出现,彻底改变了这一局面,让通过自然语言控制浏览器成为现实。…

杭州医疗器械网站制作网站名称没有排名

经常会有朋友在Q上询问关于系统方面的问题&#xff0c;多半都与安装方法有关&#xff0c;因此经常需要判断电脑上的Windows启动方式是什么&#xff0c;是UEFI还是BIOS呢&#xff1f;为了方便后来人查看&#xff0c;这里豆豆总结三个方法&#xff1a;最装X方法&#xff1a;在安装…

【IEEE出版、连续3届稳定EI检索】第四届能源互联网及电力系统国际学术会议(ICEIPS 2025)

IEEE出版 第四届能源互联网及电力系统国际学术会议(ICEIPS 2025) 2025 4th International Conference on Energy Internet and Power Systems 在这里看会议官网详情 截稿时间:见官网 会议时间:2025年10月30-11月2日…

大内容 Python动漫信息管理系统 Django+Echarts 类型饼图 折线图分析 后台管理 智能推荐(源码)✅

大内容 Python动漫信息管理系统 Django+Echarts 类型饼图 折线图分析 后台管理 智能推荐(源码)✅pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

划分子网与连通性

实验任务一//172.16.0.1到172.16.255.254都与本机IP在同一子网中。将另一台计算机IP修改为172.16.70.225

Python 之创建虚拟目录

创建虚拟环境 Python 3.3+ 内置了 venv 模块,无需额外安装。 检查 Python 版本: python3 --version # 或者 python --version 创建虚拟环境: # 基本语法 python3 -m venv 环境名称 例如,创建一个名为 .venv 的虚拟…

网站建设反馈书模板常州做网站包括哪些

二路归并&#xff1a; 使用双指针即可完成二路归并 多路归并&#xff1a; 多路归并需借助堆的数据结构 1. 建堆&#xff1a;先将一组元素建成最小堆 2. 堆中元素的删除和加入&#xff1a;每当踢出一个元素时&#xff0c;加入该组中的下一个元素 题目&#xff1a; 378. 有…

西峡网站开发ssh蒙语网站开发

最近用到了GroupWise,BaiDu了一下,基本没有中文资料,所以只有看英文文档,顺便把看到的东西记录下来,以备以后使用.*****PostOffice的信息存储1.PostOffice数据库PostOffice数据库(wphost.db)包括了所有PostOffice管理的信息,包括PostOffice地址薄(Address Book)的Copy,在GW系统…

湖南做网站公司有哪些网络运营需要什么技术

2020/7/31&#xff0c;瑞典厄运/重金属乐队Dun Ringill&#xff0c;发表了新专辑“Library of Death”。“Library Of Death”是瑞典乐队Dun Ringill的第二张唱片&#xff0c;由The Order of Israfel、Doomdogs等成员发起。乐队的声音&#xff0c;介于重金属和厄运金属之间&…

网站模板下载带后台电子商务网站建设基本组成

引言&#xff1a; 随着国产数据库技术的崛起&#xff0c;华为openGauss凭借其高性能、安全可靠及易用性成为了众多开发者的首选方案。本篇技术文章将聚焦于如何在Spring Boot项目中成功集成华为openGauss数据库&#xff0c;并揭示其中的一些关键步骤与注意事项&#xff0c;助您…

深入解析:从“硬件能力比拼”到“生活价值交付”,方太智慧厨房重构行业竞争内核

深入解析:从“硬件能力比拼”到“生活价值交付”,方太智慧厨房重构行业竞争内核pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

题解:CF1548E Gregor and the Two Painters

很好的题! 题意:给出每行权值 \(a_i\),每列权值 \(b_j\),定义点 \((i,j)\) 权值为 \(a_i+b_j\),问权值 \(\le x\) 的点组成的连通块个数。 做法: 这个题需要用到一个数连通块的技巧,我们对于每个连通块钦定一个…

Gitee DevOps:重塑中国软件开发效率的新范式

Gitee DevOps:重塑中国软件开发效率的新范式 在数字化转型浪潮席卷全球的当下,软件开发效率已成为衡量企业核心竞争力的关键指标。作为中国本土领先的一站式研发管理平台,Gitee DevOps凭借其深度本土化设计和全流程…

网站后台制作国际新闻最新消息内容

重定向理解 在Linux下&#xff0c;当打开一个文件时&#xff0c;进程会遍历文件描述符表&#xff0c;找到当前没有被使用的 最小的一个下标&#xff0c;作为新的文件描述符。 代码验证&#xff1a; ①&#xff1a;先关闭下标为0的文件&#xff0c;在打开一个文件&#xff0c;…

12306网站服务时间免费做网站软件视频

这个是我对于莫烦老师的matplotlib模块的视频做的一个笔记。1.前言Matplotlib是一个python的 2D绘图库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib&#xff0c;开发者可以仅需要几行代码&#xff0c;便可以生成绘图&#xff0c…

Gitee:中国开发者生态的崛起与数字化转型新动能

Gitee:中国开发者生态的崛起与数字化转型新动能 在全球开源生态格局中,一个来自中国的代码托管平台正展现出独特的竞争优势与发展潜力。Gitee作为本土领先的开发者协作平台,不仅解决了中国软件开发者的核心痛点,更…

C语言数组与函数实践应用项目--扫雷游戏 - 指南

C语言数组与函数实践应用项目--扫雷游戏 - 指南2025-09-29 11:12 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…

悟空博弈框架深度研究:从技术架构到商业应用的全景分析——声明ai研究

悟空博弈框架深度研究:从技术架构到商业应用的全景分析 一、项目背景与研究概述 悟空博弈框架是AI元人文体系中的核心组成部分,它将东方哲学智慧与现代计算技术相结合,为复杂决策场景提供了一种全新的价值博弈与共识…

自己做网站做淘宝联盟惠州网络科技有限公司

常见HTTP状态码分类&#xff1a; 1xx&#xff08;信息性状态码&#xff09;&#xff1a; 100 Continue&#xff1a;客户端可以继续发送请求的剩余部分。101 Switching Protocols&#xff1a;服务器已同意切换到另一种协议。 2xx&#xff08;成功状态码&#xff09;&#xff…