【azure】office 365邮箱auth2认证之spa的刷新令牌过期后如何处理

news2024/12/28 4:31:51

参考:https://learn.microsoft.com/zh-cn/azure/active-directory/develop/refresh-tokens

官方对令牌和刷新令牌生命周期的描述

在这里插入图片描述

已失效的刷新令牌如何获取新的令牌和刷新令牌

/**
 * office 365使用失效的刷新令牌和应用程序的相关信息来获取新的访问令牌和刷新令牌
 * @param oldRefreshToken 已过期的刷新令牌
 */
export const officeGetNewRefreshToken = async (oldRefreshToken) => {
  const tokenEndpoint = `https://login.microsoftonline.com/${off_tenant}/oauth2/v2.0/token`;

  const requestBody = {
    client_id: off_clientId,
    // client_secret: off_clientSecret,
    grant_type: 'refresh_token',
    refresh_token: oldRefreshToken,
    redirect_uri: off_redirectUri, // 请修改为适当的重定向 URI
  };

  try {
    const response = await axios.post(tokenEndpoint, qs.stringify(requestBody), {
      headers: { 'vv-origin': 'http://localhost', 'Content-Type': 'application/x-www-form-urlencoded' },
    });

    const newAccessToken = response.data.access_token;
    const newRefreshToken = response.data.refresh_token;

    // 使用新的访问令牌和刷新令牌调用 API 或进行其他操作
    console.log('新的访问令牌:', newAccessToken);
    console.log('新的刷新令牌:', newRefreshToken);
  } catch (error) {
    console.error('获取新的令牌失败:', error.response.data);
  }
};

如何测试刷新令牌是否过期,参考下图,最简单的是修改帐户密码

在这里插入图片描述

未过期的刷新令牌获取新的访问令牌和刷新令牌

  const params = {
    client_id: off_clientId,
    scope: off_scopes.join(' '),
    refresh_token: refreshToken,
    grant_type: 'refresh_token',
  };

  axios
    .post(url, params, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'vv-origin': 'http://localhost',
      },
    })
    .then((res) => {
      console.log('success===>', res);
      if (res && res.data) {
        const data = res.data;
        // 获得刷新后的token和refreshToken
        const opts = {
          serviceId,
          refreshToken: data.refresh_token,
          accessToken: data.access_token,
          expiresIn: data.expires_in,
          email,
        };
        console.log('使用刷新令牌从office获取新的访问令牌', data, opts);
        updateBindEmailInfo(opts);
      }
    });

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

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

相关文章

PyTorch安装配置(windows)

一、Anaconda安装与配置 Anaconda提供了conda机制用于管理Python数据分析时常用的工具库/包 官网下载最新的(翻墙):https://repo.anaconda.com/archive/ 清华大学Anaconda镜像站:https://mirrors4.tuna.tsinghua.edu.cn/help/an…

从研发赋能型PMO到产研管理型PMO的组织变革思考︱广联达产研管理部副总经理丰之恺

广联达科技股份有限公司产研管理部副总经理丰之恺先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:从研发赋能型PMO到产研管理型PMO的组织变革思考。大会将于8月12-13日在北京举办,敬请关注! 议题简要&#x…

4G无线通信技术的单片机远程升级研究(学习)

介绍了一种基于4G无线通信技术的单片机远程在线升级系统及方法,由上位机、4G无线模块、嵌入式设备终端3部分组成。 结合EC20 R2.1 4G模块,介绍了4G无线网络的组建方法,借助4G网络实现远程无线升级。 通过验证测试,系统能够实现嵌入…

css内阴影

CSS内阴影及特定方向内阴影 基本参数: /* x 偏移量 | y 偏移量 | 阴影颜色 */ box-shadow: 60px -16px teal;/* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影颜色 */ box-shadow: 10px 5px 5px black;/* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影扩散半径 | 阴影…

Python GUI编程利器:初始Tkinker(1)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 神兽归笼 最近天气炎热起来了,大家一定要注意防暑降温啊! 马上要放暑假了,你有什么计划没…

AI届老牌顶流!AI孙燕姿?AI配音?带你玩转语音合成!

热度与争议并存!AI孙燕姿成新晋顶流?随着AI孙燕姿的爆火,AI老牌顶流「语音合成」再度被炒热飞桨AI Studio也汇聚着众多“语音合成”深度玩家本期就来带大家快速上手 AI克隆歌手 该应用项目使用AI孙燕姿同源模型So-VITS-SVC 4.0,其…

Pyside6-QtCharts+psutil实战-绘制一个CPU监测工具

今天是实战篇章,我们结合可以快速提升我们开发效率的工具一起开实战一波实时读取系统CPU使用情况的折线图。 使用的开发工具Qt Designer来开发UI界面。 十分便捷。使用起来也算比较的简单了,虽然也存在不少的BUG。 ❝ 对所需要的控件进行拖拽式&#xff…

如何看待低级爬虫与高级爬虫?

爬虫之所以分为高级和低级,主要是基于其功能、复杂性和灵活性的差异。根据我总结大概有下面几点原因: 功能和复杂性:高级爬虫通常提供更多功能和扩展性,包括处理复杂页面结构、模拟用户操作、解析和清洗数据等。它们解决了开发者…

死神来了 | 印度火车,能靠点谱吗?

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 阿福 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩天津录音间 6月初,印度三列火车先后相撞,造成288人死亡、1175人受伤,被称为印度本世…

基于Echarts2.X的地图数据可视化指南

目录 前言 一、关于Echarts版本 1、为什么用Echarts2.2.7 2、文件目录说明 二、地图数据可视化 1、新建map.html 2、Echarts图表初始化 3、参数设置 三、源码展示分析 1、初始化阶段 2、timelineOption.js模拟数据 总结 前言 在前面的博文(数据会说话-从我国…

ebpf执行报错no BTF found for kernel

一、现象描述 采用cilium epbf框架开发的ebpf程序无法在系统上正常运行。 curtiscurtis-desktop:~$ cd work/ curtiscurtis-desktop:~/work$ ls kmodule vfs_write_moitor curtiscurtis-desktop:~/work$ curtiscurtis-desktop:~/work$ sudo ./vfs_write_moitor -filename/mn…

第九十天学习记录:C++核心:函数提高

函数默认参数 在C中,函数的形参列表中的形参是可以有默认值的。 语法:返回值类型 函数名 (参数默认值){} 问:C语言可以在函数的形参赋默认值吗? 答: 在C语言中&#xf…

Unity 之 抖音小游戏本地数据最新存储方法分享

Unity 之 抖音小游戏本地数据最新存储方法分享 一、抖音小游戏文件存储系统背景二、文件存储系统的使用方法2.1 初始化2.1 创建目录2.3 存储数据2.4 删除目录/文件2.5 其他相关操作 三,小结 抖音小游戏是一种基于抖音平台开发的小型游戏,与传统的 APP 不…

Java POI (2)—— Excel文件的上传与导出(实例演示)

一、单文件的上传功能 这里是一个demo的流程图,下面按照这个流程图做了一个简单的实现,有部分判断没有加上,实际操作中,可以根据自己的需求进行增加或者修改。并且此处还是在接受文件传入后将文件进行了下载,保存到本地…

哪个爬虫库用的最多?

在Python中,最常用的爬虫库是requests和BeautifulSoup。requests库用于发送HTTP请求和处理响应,而BeautifulSoup库用于解析HTML文档。这两个库通常结合使用,用于爬取网页内容并提取所需的数据。其他常用的爬虫库还包括Scrapy、Selenium等。 常…

我的创作纪念日(256)

目录 机缘 收获 日常 成就 憧憬 机缘 要说为什么我会选择IT这条路,我觉得是因为从小对电脑的兴趣,从小学2年级开始的电脑生涯,但是那时候也只是玩电脑游戏,而由于我接触电脑较早的缘故,开始有许多的朋友遇到问题…

vue+heatmapjs-vue实现热力图,点击/滑动可以监听并更新

实现效果如下: 点击的次数或者滑动越多,区域的颜色越深 1.下载最新版热力图插件 npm install heatmapjs-vue 2.main.js中全局引用 注意!!!只能全局引用,不能局部引用,局部引用就报错显示不出…

「2024」预备研究生mem-形式逻辑强化:入选名额

一、入选名额 从后往前推 二、课后题

第3章-数组

1. 数组的概述 数组(Array), 是多个相同类型数据按一定顺序排列 的集合, 并使用一个名字命名, 并通过编号的方式 对这些数据进行统一管理数组的常见概念 数组名下标(或索引)元素数组的长度 数组本身是引用数据类型, 而数组中的元…

spring boot admin服务监控报错

使用spring boot admin监控服务启动出现报错:adminHandlerMapping对象创建失败 org.springframework.beans.factory.BeanCreationException: Error creating bean with name adminHandlerMappingdefined in class path resource [de/codecentric/boot/admin/server…