我正在尝试使用服务帐户将Dynamics CRM软件的日历同步到Google.在此过程中,我遇到了关于.net的谷歌API缺乏文档,特别是关于授权.由于使用了过时的库和类,大多数Google样本都无法编译.
所以我发现了一些关于实习和接收错误的例子.有人可以看看我的样品,告诉我做错了什么?
准备步骤:
然后创建了控制台应用程序并设法安装OAuth和Calendar nuget包.有:
有一个代码可以找到并适应我的需求:
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 …oauth google-calendar-api google-api google-oauth google-api-dotnet-client
我正在开发一个带有 Angular 和 Cordova 插件的 Android 应用程序,我想将其与 Google 身份验证集成。我已经安装了cordova-plugin-googleplus 并且已成功集成到该应用程序中。当用户登录时,我会收到响应,我可以在其中获取 accessToken、配置文件用户信息和刷新令牌。
现在我想实现一个功能来刷新令牌,而不会每小时用新的提示屏幕打扰用户。
我已成功更新 accessToken,但仅在第一次有效
我用过这两种方式:
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'
重点是,当用户第一次登录(使用 cordova-plugin-googleplus)时,我收到一个具有这种格式的刷新令牌
4/rgFU-hxw9QSbfdj3ppQ4sqDjK2Dr3m_YU_UMCqcveUgjIa3voawbN9TD6SVLShedTPveQeZWDdR-Sf1nFrss1hc
如果一段时间后我尝试以上述任何一种方式刷新令牌,我会收到带有新 accessToken 和新刷新令牌的成功响应。新的刷新令牌具有其他格式
1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J
在第二次尝试更新令牌时,我将令牌替换为第一个请求中返回的令牌
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'
但这一次,两种方式(Curl 和 Java)我都遇到了相同的错误。
{
  "error" : "invalid_grant",
  "error_description" : "Malformed auth code."
}
我在这个帖子上读到,将 clientId 指定为电子邮件是一个问题,但我还没有发现如何解决它,因为第一次登录是使用客户端 ID“XXXXXXX.apps.googleusercontent.com”完成的,并且如果我设置来自 google …
oauth-2.0 cordova google-oauth google-oauth-java-client cordova-plugins
我在尝试在电子邮件 JS 中配置服务时收到 412 Gmail_API:请求的身份验证范围不足。此外,在使用 React.js 库发送电子邮件时收到相同的错误。
下面是错误的屏幕截图。
我正在尝试为自己创建一个直接连接到我的日历的应用程序......但我从不想参与重新验证.我只想编写一次身份验证代码并完成它.
验证码如下:
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
我的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) …我正在寻找有关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 令牌。
一切看起来都很好,我为用户存储了令牌。然后我请求列出用户的日历,我得到了无效请求的无效请求。我使用另一个用户的令牌(也在我的开发环境中)尝试相同的请求,并且它工作正常。
我最初只有第一个范围设置,即写级别访问。这就是所有现有令牌的创建方式。在我的测试过程中,我添加了其他范围。
我尝试在我的项目中更新 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(), …我正在编写一个使用谷歌日历 api 的程序,所以我使用了这里的快速入门并且它有效。但最近相同的代码停止工作并给了我以下错误。
The API returned an error: Error: invalid_grant
这意味着错误来自
103: calendar.events.list()
什么可能导致此问题,我该如何解决?