标签: google-api-dotnet-client

仅在必要时刷新访问令牌

按照此处发布上一个问题,我正在尝试使用服务器应用程序中的日历服务。

我“自己”管理身份验证流程并将用户的访问令牌和刷新令牌存储在数据库中。现在我想我可以使用 .NET 客户端示例中显示的方法来使用CalendarService. 但我仍然想知道该IAuthorizationState GetAuthorization(WebServerClient client)方法的最佳实现是什么,以便仅在需要时才请求刷新访问令牌。我当前的幼稚实现每次都会刷新令牌:

private IAuthorizationState GetAuthorization(WebServerClient client)
{
    IAuthorizationState state = new AuthorizationState(new[] { "profile", CalendarService.Scopes.Calendar.GetStringValue() });
    state.AccessToken = _accessToken;
    state.RefreshToken = _refreshToken;

    client.RefreshToken(state);

    return state;
}
Run Code Online (Sandbox Code Playgroud)

...但我相信有更聪明的方法来做到这一点!

提前致谢。

c# authentication oauth-2.0 google-oauth google-api-dotnet-client

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

Google Admin SDK-异常access_denied请求的客户端未经授权

我希望有人可以帮助我。

请看下面的源代码。结束时单击“执行”。我将收到以下错误:

未处理Google.Apis.Auth.OAuth2.Responses.TokenResponseException _HResult = -2146233088 _message =错误:“ access_denied”,说明:“未授权请求的客户端。”,Uri:“”

我已经尝试了很多东西。创建用户,列表组等(具有正确的作用域)等,但是每次遇到相同的错误时。

我已经创建了一个服务帐户,并且Google Developers Console中的所有API都设置为“ on”。我用于模拟的用户是完全管理员。

我尝试了几件事,但是我必须做一些愚蠢的事情。该代码看起来很像Stack Overflow上的另一个问题:Google Admin SDK无法创建用户-禁止例外403, 但是我的代码无法正常工作。谁能告诉我我忘记了什么?

private static readonly string[] Scopes = new string[] { DirectoryService.Scope.AdminDirectoryUser, DirectoryService.Scope.AdminDirectoryGroup, DirectoryService.Scope.AdminDirectoryGroupMember };

    static void Main(string[] args)
    {

        String serviceAccountEmail = "***@developer.gserviceaccount.com";
        var certificate = new X509Certificate2(@"file.p12", "notasecret", X509KeyStorageFlags.Exportable);
        ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(serviceAccountEmail)
           {
               Scopes = Scopes,
               User = "admin email address",

           }.FromCertificate(certificate));
        var service = new DirectoryService(new BaseClientService.Initializer()
       {
           HttpClientInitializer = credential,
           ApplicationName = "User Provisioning", …
Run Code Online (Sandbox Code Playgroud)

google-api-dotnet-client google-admin-sdk

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

Google云端存储上传无法使用C#API

我正在尝试通过C#API将简单图像上传到Google云存储.它似乎成功了,但我的Google云端存储桶中没有任何内容.

我到目前为止的代码:

Google.Apis.Services.BaseClientService.Initializer init = new Google.Apis.Services.BaseClientService.Initializer();
init.ApiKey = "@@myapikey@@";
init.ApplicationName = "@@myapplicationname@@";

Google.Apis.Storage.v1.StorageService ss = new Google.Apis.Storage.v1.StorageService(init);

var fileobj = new Google.Apis.Storage.v1.Data.Object()
{
    Bucket = "images",
                    Name = "some-file-" + new Random().Next(1, 666)
};

Stream stream = null;
stream = new MemoryStream(img);

Google.Apis.Storage.v1.ObjectsResource.InsertMediaUpload insmedia;
insmedia = new Google.Apis.Storage.v1.ObjectsResource.InsertMediaUpload(ss, fileobj, "images", stream, "image/jpeg");
insmedia.Upload();
response.message = img.Length.ToString();
Run Code Online (Sandbox Code Playgroud)

c# google-api google-cloud-storage google-api-dotnet-client

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

如何创建具有访问权限和Google Drive API令牌的凭证对象

我想对工作表和Google驱动器api使用相同的OAuth代码和令牌,而无需将工作表和驱动器重定向到第2页。

以下是使用oauth 2生成访问代码和令牌的代码

                string SCOPE = "https://spreadsheets.google.com/feeds https://docs.google.com/feeds";
                OAuth2Parameters parameters = new OAuth2Parameters();
                parameters.ClientId = CLIENT_ID;
                parameters.ClientSecret = CLIENT_SECRET;
                parameters.RedirectUri = REDIRECT_URI;
                parameters.Scope = SCOPE;
                string authorizationUrl = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters); 
                OAuthUtil.GetAccessToken(parameters);
                string accessToken = parameters.AccessToken;
Run Code Online (Sandbox Code Playgroud)

就像在asp.net mvc中一样,它是通过重定向Google表格API生成的。

我也想使用Google Drive API来获得相同的令牌。

我如何才能为Google Drive API 创建凭据对象,以便与其一起使用。遵循代码打开另一个窗口并将代码发送到该窗口。

var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets
      {
         ClientId = clientId,
         ClientSecret = clientSecret
      }, scopes, "skhan", CancellationToken.None, new FileDataStore("Drive.Auth.Store")).Result;
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc oauth google-drive-api google-api-dotnet-client

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

Gmail API - 值“= 获取标签 google-api-dotnet-client/1.25.0.0 (gzip)”的格式无效

我开始探索 Gmail API。我按照教程显示标签列表(https://developers.google.com/gmail/api/quickstart/dotnet),并且工作正常。

高度赞赏帮助

当我修改程序流程时,它给了我错误。我无法追踪错误。它给了我方法错误Execute()

错误:值“= Get Labels google-api-dotnet-client/1.25.0.0 (gzip)”的格式无效

这是我的代码。

public static class Labels
{
    public static void ListLabels ( )
    {
        try
        {
            var scope = new [] { GmailService.Scope.GmailReadonly };
            var service = Authorization.GetGmailService(scope, "AppName = Get Labels");

            if (service != null)
            {
                var requestListLabels = service.Users.Labels.List("me");

                var labelsList = requestListLabels.Execute().Labels;

                Console .WriteLine ( "\n\n---- Labels List ----" );
                if ( labelsList != null && labelsList .Count > 0 )
                {
                    foreach ( …
Run Code Online (Sandbox Code Playgroud)

.net c# google-api-dotnet-client gmail-api

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

使用 Google 管理目录 API 使用 Google ServiceAccountCredential 登录需要 401

我尝试遵循此处列出的简单示例:https ://developers.google.com/admin-sdk/directory/v1/quickstart/dotnet

不同之处在于我生成了一个服务帐户凭据,并将其分配为具有角色项目所有者的委托,因此它具有完全访问权限。我还为它分配了适当的作用域名称空间。

在这里它可以访问Orgunits,这就是我试图在 Directory API 中列出的内容

范围已分配

这是我定义的服务帐户

在此输入图像描述

这是我的凭据

在此输入图像描述

我下载了凭证的 JSON 并将其添加到我的项目中。我可以通过检查调试器确认代码加载 ServiceAccountCredential 并成功进行身份验证并获取访问令牌。

但随后我将凭据传递给服务初始化程序,当我创建并执行请求时,它会失败并显示

{"Google.Apis.Requests.RequestError\r\nLogin Required [401]\r\nErrors [\r\n\tMessage[Login Required] Location[Authorization - header] Reason[required] Domain[global]\r\n]\r\n"}
Run Code Online (Sandbox Code Playgroud)

这是代码:

using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using System;
using System.Collections.Generic;
using System.IO;

namespace DirectoryQuickstart
{
    class Program
    {
        static string[] Scopes = { DirectoryService.Scope.AdminDirectoryUser, DirectoryService.Scope.AdminDirectoryOrgunit };
        static string ApplicationName = "slea-crm";
        static string Secret = "gsuite-secret.json";

        static void Main(string[] args)
        {

            ServiceAccountCredential sac = GoogleCredential.FromFile(Secret).CreateScoped(Scopes).UnderlyingCredential as ServiceAccountCredential;

            var token = sac.GetAccessTokenForRequestAsync().Result;

            // Create …
Run Code Online (Sandbox Code Playgroud)

google-api google-oauth google-api-dotnet-client google-admin-sdk google-workspace

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

使用 Google Analytics v3 .Net 类库设置自定义超时

我正在尝试使用 Google 的 .Net 客户端库 (Analytics v3) 通过我的 GA 服务帐户获取数据。一切工作正常,除了在向 GA API(使用客户端库)发出请求期间偶尔会出现超时。我想调整超时逻辑(如果可能的话,通过库添加重试逻辑 - 但这是一个较小的问题)。

目前我无法弄清楚如何通过客户端库修改超时设置。通过阅读他们的源代码(因为我在 .net 方面找不到任何类似有用的文档),看起来我需要实现“IConfigurableHttpClientInitializer”。下面是我想到的一个示例,但我不确定它是否正确或如何将其与我现有的代码集成。下面还摘录了我的相关代码。

设置超时的类

public class TimeoutInitializer : IConfigurableHttpClientInitializer
{
    public void Initialize(ConfigurableHttpClient httpClient)
    {
        httpClient.Timeout = TimeSpan.FromMinutes(3);
    }
}
Run Code Online (Sandbox Code Playgroud)

现有代码

private async Task<GaData> GetAnalyticsData(string profileId, DateTime begin, DateTime end, string metrics, string dimensions)
    {
        GoogleCredential credential = AnalyticsHelper.GetCredentials(options.GoogleAnalyticsOptions);

        var service = new AnalyticsService(new BaseClientService.Initializer() { HttpClientInitializer = credential });
        DataResource.GaResource.GetRequest request = service.Data.Ga.Get($"ga:{profileId}", AnalyticsHelper.FormatDate(begin), AnalyticsHelper.FormatDate(end), metrics);
        if (!string.IsNullOrEmpty(dimensions))
        {
            request.Dimensions = dimensions;
        }

        return await …
Run Code Online (Sandbox Code Playgroud)

c# google-api-dotnet-client asp.net-core

0
推荐指数
1
解决办法
836
查看次数

使用服务用户通过电子邮件地址将文件上传到Google云端硬盘

我正在使用服务帐户凭据连接到服务帐户.

我正在尝试扩展它以用于同一公司内的多个用户.所有用户都将拥有该公司管理的Google帐户,并且我将为整个公司提供gsuite服务帐户.如何使用gsuite服务帐户根据电子邮件地址将文件上传到用户个人Google云端硬盘?

c# google-api google-drive-api google-api-dotnet-client

0
推荐指数
1
解决办法
346
查看次数