Google OAuth:无法使用授权代码获取刷新令牌

2024-02-08

我正在使用 Google API 客户端进行 Google Analytics 和 OAuth 2.0

我阅读此内容是为了获取刷新令牌,但它没有出现:https://developers.google.com/identity/protocols/OAuth2WebServer#offline https://developers.google.com/identity/protocols/OAuth2WebServer#offline

我只得到这个:

{
 "access_token": "ya29.twHFi4LsiF-AITwzCpupMmie-fljyTIzD9lG8y_OYUdEGKSDL7vD8LPKIqdzRwvoQAWd",
 "token_type": "Bearer",
 "expires_in": 3599,
 "id_token": "very long string"
}

这是代码:

Javascript(获取授权码): 这样可行

gapi.analytics.ready(function() {

    gapi.analytics.auth.authorize({
        container: 'embed-api-auth-container',
        clientid: '257497260674-ji56vq885ohe9cdr1j6u0bcpr6hu7rde.apps.googleusercontent.com',
    });

    gapi.analytics.auth.on('success', function(response) {
        var code = response.code;
        $.ajax({
            url: "getTokensFromCode.php",
            method: "GET",
            data: {
                "code": code
            },
            success: function (tokens) {
                // I can't get refresh token here, only get "access_token" and "id_token"
                console.log(tokens);
            }
        });


    });

});

PHP(用于交换令牌的授权码): 那行不通

// I get the authorization code in Javascript
$code = $_GET['code'];
$redirectURI = "postmessage";

$client = new Google_Client();
$client->setClientId($clientID);
$client->setClientSecret($clientSecret);
$client->setRedirectUri($redirectURI);
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->authenticate($code);

$tokens = $client->getAccessToken();
echo $tokens;

我需要 Javascript 中的刷新令牌,这就是为什么我在 Javascript 中获取授权代码并发出 Ajax 请求来获取刷新令牌。


你只会得到refresh_token用户第一次授予对您的应用程序的访问权限。您需要将refresh_token存储在某个地方以便以后能够使用它。用户下次登录您的应用程序时,您将不会获得新的刷新令牌。

FWIW:在 Javascript 客户端中使用刷新令牌没有多大意义,因为 Javascript 客户端无法以安全(机密)的方式存储它。由于 Javascript 客户端存在于浏览器中,并且用户存在于浏览器中,因此您只需再次将浏览器重定向到授权端点,您将获得一个新的访问令牌(这也是刷新令牌的目的)。 Google 用户的 SSO 会话将确保用户无需再次登录,并且体验是无缝的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google OAuth:无法使用授权代码获取刷新令牌 的相关文章

  • 使用 Crypto++ 和 .NET 的 CFB 模式下的 TripleDES

    我正在尝试使用 TripleDES 使用 C 应用程序获得相同的结果 该应用程序具有Crypto https www cryptopp com 和 NET应用程序使用三重DESCryptoServiceProvider https msdn
  • 如何找到在SQL Server中注册的程序集?

    我在 SQL Server 中注册了一个程序集 CREATE ASSEMBLY CLRFunctions AUTHORIZATION dbo FROM 0x4D5A90000300000 WITH PERMISSION SET SAFE 我
  • 什么是 Android DecorView?

    http developer android com reference android view Window html getDecorView http developer android com reference android
  • 如何修复 Mapbox GL 中的画布大小?

    我正在使用 Mapbox GL 显示地图并从其中心裁剪固定大小的图像 它非常适合我设计的特定分辨率 1920x1080 但是当我开始使页面响应时 地图样式width and height变化了 画布尺寸也开始变化了 因此 当我裁剪图像时 大
  • 列出 J 中数字的数字

    我使用的编程语言 J 我想将一个数字的所有数字放入一个列表中 From 12345 to 1 2 3 4 5 我能做些什么 我写这个的方式是 10 1 我们可以看到它与这句话的使用 10 1 123456789 1 2 3 4 5 6 7
  • 为什么在 data.frame 中预先指定类型会比较慢?

    我预先分配了一个大 data frame 以便稍后填写 我通常这样做NA是这样的 n lt 1e6 a lt data frame c1 1 n c2 NA c3 NA 我想知道如果我预先指定数据类型是否会让事情变得更快 所以我测试了 f1
  • 文件和目录条目 API 在 Chrome 中损坏?

    我正在尝试使用文件和目录条目 API 创建一个文件上传器工具 该工具允许我将文件和目录的任意组合放入浏览器窗口中 以供读取和上传 我完全意识到 可以通过使用文件输入元素来实现类似的功能webkitdirectory已启用 但我正在测试一个用
  • python:日志记录:我们可以向记录器添加多个过滤器吗?考虑哪一个

    我试图了解 Python 日志记录中的多个过滤器 一个在配置中定义 另一个在代码中定义 如何工作 我正在开发一个 Django 项目 下面是我在 settings py 中的记录器配置 我的目标是switch on and switch o
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav
  • 如何从 Pandas 数据框函数调用中回顾之前的行?

    我正在研究 回测交易系统 我有一个包含 OHLC 数据的 Pandas 数据框 并添加了几个计算列 https stackoverflow com questions 12376863 adding calculated columns t
  • 错误“RESOURCE_EXHAUSTED”的原因是什么?

    我有一个 WordPress 博客 当我登录到仪表板时 顶部突出显示了以下异常 Ga Lib Api Request Exception There was an error while contacting Google API erro
  • 处理错误“TypeError: Expected tuple, got str”将 CSV 加载到 pandas 多级和多索引 (pandas)

    我正在尝试加载 CSV 文件 这个文件 https drive google com file d 13a eVeSzy6HkhffQw32S57U hm5YCj0 view usp sharing 创建一个多索引多级数据帧 它有5 五 指
  • 如何将 Emgu.Cv.Image 转换为 System.Image

    我是 Emgu Cv 的新手 我想知道是否有人可以让我知道如何将 Emgu Cv Image 更改为 System Image 如果需要进一步解释 请告诉我 我会这样做 我的语言我使用的是C 你可以只使用ToImage 方法得到一个Syst
  • 如何在Python中捕获打印机事件

    我想在打印机开始打印时捕获信号 如果你告诉我如何获取将要打印的文档的路径 那就太好了 pywin32print看起来很有用 但不知道怎么用 要获得新打印作业的通知 您可以使用FindFirstPrinterChangeNotificatio
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr
  • 在本地调试 Azure Functions

    我在 Net 标准 2 0 中有一个函数 FunctionName A Test public static async Task
  • Android:如何获取所有可用意图过滤器的列表?

    我搜索了 Android 文档 但由于某些疯狂的原因 我无法找到所有可用意图过滤器的列表 我正在寻找一个意图过滤器 它可以执行诸如通过广播接收器通知我特定活动 例如浏览器或电子邮件 已启动或位于前台之类的操作 有人能帮我吗 PackageE
  • 加载谷歌地图控件时是否有事件?

    我知道tilesloaded 但控件似乎在该事件之后加载 我基本上希望能够通过 jQuery 获取控件 但甚至找不到正确的监听 我也刚刚处理了 没有类似的事件 在控件可见之前空闲和tilesloaded触发 因此 基本上将 特殊控制 类添加
  • NPM 如何处理版本冲突?

    由于 NPM 版本 3 节点模块和依赖项都安装在同一根级别 但是 如果我安装两个依赖于同一模块的两个不同版本的模块怎么办 例如 如果我安装异步npm i email protected cdn cgi l email protection
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • 在 Entity Framework Core 中编写实体 POCO 类的正确方法是什么?

    EF Core 默认具有 代码优先心态 即它应该以代码优先的方式使用 尽管支持数据库优先方法 但它被描述为只不过是对现有数据库进行逆向工程 创建它的代码优先表示 我的意思是 手动 代码 代码优先 创建的模型 POCO 类 和从数据库生成的模
  • 通过 ssh 转发 SIGTERM

    我希望 ssh 将 SIGTERM 信号转发到远程命令 ssh root localhost root print signal py 获取ssh的PID ps aux grep print signal 杀死匹配的 ssh 进程 kill
  • 如何在用户默认中保存对象列表?

    我的目标是 struct Order Codable var item id String var quantity Int 0 var image String var name String var desc String 函数的类别是
  • 如何在matlab中绘制地圈?

    如何在matlab中绘制地球圈 By Geosphere我的意思是球体上离散化点的方式 例如 3Ds Max 中的 Geosphere On the image below it is shown Sphere on the left an
  • 我如何检索通过java play中的post传递的数据

    这是我的代码 我需要检索 POST 中发送的数据 play db jpa Transactional public static Result registered String fullname String email String p
  • 重新编码鼠标 mids 对象

    我有一个mids对象创建自mice 我想重新编码一些估算变量并保留mids目的 我知道我可以转换mids反对 长 complete 但我想保留mids对象 因为它有一些额外的用途 这是一个使用的示例nhanes数据集 跑步mice 为变量创
  • 如何将 div 高度设置为所选打印纸张的 100%?

    如何将高度设置为所选打印纸张的 100 CSS width 100 height 100 margin auto margin top 0px important border 1px solid 当我在 Google Chrome 中打印
  • 所有本机修订的数据库在哪里?

    我已经阅读了所有 SO 问题 编码恐怖文章 并用 Google 搜索了我的大脑 寻找修订控制数据的最佳方法 它们都可以工作 并且都有基于用例等的适当实现 我真正想知道的是为什么没有编写一个数据库来原生支持数据级别的修改 让我感到困惑的是 A
  • ffmpeg concat 产生 DTS 乱序错误

    我正在关注有关如何操作的文档连接 https trac ffmpeg org wiki Concatenate文件与 ffmpeg 但在这个过程中我看到很多警告 输出视频在第一个块后停止 但音频继续播放 这是我用来连接文件的命令 ffmpe
  • 如何使用 javascript 捕获旧值并将其设置为取消

    我有一个文本字段 我从中调用一个函数onChange事件 当该文本字段中的值发生更改时 我会在此处抛出一个确认窗口 如果单击取消 在确认窗口中 则必须将旧值设置回文本字段 如果单击 继续 或 确定 则应保留新值 我已经尝试了很长时间 但无法
  • AVCaptureOutput didOutputSampleBuffer 停止被调用

    我对委托方法有疑问didOutputSampleBuffer CMSampleBufferRef sampleBuffer fromConnection AVCaptureConnection connection of AVCapture
  • 空数组似乎同时等于 true 和 false

    空数组为 true 但也等于 false var arr console log Array arr if arr console log It s true if arr false console log It s false if a
  • AWS dax 稳定性问题

    我正在尝试将 DAX 引入我们的架构 但到目前为止尚未成功 通过 lambda 发生与 dax 的连接 完成的设置类似于 AWS 文档中的示例 Lambda 和 Dax 位于同一个 vpc 中 它们大部分时间都可以看到对方 并且 dax 正
  • 为什么我无法在 PHP 文件中使用 AJAX 发布 JSON 数据?

    我有一个 AJAX 脚本 可以在我的 PHP 文件之一中发布数据 var lname ptLastName val var fname ptFirstName val var mname ptMiddleName val ajax type
  • 如何在 JavaScript 中执行 str_replace,替换 JavaScript 中的文本?

    我想用str replace或其类似的替代方案来替换 JavaScript 中的某些文本 var text this is some sample text that i want to replace var new text repla
  • map 不是reactJS 中的函数

    当我执行 console log response data 时 它返回了 2 个数据集 即 post 和 user const dbdata setDBData useState useEffect async gt const resp
  • CSS 网格在 Flexbox 内时不会增长

    我对 CSS Grid 的理解是 它会增长以填充其父级 但是当父级的大小由 Flexbox 控制时 这似乎无法正常工作 In 这个例子 https stackblitz com edit js gds31u file index html
  • 如果一个数字位于两个数字之间,则分配一个值

    我试图将 1 的值分配给向量中 2 到 5 之间的每个数字 我认为 if then 语句会起作用 我遇到了一些麻烦 我不认为 2 x lt c 3 2 6 7 8 1 3 2 5 if 2
  • 返回唯一值而不删除重复项 - C#

    我知道关于删除重复项后返回数组中的唯一值有很多答案 但是删除重复项后数组中的每个元素不是都是唯一的吗 我只想在删除任何重复项之前返回唯一的值 如果该元素在原始数组中重复 我不希望它出现在最终数组中 那么这个数组 0 1 1 2 3 3 3
  • Google OAuth:无法使用授权代码获取刷新令牌

    我正在使用 Google API 客户端进行 Google Analytics 和 OAuth 2 0 我阅读此内容是为了获取刷新令牌 但它没有出现 https developers google com identity protocol