Я обновляю сайт Laravel 5.4, который скоро должен быть запущен в производство. На сайте используется аутентификация Azure AD для настраиваемого письменного механизма единого входа. Это прекрасно работает в среде разработки, в которой есть большой интерес к Интернету без каких-либо прокси. К сожалению, UAT и производственные серверы находятся за прокси, что вызывает проблемы. Код, на котором основана эта аутентификация, основан на примерах php для Microsoft Graph API REST.
В первом разделе извлекается токен от Microsoft с помощью клиента «phpleague» OAuth2 следующим образом
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => config('app.client_id'),
'clientSecret' => config('app.client_secret'),
'redirectUri' => 'https://egmbank.local/oauth',
'urlAuthorize' => 'https://login.microsoftonline.com/'.config('app.tenant_id').'/oauth2/v2.0/authorize',
'urlAccessToken' => 'https://login.microsoftonline.com/'.config('app.tenant_id').'/oauth2/v2.0/token',
'urlResourceOwnerDetails' => '',
'scopes' => 'openid mail.send'
]);
if (!$request->has('code')) {
return redirect($provider->getAuthorizationUrl());
} else {
try {
$accessToken = $provider->getAccessToken('authorization_code', [
'code' => $request->input('code')
]);
} catch (\League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {
// Failed to get the access token
exit($e->getMessage());
}
}
// The "me" endpoint should return the information about the signed in user
$client = new Client();
$response = $client->request('GET', 'https://graph.microsoft.com/v1.0/me', [
'headers' => [
'Authorization' => 'Bearer ' . $accessToken->getToken(),
'Content-Type' => 'application/json;odata.metadata=minimal;odata.streaming=true'
]
]);
$me = json_decode($response->getBody()->getContents());
// This is the name to display in the header of each page
$displayName = $me->displayName;
Как упомянуто выше, это прекрасно работает, когда не за прокси-сервером, и я возвращаю токен, а затем могу сделать дополнительные вызовы, чтобы получить сведения о пользователе и группе из AD.
Я посмотрел документацию OAuth2 лиги, такую, как она, а также код, и он предлагает использовать прокси, просто добавив
'proxy' => 'proxy_name',
'verify' => false
к списку параметров для построения провайдера. Я связал это, и запрос все еще блокируется. В документации сказано, что я должен «Убедитесь, что вы включили SSL-прокси в своем прокси». Я проверил с ребятами из сети, и они думают: «Мы обходим SSL-шифрование для этих сайтов Microsoft», и с этим ничего не поделаешь.
Я посмотрел на пакет fideloper / TrustedProxies, и мне трудно найти документацию, особенно для сайта Laravel 5.4.
У меня есть SSH на сервере UAT и я установил http_proxy из командной строки, и у меня нет проблем с запуском следующего
curl -v https://login.microsoftonline.com:443
curl -v microsoft.com
так что кажется, что я могу пройти через прокси, когда я говорю серверу UAT использовать прокси. Я бы подумал, что будет способ легко заставить проект Laravel использовать прокси для всего сетевого трафика.
Я нахожусь в тупике на этом этапе и был бы признателен, если бы этот проект использовал прокси
Задача ещё не решена.
Других решений пока нет …