Software & Apps

Software und Apps sind aus unserem Alltag nicht mehr wegzudenken; von Musik- und Videobearbeitung, Antiviren-Tools, VPN-Clients bis hin zu Office und gewissen Alternativen - hier dreht sich alles um Software & Apps für Deinen PC.
67.703 Beiträge

Ask Me Anything: Blickwechsel

Du stellst die Fragen, ein außergewöhnlicher Nutzer antwortet! Begegne mit Deinen Fragen anderen Menschen hautnah und persönlich.
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

Ask Me Anything: Themenspecials

Im gutefrage Themenspecial beantworten Verbände, Organisationen und Personen des öffentlichen Lebens Deine Fragen zu aktuellen Themen.