第三方认证中心跳转

一、业务需求

由第三方认证中心将 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 处理 token
      rewrite (.+) 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;
  }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MacOSX删除HBuilderX

1. 删除应用程序 如下图。MacOSX,打开访达,左侧点击应用程序,进入应用程序窗口,找到HBuilderX,右键菜单,点击移到废纸篓 2. 删除数据目录 打开操作系统终端,输入如下命令: open $H…

Jenkins详解

目录 一、Jenkins CI/CD 1、 Jenkins CI/CD 流程图 2、介绍 Jenkins 1、Jenkins概念 2、Jenkins目的 3、特性 4、产品发布流程 3、安装Jenkins 1、安装JDK 2、安装tomcat 3.安装maven 4安装jenkins 5.启动tomcat,并页面访问 5.添加节点 一、Jenkins CI/…

Vue3 学习笔记(Day4)

「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. Vue3 学习笔记(Day1) 2. Vue3 学习笔记(Day2&…

网络原理 HTTP _ HTTPS

回顾 我们前面介绍了HTTP协议的请求和响应的基本结构 请求报文是由首行请求头空行正文来组成的 响应报文是由首行形影头空行响应正文组成的 我们也介绍了一定的请求头之中的键值对的属性 Host,Content-type,Content-length,User-agent,Referer,Cookie HTTP协议中的状态码 我们先…

SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的多特征分类预测

SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的故障多特征分类预测 目录 SCI一区 | Matlab实现ST-CNN-MATT基于S变换时频图和卷积网络融合多头自注意力机制的故障多特征分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍…

海外媒体推广通过5个发稿平台开拓国际市场-华媒舍

随着全球化的进程,国际市场对于企业的吸引力日益增加。进入国际市场并获得成功并非易事。海外媒体推广发稿平台成为了一种重要的营销手段,能够帮助企业在国际市场中建立品牌形象、传递信息和吸引目标受众。本文介绍了五个海外媒体推广发稿平台&#xff0…

数据结构-二分搜索树(Binary Search Tree)

一,简单了解二分搜索树 树结构: 问题:为什么要创造这种数据结构 1,树结构本身是一种天然的组织结构,就好像我们的文件夹一样,一层一层的. 2,树结构可以更高效的处理问题 二,二分搜索树的基础 1、二叉树 2,二叉树的重要特性 满二叉树 总结: 1. 叶子结点出现在二叉树的最…

数字热潮:iGaming 能否推动加密货币的普及?

过去十年,iGaming(互联网游戏)世界有了显著增长,每月有超过一百万的新用户加入。那么,这一主流的秘密是什么?让我们在本文中探讨一下。 领先一步:市场 数字时代正在重新定义娱乐,iG…

LeetCode 2476.二叉搜索树最近节点查询:中序遍历 + 二分查找

【LetMeFly】2476.二叉搜索树最近节点查询:中序遍历 二分查找 力扣题目链接:https://leetcode.cn/problems/closest-nodes-queries-in-a-binary-search-tree/ 给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 qu…

Java零基础 - 算术运算符

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

基于Java+SSM+Jsp宿舍管理系统(源码+演示视频+包运行成功+Maven版)

您好,我是码农小波(wei158888),感谢您阅读本文,欢迎一键三连哦。 ❤️ 1. 毕业设计专栏,毕业季咱们不慌,上千款毕业设计等你来选。 目录 1、项目背景 2、项目演示 3、使用技术 4、系统设计 …

Linux--shell编程中分区表常用操作 全面且详细

文章中关于分区表常用操作目录: 一、概念 二、​​​​​​​创建分区表语法 ​​​​​​​三、创建一个表带多个分区 四、​​​​​​​加载数据到分区表中 五、加载数据到一个多分区的表中去 ​​​​​​​六、查看分区 七、​​​​​​​添加一个分区…

Vue局部注册组件实现组件化登录注册

Vue局部注册组件实现组件化登录注册 一、效果二、代码1、index.js2、App.vue3、首页4、登录(注册同理) 一、效果 注意我这里使用了element组件 二、代码 1、index.js import Vue from vue import VueRouter from vue-router import Login from ../vie…

vue源码分析之nextTick源码分析-逐行逐析-个人困惑

nextTick的使用背景 在vue项目中,经常会使用到nextTick这个api,一直在猜想其是怎么实现的,今天有幸研读了下,虽然源码又些许问题,但仍值得借鉴 核心源码解析 判断当前环境使用最合适的API并保存函数 promise 判断…

云原生超融合八大核心能力|ZStack Edge云原生超融合产品技术解读

企业数字化转型的焦点正在发生变化,云基础设施由资源到应用,数据中心从核心到边缘。面向云原生趋势,围绕应用升级,新一代超融合产品——云原生超融合应运而生。 ZStackEdge云原生超融合是基于云原生架构研发的新一代IT基础设施 …

EI论文联合复现:含分布式发电的微网/综合能源系统储能容量多时间尺度线性配置方法程序代码!

适用平台:Matlab/Gurobi 程序提出了基于线性规划方法的多时间尺度储能容量配置方法,以满足微电网的接入要求为前提,以最小储能配置容量为目标,对混合储能装置进行容量配置。程序较为基础,算例丰富、注释清晰、干货满满…

【设计模式】策略模式及函数式编程的替代

本文介绍策略模式以及使用函数式编程替代简单的策略模式。 策略模式 在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略,并将每个算法封装在独立…

PyPDF2:项目实战源码分享(PDF裁剪)

目录📑 1. 背景📑2. 源码模块解析📑2.1 读取PDF页数2.2 获取指定页的宽高尺寸2.3 裁剪单页PDF2.4 批量裁剪PDF 总结📑 1. 背景📑 接PyPDF2模块推荐博文中提到的实际需求(将银行网站下载来的多页且单页多张…

【大数据】Flink 内存管理(二):JobManager 内存分配(含实际计算案例)

Flink 内存管理(二):JobManager 内存分配 1.分配 Total Process Size2.分配 Total Flink Size3.单独分配 Heap Size4.分配 Total Process Size 和 Heap Size5.分配 Total Flink Size 和 Heap Size JobManager 是 Flink 集群的控制元素。它由三…

亿道丨三防平板丨加固平板丨为零售业提供四大优势

随着全球经济的快速发展,作为传统行业的零售业也迎来了绝佳的发展机遇,在互联网智能化的大环境下,越来越多的零售企业选择三防平板电脑作为工作中的电子设备。作为一种耐用的移动选项,三防平板带来的不仅仅是坚固的外壳。坚固耐用…