Статьи

Создание кнопки входа Microsoft с использованием PHP

В этом уроке я покажу вам, как создать кнопку входа Microsoft для вашего сайта с использованием PHP. Для начала давайте ответим на вопрос: что такое OAuth? OAuth — это протокол, используемый для безопасной авторизации веб-сайтов и приложений для доступа к пользовательской информации на других веб-сайтах. Есть две версии OAuth, 1.0 и 2.0. В этом посте мы будем использовать OAuth 2.0 для создания системы входа Microsoft.

Что такое Microsoft Log-In?

Вход в систему Microsoft означает запрос пользователя на предоставление доступа к его / ее действующей информации Microsoft, такой как идентификатор электронной почты, имя пользователя и т. Д. После того, как ваш веб-сайт получил доступ и получил всю эту информацию о пользователе, он может разрешить пользователям доступ к защищенным страницам вашего сайта. Веб-сайт.

Настройка каталога и файлов

Прежде чем начать, вам нужно создать файл PHP с именем redirect.php. Разместите этот файл в любом месте вашего веб-пространства.

Создание приложения Microsoft

Если ваш веб-сайт разрешает вход в систему с использованием Microsoft, то он считается приложением Microsoft. Итак, у вас есть готовый веб-сайт, и теперь пришло время зарегистрировать его в качестве приложения Microsoft. Выполните следующие шаги, чтобы создать приложение Microsoft:

  1. Посетите страницу приложений Microsoft .
  2. Теперь создайте приложение Microsoft
  3. Выберите Параметры API и для переадресации URL-адреса передайте URL-адрес, указывающий на файл redirect.php.
  4. Вы можете найти идентификатор клиента и секрет клиента в настройках приложения.

Создание входа с помощью кнопки Microsoft

Когда пользователь нажимает кнопку «Вход», вам нужно запустить этот код, чтобы перенаправить пользователя на веб-сайт Microsoft Live, чтобы пользователь мог разрешить вашему приложению доступ к его информации.

$client_id = "";
2	$redirect_uri = "";
3	$scopes = "wl.basic,wl.offline_access,wl.signin,wl.emails";
4	 
5	header("Location: " . "https://login.live.com/oauth20_authorize.srf?client_id=" . $client_id . "&scope=" . $scopes . "&response_type=token&redirect_uri=" . $redirect_uri);

Области представляют список разрешений для приложения. Вам нужно передать список разрешений через запятую. Список всех областей применения .

Заполните $client_idи $redirect_uriпеременные.

Перенаправление обратно в приложение

Как только пользователь предоставит доступ к приложению, Microsoft перенаправит пользователя обратно на URI перенаправления. Теперь вам нужно получить токен доступа, который действует как разрешение на получение информации о пользователе.

В файле redirect.php вы можете получить токен доступа, запустив этот код

<?php

  $client_id = "";
  $client_secret = "";
  $redirect_uri = "";

  //$_GET["code"] is the authorization code
  if(isset($_GET["code"]))
  {
    //user granted permission

    //get access token using the authorization code

    $url = "https://login.live.com/oauth20_token.srf";
        $fields = array("client_id" => $client_id, "redirect_uri" => $redirect_uri, "client_secret" => $client_secret, "code" => $_GET["code"], "grant_type" => "authorization_code");

        foreach($fields as $key=>$value) { $fields_string .= $key."=".$value."&"; }
        rtrim($fields_string, "&");

        $ch = curl_init();

        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded"));
        curl_setopt($ch,CURLOPT_POST, count($fields));
        curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

        $result = curl_exec($ch);
        $result = json_decode($result);

        curl_close($ch);

    //this is the refresh token used to access Microsoft Live REST APIs
        $access_token = $result->access_token;
        $refresh_token = $result->refresh_token;
  }
  else
  {
    echo "An error occured";
  }

?>

Заполняем переменную $client_id, $client_secretи $redirect_uri.

Наконец мы получили $access_tokenи $refresh_token. $access_tokenобычно истекает через 1 час, поэтому $refresh_tokenиспользуется для получения нового токена доступа через каждые 1 час.

Если срок действия маркера доступа истек, вы, скорее всего, получите ошибку в содержимом HTTP-ответа при выполнении запросов к API REST.

С помощью этой функции вы можете получить новый токен доступа

function new_access_token($refresh_token)
{
    $url = "https://login.live.com/oauth20_token.srf";
    $fields = array("client_id" => $client_id, "redirect_uri" => $redirect_uri, "client_secret" => $client_secret, "grant_type" => "refresh_token", "refresh_token" => $refresh_token);

    foreach($fields as $key=>$value) { $fields_string .= $key."=".$value."&"; }
    rtrim($fields_string, "&");

    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded"));
    curl_setopt($ch,CURLOPT_POST, count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

    $result = curl_exec($ch);
    $result = json_decode($result);

    curl_close($ch);

    $access_token = $result->access_token;

    return $access_token;
}

Звонки в REST API

Вы можете найти список всех API REST в справочнике по Microsoft REST API . Все запросы к этим API должны быть выполнены с использованием токена доступа.

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

1 echofile_get_contents("https://apis.live.net/v5.0/me?access_token=". $access_token);

Интеграция Microsoft Login в WordPress

WordPress сделан на PHP, поэтому весь код будет одинаковым для авторизации пользователя и получения информации профиля. Для создания URL перенаправления в WordPress используйте WordPress AJAX API .

Последние мысли

Если вы хотите больше, чем просто Войти, увеличьте разрешения в списке разрешений и сохраните токен доступа и обновите токен в базе данных для дальнейшего использования. Убедитесь, что вы обновили токен доступа после его обновления. Не делитесь секретом клиента ни с кем.