Microsoft Outlook - добавить пользовательский параметр авторизации-запроса - PullRequest
1 голос
/ 25 мая 2019

Я использую Microsoft Outlook rest php api для авторизации учетной записи и получения пользовательского события. Я хочу добавить пользовательские параметры в URL перенаправления. Я не нашел способа добавить пользовательские параметры в URL перенаправления.

Я использую этот outlook / rest / php api - вот URL:

https://docs.microsoft.com/en-us/outlook/rest/php-tutorial#implementing-oauth2

Вот мой контроллер AuthController.php.

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class AuthController extends Controller
{
  public function signin()
  {
    if (session_status() == PHP_SESSION_NONE) {
      session_start();
    }

    // Initialize the OAuth client
    $oauthClient = new \League\OAuth2\Client\Provider\GenericProvider([
      'clientId'                => env('OAUTH_APP_ID'),
      'clientSecret'            => env('OAUTH_APP_PASSWORD'),
      'redirectUri'             => env('OAUTH_REDIRECT_URI'),
      'urlAuthorize'            => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'),
      'urlAccessToken'          => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'),
      'urlResourceOwnerDetails' => '',
      'scopes'                  => env('OAUTH_SCOPES')
    ]);

    // Output the authorization endpoint
    echo 'Auth URL: '.$oauthClient->getAuthorizationUrl();
    exit();
  }


public function gettoken()
{
  if (session_status() == PHP_SESSION_NONE) {
    session_start();
  }

  // Authorization code should be in the "code" query param
  if (isset($_GET['code'])) {
    // Check that state matches
    if (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth_state'])) {
      exit('State provided in redirect does not match expected value.');
    }

    // Clear saved state
    unset($_SESSION['oauth_state']);

    // Initialize the OAuth client
    $oauthClient = new \League\OAuth2\Client\Provider\GenericProvider([
      'clientId'                => env('OAUTH_APP_ID'),
      'clientSecret'            => env('OAUTH_APP_PASSWORD'),
      'redirectUri'             => env('OAUTH_REDIRECT_URI'),
      'urlAuthorize'            => env('OAUTH_AUTHORITY').env('OAUTH_AUTHORIZE_ENDPOINT'),
      'urlAccessToken'          => env('OAUTH_AUTHORITY').env('OAUTH_TOKEN_ENDPOINT'),
      'urlResourceOwnerDetails' => '',
      'scopes'                  => env('OAUTH_SCOPES')
    ]);

    try {
      // Make the token request
      $accessToken = $oauthClient->getAccessToken('authorization_code', [
        'code' => $_GET['code']
      ]);

      // Save the access token and refresh tokens in session
      // This is for demo purposes only. A better method would
      // be to store the refresh token in a secured database
      $tokenCache = new \App\TokenStore\TokenCache;
      $tokenCache->storeTokens($accessToken->getToken(), $accessToken->getRefreshToken(),
        $accessToken->getExpires());

      // Redirect back to mail page
      return redirect()->route('mail');
    }
    catch (League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {
      exit('ERROR getting tokens: '.$e->getMessage());
    }
    exit();
  }
  elseif (isset($_GET['error'])) {
    exit('ERROR: '.$_GET['error'].' - '.$_GET['error_description']);
  }
}
}

Вот подробности файла .env

OAUTH_APP_ID=YOUR_APP_ID_HERE
OAUTH_APP_PASSWORD=YOUR_APP_PASSWORD_HERE
OAUTH_REDIRECT_URI=http://localhost:8000/authorize
OAUTH_SCOPES='openid profile offline_access User.Read Mail.Read'
OAUTH_AUTHORITY=https://login.microsoftonline.com/common
OAUTH_AUTHORIZE_ENDPOINT=/oauth2/v2.0/authorize
OAUTH_TOKEN_ENDPOINT=/oauth2/v2.0/token


Пожалуйста, дайте мне несколько советов, как добавить пользовательский параметр.

Мне нужно добавить пользовательский параметр с user_id.

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Я полагаю, что авторы Azure рекомендуют использовать параметр state, который предназначен для того, что вы хотите. От https://docs.microsoft.com/azure/active-directory/develop/v2-oauth2-auth-code-flow:

state Значение, включенное в запрос, которое также будет возвращено в ответе токена. Это может быть строка любого контента, который вы пожелаете. Случайно генерируемое уникальное значение обычно используется для предотвращения атак подделки межсайтовых запросов. Это значение также может кодировать информацию о состоянии пользователя в приложении до того, как запрос аутентификации произошел, например, страницу или представление, на котором они были.

1 голос
/ 26 мая 2019

При аутентификации вы не можете, Microsoft сравнивает URL перенаправления с тем, который зарегистрирован в приложении Microsoft, если они отличаются, запрос отклоняется.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...