Как проверить код SMS, отправленный AZURE MFA, и разрешить доступ к моему заявлению
Сначала извините за мой плохой английский
Это проблема, которая необходима для аутентификации группы пользователей с помощью службы многофакторной аутентификации AZURE, мое приложение находится в моем домене, а не в Azure. Ну, у меня есть приложение, разработанное в laravel. Это приложение взаимодействует с curl с API, расположенным в тот же сервер, который выполняет весь поток для аутентификации пользователя, если у пользователя есть многофакторная аутентификация регистрации, тогда у меня открылось новое окно с JavaScript, в этом окне отображается https://login.microsoft.com/ пользователь должен авторизовать на этом портале. и затем Microsoft отправляет мне SMS или звонит с кодом, я должен поместить этот код в новом окне и подтвердить ответ от Microsoft, если код действителен, я разрешаю пользователю доступ к моему приложению на моем сервере, если не откажусь код и пользователь должны повторить попытку аутентификации.
В этой строке => elseif(strpos($resultado, 'AADSTS70076')!== false) я ловлю, если у пользователя есть многофакторная аутентификация регистрации
Это часть кода API:
$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);
}
});