在 PHP 中成功登录 Microsoft 365 后重定向问题

问题描述 投票:0回答:1

我正在开发一个 PHP 应用程序,该应用程序使用 OAuth 2.0 通过 Microsoft 365 对用户进行身份验证。登录流程工作正常,并且我能够成功获取访问令牌。但是,我在成功登录后将用户重定向到特定页面 (

LeaveManagement.php
) 时遇到问题。

我已确保会话在每个脚本的开头启动,并且会话变量在登录后正确设置。然而,重定向到

management.php
似乎没有按预期发生。

这是我的

login.php
脚本的简化版本:

<?php
session_start();
require 'php_scripts/db.php';  

// Initialize configuration variables from DB
$appid = getApiConfig($pdo, 'client_id');
$tenantid = getApiConfig($pdo, 'tenant_id');
$secret = getApiConfig($pdo, 'client_secret');
$redirect_uri = 'https://my.domain.com/management.php';  

// Redirect if already logged in
if (!empty($_SESSION['HRUserIsAllowed'])) {
    header("Location: $redirect_uri");
    exit;
}

// OAuth flow
if (isset($_GET['action']) && $_GET['action'] === 'login') {
    // Redirect to Microsoft login
    $loginUrl = "https://login.microsoftonline.com/{$tenantid}/oauth2/v2.0/authorize?" . http_build_query([
        'client_id' => $appid,
        'response_type' => 'code',
        'redirect_uri' => $redirect_uri,
        'scope' => 'https://graph.microsoft.com/User.Read offline_access',
        'state' => bin2hex(random_bytes(16)),
    ]);
    header('Location: ' . $loginUrl);
    exit;
} elseif (isset($_GET['code'])) {
    // Process the authorization code
    $tokenUrl = "https://login.microsoftonline.com/{$tenantid}/oauth2/v2.0/token";
    // ...Token request and session variable setup...
    // Assume successful token acquisition
    $_SESSION['HRUserIsAllowed'] = true;
    header("Location: $redirect_uri");
    exit;
} else {
    // Display login screen (simplified for brevity)
    echo "Login Screen HTML Here"; 
}
?>

以及我的

management.php
脚本的简化版本:

<?php
session_start();

require 'vendor/autoload.php';
require 'php_scripts/db.php'; 

if (!isset($_SESSION['HRUserIsAllowed']) || $_SESSION['HRUserIsAllowed'] !== true) {
  $current_page = (isset($_SERVER['HTTPS']) ? "https://" : "http://") . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
  header("Location: login.php?redirect_uri=" . urlencode($current_page));
  exit;

} else {

    // Code for when user is authenticated to view page
 }    
?>

登录后,脚本应该将用户重定向到https://my.domain.com/management.php,但此重定向失败。预期的行为是,一旦通过身份验证,用户不应再次看到登录页面,而应被定向到 management.php 页面。

值得注意的是,我已经检查了会话变量是否设置正确,并且标头没有明显的问题。

我正在寻找有关可能导致登录过程后重定向失败或被忽略的原因的见解或建议。我在重定向逻辑或会话处理中是否忽略了某些内容?

任何建议或指示将不胜感激。

php session redirect oauth-2.0 microsoft-graph-api
1个回答
1
投票

我认为你的错误是你试图重定向到

management.php
,而在下面的通话中它应该是
login.php

$loginUrl = "https://login.microsoftonline.com/{$tenantid}/oauth2/v2.0/authorize?" . http_build_query([
'client_id' => $appid,
'response_type' => 'code',
'redirect_uri' => 'https://my.domain.com/login.php',
'scope' => 'https://graph.microsoft.com/User.Read offline_access',
'state' => bin2hex(random_bytes(16)),
]);

必须接收并处理退货的是

login.php
$_GET['code']

© www.soinside.com 2019 - 2024. All rights reserved.