SSO между приложениями SPA, использующими Azure AD и MSAL

Сервер IP

Вы можете получить IP-адрес сервера с $_SERVER['SERVER_ADDR'].

MAC-адрес сервера

Для MAC-адреса вы можете анализировать вывод netstat -ie в Linux или ipconfig /all в Windows.

Клиентский IP-адрес адрес

Вы можете получить IP-адрес клиента с $_SERVER['REMOTE_ADDR']

MAC-адрес клиента

MAC-адрес клиента не будет доступен вам, за исключением одного особого обстоятельства : , если клиент находится в том же сегменте Ethernet, что и сервер.

Итак, если вы создаете какую-либо систему на базе локальной сети и ваши клиенты , это в том же сегменте Ethernet, тогда вы можете получить MAC-адрес, проанализировав вывод arp -n (linux) или arp -a (окна).

Редактирование: вы спрашиваете в комментариях, как получить вывод внешней команды - одним из способов является использование обратных ссылок, например

$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;

#run the external command, break output into lines
$arp=`arp -a $ipAddress`;
$lines=explode("\n", $arp);

#look for the output line describing our IP address
foreach($lines as $line)
{
   $cols=preg_split('/\s+/', trim($line));
   if ($cols[0]==$ipAddress)
   {
       $macAddr=$cols[1];
   }
}

Но что, если клиент не включен LAN?

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

0
задан Paul 27 February 2019 в 15:42
поделиться

1 ответ

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

 // Store the username after login
 document.cookie = "msal_username=Paul@xyz-corp.com;domain=.xyz-corp.com;path=/"

 // use the username
 var username = getCookieByName("msal_username"); // find some code to do that
 userAgentApplication.loginRedirect(scopes, "&login_hint=" + username);

Недостатком этого является то, что вам необходимо реализовать это в во всех ваших приложениях.

Приложения в другом домене

Когда приложения размещены в разных доменах, MSAL.js не может получить доступ к токенам, кэшированным в домене A, в домене B.

Автоматически выбирать учетную запись в Azure AD

...

Использование подсказки для входа в систему

Если у вас нет настроенного утверждения SID или вам необходимо пропустить запрос на выбор учетной записи при интерактивных вызовах аутентификации, вы можете сделать это, указав login_hint и, при необходимости, domain_hint как extraQueryParameters в интерактивных методах MSAL.js (loginPopup, loginRedirect, acquTokenPopup и acquTokenRedirect). Например:

userAgentApplication.loginRedirect(scopes, "&login_hint=<preferred_username>&domain_hint=organizations");

Вы можете получить значения для login_hint и domain_hint, прочитав утверждения, возвращенные в токене ID для пользователя.

Для логина логина должно быть указано утверждение предпочитаемого имени пользователя в маркере идентификатора.

0
ответ дан Alex AIT 27 February 2019 в 15:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: