如何使用C#中的服务帐户登录Google API-无效凭据

问题描述 投票:26回答:4

[我为尝试获得简单的服务帐户登录名以使用C#,使用Google API和Google Analytics(分析)而感到非常痛苦。我的公司已经将数据导入到Analytics(分析)中,我可以使用他们的Query Explorer查询信息,但是从.Net入门并没有成功。我使用的是Google生成的带有PKI的json文件,因为该文档说,这样的服务帐户是使用Googla API进行计算机到计算机通信的正确方法。代码段:

public static GoogleCredential _cred;
public static string _exePath;

static void Main(string[] args) {
    _exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Replace(@"file:\", "");
    var t = Task.Run(() => Run());
    t.Wait();
}

private static async Task Run() {
    try {
        // Get active credential
        using (var stream = new FileStream(_exePath + "\\Default-GASvcAcct-508d097b0bff.json", FileMode.Open, FileAccess.Read)) {
            _cred = GoogleCredential.FromStream(stream);
        }
        if (_cred.IsCreateScopedRequired) {
        _cred.CreateScoped(new string[] { AnalyticsService.Scope.Analytics });
        }
        // Create the service
        AnalyticsService service = new AnalyticsService(
            new BaseClientService.Initializer() {
                HttpClientInitializer = _cred,
            });
        var act1 = service.Management.Accounts.List().Execute(); // blows-up here

它们都可以正常编译,但是当它碰到Execute()语句时,会抛出GoogleApiException错误:

[[无效的凭证]位置[授权-标头]原因[authError]域[全局]

我想念什么?] >>

[我为尝试获得简单的服务帐户登录名以使用C#,使用Google API和Google Analytics(分析)而感到非常痛苦。我的公司已经将数据输入到Google Analytics(分析)中,我可以查询...

c# google-oauth google-analytics-api google-api-dotnet-client service-accounts
4个回答
30
投票

[似乎GoogleAnalytics无法使用通用GoogleCredential并将其解释为ServiceAccountCredential(即使在内部承认它实际上是该类型


5
投票

发生无效的凭证错误,因为您指定的范围实际上并未随凭证一起发送。我犯了同样的错误,并且仅在调试后才意识到,并且在CreateScoped调用之后仍在凭证上看到0个作用域。


0
投票

另一种选择是使用GoogleCredential.GetApplicationDefault()。我相信这是当前(2018年10月)推荐的方法。这是一些F#,但在C#模语法中几乎相同:


0
投票

[2020年,您不需要做所有这些事情,并且GoogleCredential可以正常工作。问题中的代码看起来正确,只有一行:

© www.soinside.com 2019 - 2024. All rights reserved.