simpleSAML php и Azure дает мне «AADSTS50011: URL-адрес ответа, указанный в запросе, не соответствует URL-адресам ответа, настроенным для приложения» - PullRequest
1 голос
/ 11 марта 2020

Я новичок в Azure SSO, поэтому я мог пропустить некоторые очевидные вещи здесь - пожалуйста, имейте это в виду; -)

Мне нужно интегрировать мое приложение в Azure Active Directory. Для этого в нашей организации нет особой помощи, поэтому я оставляю себя в поиске проблемы здесь: - / Моя точная проблема заключается в том, что при входе в систему я получаю эту ошибку от Azure:

AADSTS50011: The reply URL specified in the request does not match the 
reply URLs configured for the application: 'https://192.168.0.1/secure/'.

Я, конечно, искал, как решить это сам, но я не нашел ничего, что могло бы приблизить меня.

У меня есть эта настройка:

  • IIS
  • PHP
  • simpleSAML php
  • Azure AD

У меня нет ни настройки, ни доступа к части Azure, так как Это настроено нашими ИТ-специалистами, но они настроили это:

Basic SAML Configuration

Identifier (Entity ID)                      : https://192.168.0.1/secure/
Reply URL (Assertion Consumer Service URL)  : https://192.168.0.1/secure/
Sign on URL                                 : Optional
Relay State                                 : Optional
Logout URL                                  : Optional

Я получил файл федерации XML из Azure и преобразовал / заполнил его в файл simpleSAML php \ metadata \ saml20-idp-remote. php

Я установил \ config \ authsources. php файл:

'entityID'                   => "https://192.168.0.1/secure/",
'idp'                        => "https://sts.windows.net/06dg12k9-1wl2-4mue-79gh-40ff1a8dnd4a/",
'NameIDFormat'               => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
'simplesaml.nameidattribute' => 'eduPersonTargetedID',

Все настроено с учетом этого руководства, https://www.lewisroberts.com/2015/09/05/single-sign-on-to-azure-ad-using-simplesamlphp/

Когда я запускаю https://192.168.0.1/simpleSAMLphp/www/ и go до Аутентификация и Проверка настроенных источников аутентификации , и я тестирую с default-sp , затем я получаю экран входа Azure. Если я просматриваю URL-адрес для этого, он выглядит следующим образом:

https://login.microsoftonline.com/0ad94219-6af5-474e-99d0-60f9188f3fce/saml2
    ?SAMLRequest=f[CUT]2Fy%2Fi%2Bjc%3D
    &RelayState=https%3A%2F%2F192.168.0.1%2FsimpleSAMLphp%2Fwww%2Fmodule.php%2Fcore%2Fauthenticate.php%3Fas%3Ddefault-sp

Я предполагаю, что RelayState - это то, откуда поступает запрос на моем сервере. Я попытался настроить идентификатор организации и URL ответа в Azure на https://192.168.0.1/simpleSAMLphp/www/module.php/core/authenticate.php?as=default-sp, но с тем же результатом.

Итак, я предоставил все, что знаю, но я совершенно не знаю, как решить эту проблему? Нужно ли настраивать URL ответа в simpleSAML php, чтобы он передавался в качестве параметра URL?

Любая помощь будет принята с благодарностью.


### ОБНОВЛЕНИЕ 1 - еще одна проблема ###

После пересмотра файла журнала из simpleSAML php затем он показал, что было отправлено на Azure:

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_25e3fb2" Version="2.0"  Destination="https://login.microsoftonline.com/088f3fce/saml2" AssertionConsumerServiceURL="https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/saml2-acs.php/default-sp" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST">
<saml:Issuer>https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/metadata.php/default-sp</saml:Issuer>
<samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" AllowCreate="true"/>
</samlp:AuthnRequest>

Затем я взял оттуда AssertionConsumerServiceURL и использовал его как URL ответа в Azure. Также я взял Идентификатор сущности со страницы SimpleSAML php Федерация и теперь демонстрационная страница simpleSAML php работает : -)

Так что мой Azure Настройка теперь выглядит следующим образом:

Basi c Конфигурация SAML

Identifier (Entity ID)                      : https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/metadata.php/default-sp
Reply URL (Assertion Consumer Service URL)  : https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/saml2-acs.php/default-sp
Sign on URL                                 : Optional
Relay State                                 : Optional
Logout URL                                  : Optional

(обратите внимание на разницу в URL)

Однако, к сожалению, у меня все еще есть проблемы. Когда в моей области видимости есть файл PHP с таким содержанием:

<code><?PHP
require_once ("../../simpleSAMLphp/lib/_autoload.php");
$as = new SimpleSAML_Auth_Simple('default-sp');
$as->requireAuth();

$attributes = $as->getAttributes();

echo '<pre>';
print_r($attributes);
echo '
'; // Получить URL для выхода из системы $ url = $ as-> getLogoutURL (); echo ' Logout '; ?>

Затем все заканчивается бесконечным l oop перенаправлением между моим сервером и Azure !? Просмотр журнала не дает мне никакого понимания. Кажется, что я получаю данные от Azure и что я аутентифицируюсь, поскольку вижу атрибуты пользователя в журнале отладки, но ... если я аутентифицирован, то почему я перенаправлен обратно на Azure!?


### ОБНОВЛЕНИЕ 2 - решение ###

Еще через несколько часов поиска в лог-файле simpleSAML php и очистки ПРЕДУПРЕЖДЕНИЙ (они на самом деле важно) потом я обнаружил, что мое бесконечное перенаправление было вызвано несоответствием между сеансами PHP и сеансами simpleSAML php.

Мое решение состояло в том, чтобы выровнять два и иметь одинаковые настройки во всех местах , Обязательно проверьте настройки сеанса php.ini и настройки сеанса \config\config.php и сделайте их идентичными.

Также я обнаружил, что исходный код PHP, который я использовал, предназначен для более старой версии simpleSAML php хотя я не думаю, что это была проблема.

Вместо этого старого метода: $as = new SimpleSAML_Auth_Simple('default-sp');

Тогда это должен быть новый метод: $as = new \SimpleSAML\Auth\Simple('default-sp');

1 Ответ

0 голосов
/ 11 марта 2020

RelayState - это просто параметр, который возвращается к вашему SP как есть. Например, его можно использовать для хранения URL-адреса страницы, к которой пользователь пытался получить доступ перед аутентификацией.

Если вы используете SAML2, responseURL должен быть вашим AssertionConsumerService URL-адресом в ваших метаданных SP. Azure отправит туда SAML Response. Если этот URL отличается от https://192.168.0.1/secure/, вы получите эту ошибку. Даже пропущенный трейлинг / вызовет ошибку.

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