Comment se connecter à l'API de Google avec le Compte de Service en C# - informations d'Identification non valides
Je suis de battre moi-même sanglante essayer d'obtenir un simple service de compte de connexion à travailler en C#, à l'API de Google et de Google Analytics. Mon entreprise est déjà en train de données dans google Analytics, et je peux les informations de requête avec leur Requête Explorer, mais la prise en main .Net n'est pas d'aller n'importe où. Je suis en utilisant Google généré un fichier json avec PKI, comme la documentation dit que ces un compte de service est la bonne façon pour ordinateur à ordinateur, la communication avec Googla API. Code snipet:
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
Tout compile bien, mais quand il a frappé le Execute (), l'énoncé de GoogleApiException
erreur est levée:
[Informations d'Identification non valides] Localisation[Autorisation de l'en - tête] Raison[authError] Domaine[global]
Ce qui me manque?
OriginalL'auteur Vic Lindsey | 2016-07-14
Vous devez vous connecter pour publier un commentaire.
Il semble que la GoogleAnalytics ne peut pas consommer un générique
GoogleCredential
et de l'interpréter comme unServiceAccountCredential
(même s'il est reconnu, interally, qu'il est en fait de ce type). Ainsi, vous devez créer unServiceAccountCredential
à la dure. Il est également regrettable queGoogleCredential
ne pas exposer les différentes propriétés de l'information d'identification, j'ai donc dû construire mon propre.J'ai utilisé le JSON en C# Générateur de Classe à http://jsonclassgenerator.codeplex.com/ de construire un "personnelle" ServiceAccountCredential objet à l'aide de la librairie JSON qui est partie intégrante de l'API de Google (Newtonsoft.Json), extrait des pièces essentielles de la téléchargé le fichier json du compte de service, pour construire les informations d'identification requises, à l'aide de son e-mail et la clé privée propriétés. En passant un véritable
ServiceAccountCredential
à la GoogleAnalytics constructeur du service, les résultats dans une connexion réussie, et que l'accès du compte autorisé de ressources.Échantillon du code du travail ci-dessous:
Certains peuvent se demander ce que Google générés par le service d'identification du compte avec PKI (Clé Privée) ressemble. À partir de l'Api Google Gestionnaire (IAM & Admin)https://console.developers.google.com/iam-admin/projects, sélectionnez le projet (vous avez au moins un de ces éléments). Maintenant, sélectionnez comptes de Service (à partir du menu de navigation de gauche des liens), et CRÉER de COMPTE de SERVICE en haut de l'écran. Remplissez un nom, la Fournir une nouvelle clé privée case à cocher, puis cliquez sur Créer. Google va provoquer un téléchargement automatique d'un fichier JSON, qui ressemble à quelque chose comme ceci:
J'ai été trop paresseux pour utiliser votre générateur de classe de trucs. Donc à la place j'ai fait ceci:
Newtonsoft.Json.Linq.JObject cr = (Newtonsoft.Json.Linq.JObject) JsonConvert.DeserializeObject(json); string s = (string) cr.GetValue("private_key");
je vous Remercie pour votre réponse-- il a beaucoup aidé.OriginalL'auteur Vic Lindsey
Une autre option est d'utiliser
GoogleCredential.GetApplicationDefault()
. Je crois que c'est actuellement (Oct. 2018) approche recommandée. Voici quelques F#, mais c'est plus ou moins la même chose en C# modulo syntaxe:Maintenant, assurez-vous que vous définissez la
GOOGLE_APPLICATION_CREDENTIALS
pour pointer vers le fichier avec les informations d'identification du fichier JSON, par exemple.GOOGLE_APPLICATION_CREDENTIALS=creds.json dotnet run
.OriginalL'auteur skainswo