2016-03-23 13 views
3

Ich versuche, die Google Identity Toolkit API für eine PHP-basierte Anwendung zu verwenden.Google Identity Toolkit API für PHP gibt INVALID_CLIENT zurück

Ich habe im Anschluss an die Schnellstart-Anleitung von Google finden Sie hier: https://developers.google.com/identity/toolkit/web/quickstart/php

ich die Schritte genau befolgt haben (und geprüft und doppelt geprüft).

Die Anmeldeschaltfläche wird auf der Seite index.php angezeigt. Wenn Sie darauf klicken, wird auf die Seite widget.php weitergeleitet. Ich kann wählen, welches Konto ich mit, anmelden möge und dann, wenn die erfolgreiche Anmeldeseite zurück (index.php wieder) ich die folgende Fehlermeldung angezeigt:

Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Error refreshing the OAuth2 token, message: '{ "error" : "invalid_client", "error_description" : "The OAuth client was invalid." }'

Ich habe versucht, das OAuth-Client neu zu erstellen innerhalb der Google Entwicklerkonsole Einige Suchergebnisse, die zum Überprüfen der E-Mail- und Projektnamensfelder verwendet wurden, wurden auf dem Bildschirm "OAuth-Zustimmung" abgeschlossen. Alle diese Schritte wurden von mir durchgeführt.

Jede Hilfe & beraten würde sehr geschätzt werden. Hinweis: Ich verwende "Google" nur unter den verfügbaren Anbietern unter den Identity Toolkit-API-Einstellungen.

Meine Seite index.php:

<!DOCTYPE html> 
<html> 
<head> 

<!-- 1: Load the Google Identity Toolkit helpers --> 
<?php 
    set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ .'/vendor/google/apiclient/src'); 
    require_once __DIR__ . '/vendor/autoload.php'; 

    $gitkitClient = Gitkit_Client::createFromFile(dirname(__FILE__) . '/gitkit-server-config.json'); 
    $gitkitUser = $gitkitClient->getUserInRequest(); 
?> 
<!-- End modification 1 --> 

<script type="text/javascript" src="//www.gstatic.com/authtoolkit/js/gitkit.js"></script> 
<link type=text/css rel=stylesheet href="//www.gstatic.com/authtoolkit/css/gitkit.css" /> 

<script type=text/javascript> 
    window.google.identitytoolkit.signInButton(
    '#navbar', 
    { 
     widgetUrl: "/gitkit", 
     signOutUrl: "/index" 
    } 
); 
</script> 
</head> 
<body> 
<div id="navbar"></div> 

<!-- 2: Print the user information if a signed in user is present --> 
<p> 
    <?php if ($gitkitUser) { ?> 
    Welcome back!<br><br> 
    Email: <?= $gitkitUser->getEmail() ?><br> 
    Id: <?= $gitkitUser->getUserId() ?><br> 
    Name: <?= $gitkitUser->getDisplayName() ?><br> 
    Identity provider: <?= $gitkitUser->getProviderId() ?><br> 
    <?php } else { ?> 
    You are not logged in yet. 
    <?php } ?> 
</p> 
<!-- End modification 2 --> 

</body> 
</html> 

Meine gitkit.php Seite:

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

<!-- Copy and paste here the client configuration from Developer Console into the config variable --> 
<script type="text/javascript" src="//www.gstatic.com/authtoolkit/js/gitkit.js"></script> 
<link type="text/css" rel="stylesheet" href="//www.gstatic.com/authtoolkit/css/gitkit.css" /> 
<script type="text/javascript"> 
    var config = 
    { 
    "widgetUrl": "http://local.myfakedomain.com/gitkit", 
    "signInSuccessUrl": "/", 
    "signOutUrl": "/", 
    "oobActionUrl": "/", 
    "apiKey": "<my-api-key-here>", 
    "siteName": "this site", 
    "signInOptions": ["password","google"] 
} 
    ; 
    // The HTTP POST body should be escaped by the server to prevent XSS 
    window.google.identitytoolkit.start(
     '#gitkitWidgetDiv', // accepts any CSS selector 
     config, 
     JSON.parse('<?php echo json_encode(file_get_contents("php://input")); ?>') 
); 
</script> 
<!-- End modification --> 

</head> 
<body> 

<!-- Include the sign in page widget with the matching 'gitkitWidgetDiv' id --> 
<div id="gitkitWidgetDiv"></div> 
<!-- End identity toolkit widget --> 

</body> 
</html> 

mein gitkit-server-config.json Datei:

{ 
    "clientId": "<my-client-id-here>", 
    "projectId": "<my-project-id-here>", 
    "serviceAccountEmail": "<my-serviceAccountEmail-here>", 
    "serviceAccountPrivateKeyFile": "<my-p12-KeyFile-location-here>", 
    "widgetUrl": "http://local.myfakedomain.com/gitkit", 
    "cookieName": "gtoken" 
} 

Antwort

6

ich hatte dasselbe Problem, das ich es gelöst durch „richtige“ Dienstkonto E-Mail in der Serverkonfiguration Einfügen von Code:

{ 
    "clientId": "<my-client-id-here>", 
    "projectId": "<my-project-id-here>", 
    "serviceAccountEmail": "<Correct-serviceAccountEmail-here>", 
    "serviceAccountPrivateKeyFile": "<my-p12-KeyFile-location-here>", 
    "widgetUrl": "http://local.myfakedomain.com/gitkit", 
    "cookieName": "gtoken" 
} 

Der Trick ist, dass serviceAccuou ntEmail ist nicht Ihre E-Mail google zu finden, die richtige E-Mail dann unter Dienstkonto Schlüssel Klick Verwalten von Dienstkonten Link rechts zu Credentials gehen, um den Dienst in Betrieb gehen und das E-Mail-Feld beachten. Die E-Mail ist lang und das Format wird etwa so aussehen: [email protected]

+0

Danke, das hat es gelöst :) –

+0

Das hat mein Problem gelöst. Hinweis: Hier finden Sie die richtige E-Mail-Adresse des Dienstkontos: https://console.developers.google.com/permissions/serviceaccounts Suchen Sie nach der Spalte "Dienstkonto-ID". – hirikarate

0

In Ihrem gitkit -server-config.json-Datei sollte das serviceAccountEmail -nicht- leer sein. Sie können die E-Mail des Dienstkontos von Ihrer Google Developers Console-Projekteinstellungsseite kopieren.

+0

Leider löst dies das Problem nicht. –

0

Neben dem Dienstkonto E-Mail (so etwas wie „[email protected]“, das Projekt Id verursacht mir Probleme.

Die Lösung, die ich fand, war, wenn google sagt Ihr projectId ist „example.com:appname“, ändern sie ihn auf „appname“

Verwandte Themen