Hi zusammen,
ich hab da mal ein Problem ;)
Ich möchte meinem team anbieten, sich anstelle der ID mit O365 anzumelden. Soweit sogut.
Leider gibt mir meine Seite diesen Fehler aus, sobald sich jemand anmeldet.
GuzzleHttp\Exception\RequestException Object
(
[message:protected] => cURL error 3: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)
[string:Exception:private] =>
[code:protected] => 0
[file:protected] => /var/www/vhosts/HIERSTEHTMEINEDOMAIN/httpdocs/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
[line:protected] => 211
[trace:Exception:private] => Array
(
Client ID & Secret sowie Redicret URL habe ich überall gecheckt. Es sollte weiterleiten auf /scripts/oauth_callback.php:
<?php
session_start();
require '../vendor/autoload.php';
$config = require '../config.php';
use League\OAuth2\Client\Provider\GenericProvider;
$tenantId = 'HIERMEINETENANTID'; // Ihre Tenant-ID
$provider = new GenericProvider([
'clientId' => $config['clientId'],
'clientSecret' => $config['clientSecret'],
'redirectUri' => $config['redirectUri'],
'urlAuthorize' => "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/authorize",
'urlAccessToken' => "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token",
'urlResourceOwnerDetails' => '',
'scopes' => 'openid profile email User.Read'
]);
if (!isset($_GET['code'])) {
$authorizationUrl = $provider->getAuthorizationUrl();
$_SESSION['oauth2state'] = $provider->getState();
header('Location: ' . $authorizationUrl);
exit;
} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
unset($_SESSION['oauth2state']);
exit('Invalid state');
} else {
try {
// Debugging: Anfrageparameter ausgeben
$tokenUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token";
echo 'Token URL: ' . $tokenUrl . '<br>';
echo 'Authorization Code: ' . $_GET['code'] . '<br>';
$accessToken = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
$resourceOwner = $provider->getResourceOwner($accessToken);
$userData = $resourceOwner->toArray();
// Email-Adresse des Benutzers abrufen
$userEmail = $userData['mail'] ?? $userData['userPrincipalName'];
if ($userEmail) {
// Benutzer anhand der E-Mail-Adresse in der Datenbank suchen
global $pdo;
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$userEmail]);
$user = $stmt->fetch();
if ($user) {
// Benutzer gefunden, in die Sitzung einloggen
$_SESSION['user'] = $user;
header('Location: /index.php');
exit;
} else {
// Benutzer nicht gefunden, Fehler anzeigen oder Registrierung initiieren
exit('Benutzer nicht gefunden.');
}
} else {
exit('E-Mail-Adresse konnte nicht abgerufen werden.');
}
} catch (Exception $e) {
// Debugging: Detaillierte Fehlerausgabe
echo '<pre>';
print_r($e);
echo '</pre>';
exit('Fehler beim Abrufen des Access Tokens.');
}
}
?>
Weiß jemand von euch Rat? Ich (und ChatGPT ;)) sind mit unserem Latein am Ende..
LG Philip