2014-03-25 7 views
6

Ich versuche, eine Server-Anwendung zu erstellen, die Benutzer zu den Gruppen meiner Domäne hinzufügen/entfernen wird. Beachten Sie, dass es keine Interaktion mit Benutzern gibt, es ist eine Server-zu-Server-Anwendung.Wie verwende ich JWT, um mit NodeJS-Client-Bibliotheken auf Google Directory (Admin SDK) zuzugreifen?

registrierte ich meine Anwendung in der Google API-Konsole heruntergeladen den Schlüssel und verwandeln sie durch .PEM

Ausgabe
openssl pkcs12 -in my_google_key.p12 -out my_google_key.pem -nocerts -nodes 

Dann habe ich bereits in der Domainverwaltung, Sicherheit -> Erweiterte Einstellungen -> Authentication -> OAuth Client-Zugriff verwalten. Dort habe ich einen Datensatz in Authorized API Clients hinzugefügt. Ich benutzte die ID-Client ich aus dem Dienstkonto in Console bekam und verwendet -umfang:

https://www.googleapis.com/auth/admin.directory.group.

I googleapis für NodeJS installiert, mit

npm install googleapis 

Und hier ist mein Code:

var googleapis = require('googleapis'); 

var SERVICE_ACCOUNT_EMAIL = 'My Service Account E-mail Address'; 
var SERVICE_ACCOUNT_KEY_FILE = 'my_google_key.pem'; // The .pem file is at the root of my application 

var jwt = new googleapis.auth.JWT(
    SERVICE_ACCOUNT_EMAIL, 
    SERVICE_ACCOUNT_KEY_FILE, 
    null, 
    ['https://www.googleapis.com/auth/admin.directory.group'] 
); 

var client; 

googleapis 
.discover('admin', 'directory_v1') 
.execute(function(err, data) { 
    client = data; 

    jwt.authorize(function(err, result) { 
     console.log(jwt); 
     client.admin.groups.list({ 
      "customer": "my_customer", // This is actually "my_customer" 
      "domain": "domain.com" // The domain name I administer 
     }) 
     .withAuthClient(jwt) 
     .execute(function(err, result) { 
      console.log(err); 
      console.log(result); 
     }); 
    }); 
}); 

Und das Ergebnis der Ausführung dieses Codes ist:

{ errors: 
    [ { domain: 'global', 
     reason: 'forbidden', 
     message: 'Not Authorized to access this resource/api' } ], 
    code: 403, 
    message: 'Not Authorized to access this resource/api' } 

Was fehlt mir? Wie autorisiere ich meine Anwendung mit dem Admin SDK?

Antwort

7

1) Stellen Sie sicher, dass Sie eine domänenweite Berechtigung an Ihr Dienstkonto delegieren.

2) Dienstkonten müssen die Identität einer Person mit Zugriff auf die Admin SDK-Verzeichnis-API annehmen.

es Fügen Sie bei der Initialisierung:

var jwt = new googleapis.auth.JWT(
    SERVICE_ACCOUNT_EMAIL, 
    SERVICE_ACCOUNT_KEY_FILE, 
    null, 
    ['https://www.googleapis.com/auth/admin.directory.group'], 
    [email protected] 
); 

Dieser Abschnitt der docs diese beiden im Detail erklärt: https://developers.google.com/admin-sdk/directory/v1/guides/delegation#delegate_domain-wide_authority_to_your_service_account