Wenn ich mich bei Google anmelde und den PHP von Google API -Client verwendet habe, tausche ich einen Code aus und erhalte Token und User_id. Ich speichere das Token und User_id für diesen Benutzer.
data-client_id="xxx"
data-context="signup"
data-callback="onGoogleUser"
data-auto_select="true"
data-itp_support="true">
data-type="standard"
data-size="large"
data-theme="outline"
data-text="sign_in_with"
data-shape="rectangular"
data-logo_alignment="left">
< /code>
function onGoogleUser(__res){
var token = __res.credential;
//token is posted to login script (standard ajax)
}
< /code>
//login script, token received
$token = $_POST['token'];
/*
eyJhbGciOiJSUzI1NiIsImtpZCI6IjA3YjgwYTM2NTQyODUyNWY4YmY3Y2QwODQ2ZDc0YThlZTRlZjM2MjUiLCJ0eXAiOiJKV1QifQ
for info, once it is base64 decoded
{
"alg":"RS256",
"kid":"07b80a365428525f8bf7cd0846d74a8ee4ef3625",
"typ":"JWT"
}
*/
//init google client
$client = new \Google_Client();
//this loads a file containing the keys
$client->setAuthConfig(realpath('google.json'));
//verify token and get user info from payload
$payload = $client->verifyIdToken($token);
if($payload){
//user is logged, $payload->sub is user_id
//retrieve user from DB
$user = getUser($payload->sub);
//both token and user_id are saved in user document for later use
$user->google_id = $payload->sub;
$user->google_token = $token;
//save user into db
saveUser($user);
}
< /code>
In einem anderen Skript (erneut post) versuche ich, einen Dienst als mein protokollter Benutzer zu verwenden und das Token wieder zu verwenden, das bei der Anmeldung erhalten und gespeichert wurde, wobei < /p>
//query script
$user = getUser();
$client = new \Google_Client();
//this loads a file containing the keys
$client->setAuthConfig(realpath('google.json'));
//set the user token to the client
$client->setSubject($user->email);
$client->addScope('https://www.googleapis.com/auth/business.manage');
$client->setAccessToken($user->google_token);
//list accounts
$service = new \Google_Service_MyBusinessAccountManagement($client);
$accounts = $service->accounts->listAccounts()->getAccounts();
< /code>
Ich erhalte den Fehler, dass der Client nicht autorisiert ist < /p>
PHP Fatal error: Uncaught Google\Service\Exception: { "error": "unauthorized_client", "error_description": "Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested." }
< /code>
Muss ich den Client neu autorisieren? < /p>
Ich habe den richtigen Bereich in meiner Konsole für mein Projekt. Wenn ich mit Google OAuth 2.0 Playground unter Verwendung meiner Server -Anmeldeinformationen (das gleiche wie der Client in diesem Code) teste, erhalte ich eine ordnungsgemäße Antwort, aber das Token unterscheidet sich von dem JWT -Token, den ich habe. Muss ich erneut auth machen, um einen ähnlichen Token zu erhalten? Kann ich das JWT -Token des Benutzers nicht verwenden? < /P>
{
"access_token": "ya29.a0AZYkNZgRWn7N_ymc09DX_6VeDGObJh36Azb6z1ct2PHF-bgnvU9HND9i_ukAP18Q0LAnWSCNDE3sBslHx8bPbuq3wp0gJhjB25fgzM-jmJ5qzOct8hk1qNCIzy8F9BoRGC4G3D7ygX1fgcDIFdaHpQoq7ynLsxHb-O9769rmaCgYKAeMSARISFQHGX2Mi1q0mbNmw7Cx4wMEjZSyMdw0175",
"scope": "https://www.googleapis.com/auth/business.manage",
"token_type": "Bearer",
"expires_in": 3599,
"refresh_token": "1//04ZhkQNAoJzKcCgYIARAAGAQSNwF-L9Ir4CezWxtYhn57zlSkDK0cCmZOrvTOQhc5lDMrIkbhgp0M8ooxe9Ah7G6vHA0ISdSIAvI"
}
Wenn ich mich bei Google anmelde und den PHP von Google API -Client verwendet habe, tausche ich einen Code aus und erhalte Token und User_id. Ich speichere das Token und User_id für diesen Benutzer.[code]
//init google client $client = new \Google_Client();
//this loads a file containing the keys $client->setAuthConfig(realpath('google.json'));
//verify token and get user info from payload $payload = $client->verifyIdToken($token); if($payload){ //user is logged, $payload->sub is user_id
//retrieve user from DB $user = getUser($payload->sub);
//both token and user_id are saved in user document for later use $user->google_id = $payload->sub; $user->google_token = $token;
//save user into db saveUser($user);
} < /code> In einem anderen Skript (erneut post) versuche ich, einen Dienst als mein protokollter Benutzer zu verwenden und das Token wieder zu verwenden, das bei der Anmeldung erhalten und gespeichert wurde, wobei < /p> //query script $user = getUser(); $client = new \Google_Client();
//this loads a file containing the keys $client->setAuthConfig(realpath('google.json'));
//set the user token to the client $client->setSubject($user->email); $client->addScope('https://www.googleapis.com/auth/business.manage'); $client->setAccessToken($user->google_token);
//list accounts $service = new \Google_Service_MyBusinessAccountManagement($client); $accounts = $service->accounts->listAccounts()->getAccounts(); < /code> Ich erhalte den Fehler, dass der Client nicht autorisiert ist < /p> PHP Fatal error: Uncaught Google\Service\Exception: { "error": "unauthorized_client", "error_description": "Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested." } < /code> Muss ich den Client neu autorisieren? < /p> Ich habe den richtigen Bereich in meiner Konsole für mein Projekt. Wenn ich mit Google OAuth 2.0 Playground unter Verwendung meiner Server -Anmeldeinformationen (das gleiche wie der Client in diesem Code) teste, erhalte ich eine ordnungsgemäße Antwort, aber das Token unterscheidet sich von dem JWT -Token, den ich habe. Muss ich erneut auth machen, um einen ähnlichen Token zu erhalten? Kann ich das JWT -Token des Benutzers nicht verwenden? < /P> { "access_token": "ya29.a0AZYkNZgRWn7N_ymc09DX_6VeDGObJh36Azb6z1ct2PHF-bgnvU9HND9i_ukAP18Q0LAnWSCNDE3sBslHx8bPbuq3wp0gJhjB25fgzM-jmJ5qzOct8hk1qNCIzy8F9BoRGC4G3D7ygX1fgcDIFdaHpQoq7ynLsxHb-O9769rmaCgYKAeMSARISFQHGX2Mi1q0mbNmw7Cx4wMEjZSyMdw0175", "scope": "https://www.googleapis.com/auth/business.manage", "token_type": "Bearer", "expires_in": 3599, "refresh_token": "1//04ZhkQNAoJzKcCgYIARAAGAQSNwF-L9Ir4CezWxtYhn57zlSkDK0cCmZOrvTOQhc5lDMrIkbhgp0M8ooxe9Ah7G6vHA0ISdSIAvI" } [/code]
Ich habe eine Blazor -Serverside -Anwendung, in der ich Authentifizierung hinzufüge. Postauthentifizierung, überprüfen Sie, ob sich der Benutzer in der Datenbank befindet.
Ich denke, dem Client, den ich für die Spring-Sicherheit hinzugefügt habe, fehlt etwas, das der integrierte Admin-Client verwendet, wenn Sie die manuell besuchen und sich anmelden –...
Ich muss eine Möglichkeit implementieren, Videos von unserer Website auf YouTube hochzuladen. Ich habe die App bereits in Google Cloud registriert und alle erforderlichen Client -ID, Client...
Aufgrund einiger Entwicklungsbeschränkungen bei der Verwendung von .NET 8 muss ich einen wiederverwendbaren Dienst verwalten. Diese müssen entweder vorübergehend oder Singleton sein, aber 1 von 3...
Ich versuche, Google Anmeldung in meine Flutter-Android-App mit der Firebase-Authentifizierung zu integrieren, aber jeder Versuch endet mit (dies geschah nur bei der Veröffentlichung):...