Создание пользователя Azure AD по арендатору и идентификатору приложения

Как я могу создать пользователя с помощью секретов клиента в Azure AD с помощью PHP?

Мне нужен токен доступа в приведенном ниже коде, чтобы создать пользователя. Чтобы получить этот токен, мне нужно сначала войти в систему. Как я могу создать пользователя автоматически без входа в систему.

curl_setopt_array($curl, array(
          CURLOPT_URL => 'https://graph.microsoft.com/v1.0/users',
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => '',
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 0,
          CURLOPT_FOLLOWLOCATION => true,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => 'POST',
          CURLOPT_POSTFIELDS =>'{
                  "accountEnabled": true,
                  "displayName": "Adele Vance",                  
                  "userPrincipalName": "[email protected]",
                  "passwordProfile" : {
                    "forceChangePasswordNextSignIn": true,
                    "password": "xWwvJ]6NMw+bWH-d"
          }
        }',
          CURLOPT_HTTPHEADER => array(
            "Authorization: Bearer $accessToken",
            "Content-Type: application/json"
          ),
        ));

Привет, если мой ответ полезен для вас, вы можете принять его как ответ (нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный). Вы также можете принять свой собственный ответ :).

Carl Zhao 14.12.2020 02:42

Привет @Карл. Я использовал ваш и проголосовал за него как за полезный ответ. Но правильный ответ мой с помощью предоставленной вами ссылки. Чтобы принять мой ответ, должно пройти два дня после вопроса.

Majid Hajibaba 14.12.2020 08:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
284
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете обратиться к этому образцу , в котором используется демон, не требующий входа пользователя в систему, и используется поток учетных данных клиента для получения токена доступа для вызова MS graph api для создания пользователя. Вам необходимо предоставить User.ReadWrite.All application permissions для приложения.

Ответ принят как подходящий

С особой благодарностью Карлу, который предоставляет полезные ссылки, я сделал это, используя две следующие функции:

Я получаю токен, вызывая функцию getToken, и использую его в getToken для создания пользователя без предварительного входа в систему.


function getToken() {
       
    $curl = curl_init();
    
    $dir = env('OAUTH_DIR_ID');
    $clientId = env('OAUTH_APP_ID');
    $secretKey = env('OAUTH_APP_PASSWORD');
    
    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://login.microsoftonline.com/$dir/oauth2/v2.0/token",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => "client_id=$clientId&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=$secretKey&grant_type=client_credentials",
        CURLOPT_HTTPHEADER => array(
            'Content-Type: application/x-www-form-urlencoded',
            'x-ms-gateway-slice=estsfd; stsservicecookie=estsfd'
        ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    
}

function addUser($accessToken)
{
    try {

        $curl = curl_init();
        
        curl_setopt_array($curl, array(
          CURLOPT_URL => 'https://graph.microsoft.com/v1.0/users',
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => '',
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 0,
          CURLOPT_FOLLOWLOCATION => true,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => 'POST',
          CURLOPT_POSTFIELDS =>'{
                  "accountEnabled": true,
                  "displayName": "Adele Vance",                  
                  "userPrincipalName": "[email protected]",
                  "passwordProfile" : {
                    "forceChangePasswordNextSignIn": true,
                    "password": "xWwvJ]6NMw+bWH-d"
          }
        }',
          CURLOPT_HTTPHEADER => array(
            "Authorization: Bearer $accessToken",
            "Content-Type: application/json"
          ),
        ));
        
        $response = curl_exec($curl);
        
        curl_close($curl);
        
        var_dump($response); // Debug print
        exit();
        
        
    } catch (Error $ex) {
        $home = env('APP_URL');
        header("Location: $home/signin.php?err = " . $ex->getMessage());
        die();
    }
}

Другие вопросы по теме