编程语言
首页 > 编程语言> > c#-从Google的客户电子邮件和私钥(服务帐户)获取令牌

c#-从Google的客户电子邮件和私钥(服务帐户)获取令牌

作者:互联网

我花了很多时间试图获得身份验证令牌.

我需要向用户显示一些收集的Google Analytics(分析)信息(我是Google Analytics(分析)的所有者).我已经创建了一个服务帐户,并且已经使用此示例测试了所有帐户,并且一切正常(当然使用Nuget包).

例如:Link

代码示例工作方式:

string[] scopes = new string[] {AnalyticsService.Scope.Analytics}; // view and manage your Google Analytics data

var keyFilePath = @"c:\file.p12" ;    // Downloaded from https://console.developers.google.com
var serviceAccountEmail = "xx@developer.gserviceaccount.com";  // found https://console.developers.google.com

//loading the Key file
var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);
var credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer(serviceAccountEmail) {
                                                   Scopes = scopes}.FromCertificate(certificate));

我使用了Fiddler,可以看到令牌在Google和我的App之间是如何“飞行”的,但是我没有任何选择.

我需要这样做,在Python上类似此代码,但在C#中使用Embed API

# service-account.py

import json
from oauth2client.client import SignedJwtAssertionCredentials

# The scope for the OAuth2 request.
SCOPE = 'https://www.googleapis.com/auth/analytics.readonly'

# The location of the key file with the key data.
KEY_FILEPATH = 'path/to/json-key.json'

# Load the key file's private data.
with open(KEY_FILEPATH) as key_file:
  _key_data = json.load(key_file)

# Construct a credentials objects from the key data and OAuth2 scope.
_credentials = SignedJwtAssertionCredentials(
    _key_data['client_email'], _key_data['private_key'], SCOPE)

# Defines a method to get an access token from the credentials object.
# The access token is automatically refreshed if it has expired.
def get_access_token():
  return _credentials.get_access_token().access_token

如果您阅读有关Embed Api的文档,则会发现您需要令牌…

 /**
   * Authorize the user with an access token obtained server side.
   */
  gapi.analytics.auth.authorize({
    'serverAuth': {
      'access_token': '{{ ACCESS_TOKEN_FROM_SERVICE_ACCOUNT }}'
    }
  });

有了所有这些信息,我该如何获得服务令牌?谢谢!!

解决方法:

这对我有用

C#代码:

   public string bearer;
   GoogleCredential credential;

        string fichero = Server.MapPath("") + "//file.json";
        using (Stream stream = new FileStream(fichero, FileMode.Open,   FileAccess.Read, FileShare.Read))
        {
            credential = GoogleCredential.FromStream(stream);
        }
        credential = credential.CreateScoped(new[] { 
       "https://www.googleapis.com/auth/analytics.readonly" });


        try
        {
            Task<string> task = ((ITokenAccess)credential).GetAccessTokenForRequestAsync();
            task.Wait();
            bearer = task.Result;

        }
        catch (AggregateException ex)
        {
            throw ex.InnerException;
        }

JavaScript代码:

gapi.analytics.auth.authorize({
    'serverAuth': {
        'access_token': '<%=bearer%>'
    }
});

标签:google-analytics,google-oauth,python,c
来源: https://codeday.me/bug/20191119/2037655.html