相关疑难解决方法(0)

Google API OAuth2,服务帐户,"错误":"invalid_grant"

我正在尝试使用服务帐户将Dynamics CRM软件的日历同步到Google.在此过程中,我遇到了关于.net的谷歌API缺乏文档,特别是关于授权.由于使用了过时的库和类,大多数Google样本都无法编译.

所以我发现了一些关于实习和接收错误的例子.有人可以看看我的样品,告诉我做错了什么?

准备步骤:

  1. 我在私人Google帐户中创建了一个项目.
  2. 在项目开发者控制台中,在APIS&AUTH - > Credentials下,我生成了服务帐户.然后单击"生成P12键"并下载.p12文件.
  3. 在APIS和AUTH - > API下,打开"Calendar API"

然后创建了控制台应用程序并设法安装OAuth和Calendar nuget包.有:

  1. Google API Auth Client Library,Google.Apis.Auth 1.8.1
  2. Google API客户端库,Google.Apis 1.8.1
  3. Google API核心客户端库,Id:Google.Apis.Core 1.8.1
  4. Google.APIs.Calendar.v3客户端库,Google.Apis.Calendar.V3 1.8.1.860

有一个代码可以找到并适应我的需求:

using System;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Calendar.v3;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;

namespace CrmToGoogleCalendar
{
    class Program
    {

        static void Connect()
        {
            var certificate = new X509Certificate2("My Project-ee7facaa2bb1.p12", "notasecret", X509KeyStorageFlags.Exportable);


            var serviceAccountEmail = "506310960175-q2k8hjl141bml57ikufinsh6n8qiu93b@developer.gserviceaccount.com";
            var userAccountEmail = "<my email>@gmail.com";
            var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail) 
                {
                    User = userAccountEmail,
                    Scopes …
Run Code Online (Sandbox Code Playgroud)

oauth google-calendar-api google-api google-oauth google-api-dotnet-client

12
推荐指数
1
解决办法
3万
查看次数

第二次尝试刷新令牌时如何修复“格式错误的身份验证代码”?

我正在开发一个带有 Angular 和 Cordova 插件的 Android 应用程序,我想将其与 Google 身份验证集成。我已经安装了cordova-plugin-googleplus 并且已成功集成到该应用程序中。当用户登录时,我会收到响应,我可以在其中获取 accessToken、配置文件用户信息和刷新令牌。

现在我想实现一个功能来刷新令牌,而不会每小时用新的提示屏幕打扰用户。

我已成功更新 accessToken,但仅在第一次有效

我用过这两种方式:

  1. 发送带有以下数据的curl请求
curl -X POST \
  'https://oauth2.googleapis.com/token?code=XXXXXXXXXXXXXXXX&client_id=XXXXXXXXXXXXXXXX.apps.googleusercontent.com&client_secret=YYYYYYYYYYYY&grant_type=authorization_code' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded'
Run Code Online (Sandbox Code Playgroud)
  1. 使用 Google API Client Library for Java 在服务器端实现它并主要遵循这些代码

重点是,当用户第一次登录(使用 cordova-plugin-googleplus)时,我收到一个具有这种格式的刷新令牌

4/rgFU-hxw9QSbfdj3ppQ4sqDjK2Dr3m_YU_UMCqcveUgjIa3voawbN9TD6SVLShedTPveQeZWDdR-Sf1nFrss1hc
Run Code Online (Sandbox Code Playgroud)

如果一段时间后我尝试以上述任何一种方式刷新令牌,我会收到带有新 accessToken 和新刷新令牌的成功响应。新的刷新令牌具有其他格式

1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J
Run Code Online (Sandbox Code Playgroud)

在第二次尝试更新令牌时,我将令牌替换为第一个请求中返回的令牌

curl -X POST \
  'https://oauth2.googleapis.com/token?code=1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J&client_id=XXXXXXXXXXXXXXXX.apps.googleusercontent.com&client_secret=YYYYYYYYYYYY&grant_type=authorization_code' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded'
Run Code Online (Sandbox Code Playgroud)

但这一次,两种方式(Curl 和 Java)我都遇到了相同的错误。

{
  "error" : "invalid_grant",
  "error_description" : "Malformed auth code."
}
Run Code Online (Sandbox Code Playgroud)

我在这个帖子上读到,将 clientId 指定为电子邮件是一个问题,但我还没有发现如何解决它,因为第一次登录是使用客户端 ID“XXXXXXX.apps.googleusercontent.com”完成的,并且如果我设置来自 google …

oauth-2.0 cordova google-oauth google-oauth-java-client cordova-plugins

12
推荐指数
3
解决办法
3万
查看次数

为什么在 EmailJS 中添加服务时出现错误?

我在尝试在电子邮件 JS 中配置服务时收到 412 Gmail_API:请求的身份验证范围不足。此外,在使用 React.js 库发送电子邮件时收到相同的错误。

下面是错误的屏幕截图。

添加服务时图像显示错误

scopes reactjs

7
推荐指数
2
解决办法
2万
查看次数

尝试在ruby中将服务器授权为服务器类型应用程序以访问Google日历时无效授权

我正在尝试为自己创建一个直接连接到我的日历的应用程序......但我从不想参与重新验证.我只想编写一次身份验证代码并完成它.

验证码如下:

key = Google::APIClient::PKCS12.load_key(SERVICE_ACCOUNT_PKCS12_FILE_PATH, PASSWORD)
asserter = Google::APIClient::JWTAsserter.new(
    SERVICE_ACCOUNT_EMAIL,
    'https://www.googleapis.com/auth/calendar', 
    key)
@client = Google::APIClient.new
@client.authorization = asserter.authorize#(SERVICE_ACCOUNT_EMAIL)
@client
Run Code Online (Sandbox Code Playgroud)

我的SERVICE_ACCOUNT_...PKCS .文件和我的Sinatra应用程序一起位于目录的根目录中.
我已在我的Gmail帐户上启用了Google Calendar API.

我一直在寻找一种身份验证方法:https: //code.google.com/p/google-api-ruby-client/(在授权下,它谈到服务器到服务器的通信)

$ ruby server.rb 
Faraday: you may want to install system_timer for reliable timeouts
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/faraday-0.8.4/lib/faraday/utils.rb:16: warning: already initialized constant KeyMap
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/faraday-0.8.4/lib/faraday/utils.rb:177: warning: already initialized constant DEFAULT_SEP
W, [2013-01-15T09:52:11.371122 #28607]  WARN -- : Google::APIClient - Please provide :application_name and :application_version when initializing the client
/home/me/.rvm/gems/ruby-1.8.7-p371/gems/signet-0.4.4/lib/signet/oauth_2/client.rb:869:in `fetch_access_token': Authorization failed.  Server message: (Signet::AuthorizationError) …
Run Code Online (Sandbox Code Playgroud)

ruby google-calendar-api google-api sinatra

6
推荐指数
1
解决办法
1427
查看次数

Google OAuth 2.0 API在多大程度上支持RFC7636?

我正在寻找有关Google OAuth2 API中RFC7636(OAuth令牌交换的校对密钥)状态的具体信息.

Google公开了一个OAuth 2.0和OIDC提供商API,可以获取访问令牌.RFC7636中描述了一种建议的标准,用于在令牌交换中使用证明密钥,我们已经开始在与主要身份提供商的集成中使用.有些人接受证明密钥,有些人则忽略它; Google似乎意识到了这一点,但未能验证证明密钥.我还没有找到任何关于谷歌的提及.

具体而言,当遵循OAuth 2.0授权代码流与Google作为提供者时,我们生成一个随机数,使用SHA256对其进行哈希处理,对其进行base64 URL编码,然后将其传递给https://accounts.google.com/o/oauth2/v2/auth作为参数"code_challenge"和"code_challenge_method"按照规范.

端点接受参数并照常发出授权令牌.获取访问令牌时,我们使用code_verifier 调用https://www.googleapis.com/oauth2/v4/token ; 端点返回以下HTTP 400错误,表明存在一些代码验证者的意识:{"error":"invalid_grant","error_description":"缺少代码验证程序".}

developer.google.com/identity/protocols/OAuth2上的Google OAuth文档未提及任何这些参数; API操场不会扩展到使用OAuth2身份验证和令牌端点.任何见解将不胜感激.

oauth-2.0 google-oauth2

5
推荐指数
1
解决办法
434
查看次数

Google Calendar API 返回 invalid_grant 和错误的请求

在我的开发环境中,我有一个用户,我刚刚收到了以下范围的 OAuth 令牌。

一切看起来都很好,我为用户存储了令牌。然后我请求列出用户的日历,我得到了无效请求的无效请求。我使用另一个用户的令牌(也在我的开发环境中)尝试相同的请求,并且它工作正常。

我最初只有第一个范围设置,即写级别访问。这就是所有现有令牌的创建方式。在我的测试过程中,我添加了其他范围。

我尝试在我的项目中更新 Google API 的 NuGet 包。

这是我的班级正在打电话。

public class GoogleCalendarAdapter : ICalendarAdapter {
    #region attributes
    private readonly ISiteAuthTokenQueryRepository _tokenRepo;
    private readonly GoogleCalendarSettings        _settings;

    private const string APPNAME = "REDACTED";

    private const string ACL_OWNER = "owner";
    private const string ACL_WRITER = "writer";
    #endregion

    #region ctor
    public GoogleCalendarAdapter(ISiteAuthTokenQueryRepository tokenRepo,
                                 GoogleCalendarSettings        settings) {
        _tokenRepo = tokenRepo;
        _settings  = settings;
    }
    #endregion

    #region methods
    private GoogleAuthorizationCodeFlow BuildAuthorizationCodeFlow() {
        return new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer() {
            ClientSecrets = BuildClientSecrets(), …
Run Code Online (Sandbox Code Playgroud)

c# google-calendar-api

5
推荐指数
1
解决办法
483
查看次数

node.js google oauth2 示例停止工作 invalid_grant

我正在编写一个使用谷歌日历 api 的程序,所以我使用了这里的快速入门并且它有效。但最近相同的代码停止工作并给了我以下错误。

The API returned an error: Error: invalid_grant
Run Code Online (Sandbox Code Playgroud)

这意味着错误来自

103: calendar.events.list()
Run Code Online (Sandbox Code Playgroud)

什么可能导致此问题,我该如何解决?

google-calendar-api node.js oauth-2.0

4
推荐指数
1
解决办法
1837
查看次数