第三方认证中心跳转

一、业务需求

由第三方认证中心将 token 放在 header (请求头) 中跳转系统,前端获取到第三方系统携带 header 中的 token。

二、 业务流程

image.png

模拟第三方应用
  • CUSTOM-USERTOKEN 是第三方的 token
  • proxy_pass 是我们的前端地址
  server {listen 12345;server_name localhost;location / {proxy_set_header Host $host:$server_port;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-Port $remote_port;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header CUSTOM-USERTOKEN 'MY-TOKEN'proxy_pass http://127.0.0.1;}}
前端静态代理
  • backend 是后端服务地址
  • 80 是前端代理端口
  server {listen 80;server_name localhost;location / {root /vuepress/docs;index index.html;try_files $uri $uri/ /index.html;}error_page 405 =200 $uri;}

三、处理方式

由于放在 header 中的内容,前端只有从 XHR 请求中才能拿到,所以直接打开页面时,肯定是无法拿到 header 中的 token 的,又因为这个 token 只有从第三方系统中跳转才能携带,所以也无法通过请求当前页面去获取 header 中的内容。

一、通过后端重定向

在 nginx 代理中,第三方请求从原本跳转访问前端的地址改为后端地址,
因为后端是可以从请求总直接拿到 header,所以这时由后端去处理 token ,在重定向到前端。

  • 后端可以设置 cookie,前端从 cookie 中获取
  • 后端可以拼接 URL, 前端从 url 中获取
  • 后端可以通过缓存 cookie, 重定向到前端后发请求获取 token
模拟第三方应用
  • 第三方应用由跳转前端改为跳转后端接口
  server {listen 12345;server_name localhost;location / {proxy_set_header Host $host:$server_port;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-Port $remote_port;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header CUSTOM-USERTOKEN 'MY-TOKEN'proxy_pass http://backend/token;}}
前端静态代理
  • 前端代理不需要做任何处理
  server {listen 80;server_name localhost;location / {root /vuepress/docs;index index.html;try_files $uri $uri/ /index.html;}error_page 405 =200 $uri;}

二、通过 nginx 重定向 URL

在 nginx 代理中,新增一个 /token 的代理地址,用于转发地址,第三方请求从原本跳转访问前端的地址,改为 /token 代理地址
因为 nginx 中是可以获取 header 中的内容的,所以这时由 /token 处理拼接好 url ,在重定向到前端。

Pasted image 20230412231934.png

模拟第三方应用
  • 第三方应用访问路径改为 http://127.0.0.1/token
  server {listen 12345;server_name localhost;location / {proxy_set_header Host $host:$server_port;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-Port $remote_port;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header CUSTOM-USERTOKEN 'MY-TOKEN'proxy_pass http://127.0.0.1/token;}}
前端静态代理
  • 新增 /token 代理,进行拼接 URL 后跳转
  server {listen 80;server_name localhost;location / {root /vuepress/docs;index index.html;try_files $uri $uri/ /index.html;}location /token {# 将 $http_custom_usertoken 拼接在 URL 中,同时重定向到前端# 前端通过 location.search 处理 tokenrewrite (.+) http://127.0.0.1?token=$http_custom_usertoken;}error_page 405 =200 $uri;}

三、通过 nginx 设置 Cookie

由于通过响应头中设置 Set-Cookie 可以直接存储到浏览器中,所以我们也可以通过直接设置 cookie 的方式处理。

Pasted image 20230412232652.png

模拟第三方应用
  • 此时第三方应用直接访问前端即可
  server {listen 12345;server_name localhost;location / {proxy_set_header Host $host:$server_port;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-Port $remote_port;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header CUSTOM-USERTOKEN 'MY-TOKEN'proxy_pass http://127.0.0.1;}}
前端静态代理
  • token 设置在 cookie
  server {listen 80;server_name localhost;location / {add_header Set-Cookie "token=$http_custom_usertoken;HttpOnly;Secure";root /vuepress/docs;index index.html;try_files $uri $uri/ /index.html;}error_page 405 =200 $uri;}

四、nginx 代理转发设置 Cookie

方法 三、通过 nginx 设置 Cookie 中,存在一个问题,由于此时在前端静态代理上添加 cookie,这就会导致所有静态资源都会携带 cookie, 这就会造成 cookie 中因为 path 不同而重复添加, 所以我们还可以通过造一层代理的方式处理这个问题

Pasted image 20230412231416.png

模拟第三方应用
  • 代理地址再次修改为 token
  server {listen 12345;server_name localhost;location / {proxy_set_header Host $host:$server_port;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-Port $remote_port;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header CUSTOM-USERTOKEN 'MY-TOKEN'proxy_pass http://127.0.0.1/token;}}
前端静态代理
  • token 设置在 /token 代理地址的 cookie
  • /token 重定向到前端地址
  server {listen 80;server_name localhost;location / {root /vuepress/docs;index index.html;try_files $uri $uri/ /index.html;}location /token {add_header Set-Cookie "token=$http_custom_usertoken;HttpOnly;Secure";rewrite (.+) http://127.0.0.1;}error_page 405 =200 $uri;}

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

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

相关文章

前端导出下载文件后提示无法打开文件

问题 项目中的导出文件功能,导出下载后的文件打开提示如下: 原因 对返回的响应数据进行打印,发现响应数据为字符串格式,前期规划的后端返回数据应该 blob 对象的。后经排查后发现是请求头缺少了响应数据格式的配置,应…

python 循环语句 while 循环

while循环 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为: while 判断条件(condition): 执行语句(statements)…… 执行语句可以是单个语句…

【GameFramework框架内置模块】3、数据表(Data Table)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q7…

Python爬虫实战:图片爬取与保存

引言: 在本文中,我们将学习如何使用Python创建一个简单的图片爬虫。 我们将利用requests库来发送HTTP请求,BeautifulSoup库来解析HTML页面,以及os和shutil库来下载和保存图片。通过这个教程,你将学会如何爬取网…

16.沙箱里的秩序——外观模式

然后,冯诺伊曼又用三名士兵构建了与非门、或非门、异或门、同或门和三态门,最后只用两名士兵构建了最简单的非门,出总是举与入颜色相反的旗。 冯:诺伊曼对皇帝鞠躬说:“现在,陛下,所有的门部件都已演示完毕&#xff0c…

【Java程序员面试专栏 算法思维】五 高频面试算法题:贪心算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊贪心算法,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间买卖股票的最佳时机 II贪心算法遍历整个股票交易日价格列表 price,并执行贪心策…

力扣随笔之移除元素(简单27)

思路:定义一个指针left,使该指针及该指针左边的数全部都不等于val,定义一个遍历指针i,若nums[i] val,则i自加,若nums[i] ! val,则将left,并将nums[i]的值赋给nums[left]&#xff0c…

迅速了解Ascii、GBK、Unicode、UTF-8、BCD各种编码格式的由来及关系!

《嵌入式工程师自我修养/C语言》系列——迅速了解Ascii、GBK、Unicode、UTF-8、BCD各种编码格式的由来及关系 一、Ascii编码二、GBK编码三、Unicode编码四、UTF-8编码五、BCD编码六、其他网友的总结 快速学习嵌入式开发其他基础知识?>>>>>>>&g…

Redis实现滑动窗口限流

常见限流算法 固定窗口算法 在固定的时间窗口下进行计数,达到阈值就拒绝请求。固定窗口如果在窗口开始就打满阈值,窗口后半部分进入的请求都会拒绝。 滑动窗口算法 在固定窗口的基础上,窗口会随着时间向前推移,可以在时间内平滑控…

安装 WSL 报错 Error code: Wsl/WININET_E_NAME_NOT_RESOLVED 问题解决

问题描述 在执行 wsl --install 安装Windows子系统Linux WSL (Windows Subsystem for Linux) 时报错: 无法从“https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json”中提取列表分发。无法解析服务器的名称或地址 Error…

为什么会员模式是一种明智的扩张方式

会员模式看起来是一种有趣、令人兴奋且很酷的业务发展方式,但当您真正深入研究时,您可能会惊讶地发现它远不止于此。 会员资格为我们提供了一条道德扩展的途径。我们可以就地为客户提供服务。 这就是为什么会员模式可能成为您企业的下一步,…

【监控】grafana图表使用快速上手

目录 1.前言 2.连接 3.图表 4.job和path 5.总结 1.前言 上一篇文章中,我们使用spring actuatorPrometheusgrafana实现了对一个spring boot应用的可视化监控。 【监控】Spring BootPrometheusGrafana实现可视化监控-CSDN博客 其中对grafana只是打开了一下&am…