当前位置: 首页 > 知识库问答 >
问题:

令牌响应异常:401未经授权

钱飞翼
2023-03-14

我想使用服务帐户实现谷歌表API请求。我创建了这个代码:

HttpTransport httpTransport = new NetHttpTransport();
        JacksonFactory JSON_FACTORY = new JacksonFactory();

        ClassLoader classLoader = this.getClass().getClassLoader();
        java.io.File path = new java.io.File(classLoader.getResource("i-6dc0c917ee63.p12").getFile());

        GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId("test221@sonora-project.iam.gserviceaccount.com")
            .setServiceAccountPrivateKeyFromP12File(path)
            .setServiceAccountScopes(Arrays.asList(SheetsScopes.SPREADSHEETS))
            .setServiceAccountUser("sonoraw@gmail.com")
            .build();

        Sheets service = new Sheets.Builder(httpTransport, JSON_FACTORY, null)
            .setApplicationName("project")
            .setHttpRequestInitializer(credential).build();

        Sheets.Spreadsheets spreadsheets = service.spreadsheets();
        Spreadsheet includeGridData = spreadsheets.get(spreadsheetId).execute();

但是我得到了这个错误:

com.google.api.client.auth.oauth2.TokenResponseException: 401 未经授权

在这个方法中。执行();

你知道我该如何解决这个问题吗?

共有2个答案

鲁炳
2023-03-14

根据标准错误响应,错误 401 是由无效的凭据引起的,这表示身份验证令牌无效或已过期。

建议采取的行动:

如果未修复问题,请不要重试。您需要获得新的身份验证令牌。

有了这个,你可能想要检查令牌过期,其中提到你必须编写代码来预测授予的令牌可能不再工作的可能性。它还给出了令牌可能停止工作的以下可能原因:

  • 用户已吊销访问权限。
  • 该令牌已有六个月未使用。
  • 用户更改了密码,令牌包含 Gmail 范围。
  • 用户帐户已超过一定数量的令牌请求

希望这有帮助!

黄聪
2023-03-14

我有同样的问题,这让我发疯。我有两个相同应用程序的不同副本,使用相同的凭据。json,但我会在其中一个得到成功的响应,但在另一个得到401未授权的响应。我最终通过删除<code>StoredCredential<code>解决了这个问题。所以,下一次我运行我的应用程序时,我被带到了谷歌的认证页面,它成功了。

TLDR:删除<code>StoredRedential

 类似资料:
  • 我使用了以下来自google的示例https://developers.google.com/identity/sign-in/web/server-side-flow到目前为止,我能够实现以下步骤: 用户在客户端(浏览器)进行身份验证。 代码返回并保存在服务器数据库中。 请求身份验证代码令牌时,响应异常:401未授权 我检查了以下内容: 接口已启用 在 https://developers.go

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激

  • 我成功地将Graph API用于各种事情,但我需要访问OneNote API来在班级笔记本上执行学生和教师的添加/删除操作。当我用https://www.OneNote.com资源请求一个令牌时,它提供了一个令牌,但当我试图使用它访问OneNote API时,无论发送什么(有效)请求,我都会得到401--“请求不包含有效的身份验证令牌”。 我的令牌请求: POST https://login.mi

  • 我正在使用: 邮递员/失眠检查 为Laravel Passport制作了Laravel文档中描述的所有检查表,经过某些步骤后,我收到了有效OAuth访问令牌的HTTP 401。 由/oauth/token/请求具有客户端id和客户端机密的新访问令牌 使用接收到的访问令牌授权包含Oauth api中间件的简单Laravel REST测试控制器 结尾是1:401:( 下面是我的一些配置:

  • 任何人都可以帮助或建议我应该坚持什么,以便能够代表用户发布-一旦他们从服务或控制台应用程序给了我们许可。 提前谢了。

  • 我尝试了这里给出的例子。 https://developers.google.com/sheets/quickstart/java 它给了我这个例外- 我已经给了它所有必要的许可。 我使用的是表单api版本v4 更新- 如果我在示例中传递而不是,那么它会给我这个响应。 变化- 响应 - 我从这个链接得到了进一步的帮助来解决< code>400 -无法解析范围:类数据!A2:A4" 400错误请求解