Как проверить код SMS, отправленный AZURE MFA, и разрешить доступ к моему заявлению - PullRequest
0 голосов
/ 21 февраля 2019

Сначала извините за мой плохой английский

Это проблема, с которой я должен аутентифицировать группу пользователей с помощью службы многофакторной аутентификации AZURE, мое приложение находится в моем домене, а не в лазурном экземпляре.приложение, разработанное в laravel, это приложение связывается с curl с API, расположенным на том же сервере, при этом выполняется весь поток для аутентификации пользователя, если у пользователя многофакторная аутентификация регистрации, тогда у меня открылось новое окно с JavaScript, в этом окне отображается https://login.microsoft.com пользователь должен авторизоваться на этом портале, а затем Microsoft отправить мне SMS или позвонить с кодом, я должен поместить этот код в новом окне и подтвердить ответ от Microsoft, если код действителен, я разрешаюдоступ пользователя к моему приложению на моем сервере, если не отказано в коде, и пользователь должен повторить попытку аутентификации.

В этой строке => elseif (strpos ($ resultado, 'AADSTS70076')! == false) iпоймать, если у пользователя есть регистрация Многофакторная аутентификация

Это код API portion:

$app->post('/valid_login', function() use ($app){


//Validaciónes de Azure

try {                        
    $token = $app->azure->getAccessToken('password', [
            'username' => $data['usuario'],
            'password' => $data['cadena']
    ]);
    try {
            $me = $app->azure->get("me", $token);
            if ($me['accountEnabled'] == 1) {
                    $result['status'] = 1;
                    $result['mensaje'] = 'Acceso Valido';
                    $result['displayName'] = $me['displayName'];
                    $result['givenName'] = $me['givenName'];
                    $result['city'] = $me['city'];
                    $result['companyName'] = $me['companyName'];
                    $result['employeeId'] = $me['employeeId'];
            } else {
                    $result['status'] = 2;
                    $result['mensaje'] = '<center>Acceso Deshabilitado</center>';
            }
            echo json_encode_utf8($result);
    } catch (Exception $e) {
            $result['status'] = 0;
            $result['mensaje'] = '<center>Error al obtener el Perfil</center>';
            $result['error'] = $e;
            echo json_encode_utf8($result);
    }
} catch (\League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {
        $resultado = $e->getTrace()['0']['args']['1']['error_description'];
        $result['mensaje'] = $e->getMessage();
        if (strpos($resultado,'AADSTS65001') !== false) {
                $result['mensaje'] = 'Usuario Pendiente por Autorizar';
                $result['error'] = '<center>Usuario Pendiente por Autorizar</center>';
        } elseif (strpos($resultado, 'AADSTS50034') !== false) {
                $result['mensaje'] = 'El Usuario no Existe';
                $result['error'] = '<center>El Usuario no Existe</center>';
        } elseif (strpos($resultado, 'AADSTS70002') !== false) {
                $result['mensaje'] = 'Usuario o Password Incorrecto';
                $result['error'] = '<center>Usuario o Password Incorrecto</center>';
        } elseif(strpos($resultado, 'AADSTS70076') !== false){
                $result['link'] = "https://login.microsoft.com";
                $result['status'] = 4;
                echo json_encode_utf8($result);
                exit;
            }
        } else {
                $result['mensaje'] = 'Error de acceso con Azure('.$resultado.')';
                $result['error'] = '<center>Error de acceso con Azure</center>'
                . '('. $resultado.')';
        }
        $result['status'] = 0;
        $result['errorfull'] = $e->getTrace()['0']['args']['1']['error_description'];
        echo json_encode_utf8($result);
}   

});

...