Microsoft oAuth2 anmeldung nicht möglich?

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

Microsoft, MySQL, PHP
Welches Backend + Hosting für kleine Webseiten?

Ich möchte eine Webseite für ein kleines Unternehmen erstellen.

Sie wird ziemlich Frontend-lastig sein bis auf ein zwei Besonderheiten:

  • Ein Kontakt-Formular, bei dem man eine Nachricht eingeben kann, die dem Unternehmer dann automatisch per Email zugesandt wird
  • Ein Blog, bei dem der Unternehmer selbst Posts (bestehend aus Text & Bildern) erstellen kann, in einer Art Admin-Panel mit WYSIWYG-Editor, und diese direkt oder zu einem bestimmten Zeitpunkt automatisch veröffentlichen kann

Beim Frontend fällt die Technologie-Auswahl noch relativ leicht, TypeScript und ein gängiges Framework wie z.B. React.
Als Datenbank würde ich MySQL oder PostgreSQL verwenden.

Beim Backend weiß ich nun aber nicht weiter.

Welches Framework würde sich für eine Webseite dieser Größe am besten anbieten?
Es sollte beim Hosting billig sein (z.B. durch niedrigen RAM-Verbrauch), der Code sollte einfach und schnell zu schreiben sein, und es sollte die oben genannten Features möglichst einfach ermöglichen.

Express, Next.js, Laravel, Django, Flask, ASP.Net, Spring, ... ?
Was würdet ihr nehmen und warum?

Und zum Hosting, muss ich die Webseite auf einem vServer hosten, oder reicht auch ein Webspace?

Homepage, HTML, Webseite, programmieren, CSS, WordPress, Java, JavaScript, ASP.NET, Datenbank, Express, Hosting, Informatik, PHP, Programmiersprache, Python, Softwareentwicklung, vServer, Webdesign, Webentwicklung, Webspace, Backend, Frontend, Flask

Meistgelesene Fragen zum Thema PHP