Предоставление / настройка веб-маршрута SimpleSaml php на laravel 6.12 - PullRequest
0 голосов
/ 10 февраля 2020

Я столкнулся с проблемой. Я обновляю сайт laravel с 4.2 до 6.12, который в основном является ручным проектом, и я наткнулся на проблему с laravel, AWS и SimpleSaml php. Если балансировщик нагрузки подключен до AWS, это делает довольно трудным иметь два веб-сайта на одном сервере в AWS.

В SimpleSaml php вам нужно, чтобы часть пакета была открыта для inte rnet. Однако в Laravel довольно сложно запускать нативные PHP файлы / скрипты без их фильтрации через среду. Поскольку я установил SimpleSaml php, используя composer, все размещено в каталоге Vender. Существует очень мало документации, поддерживающей установку composer, и я не уверен, как выставить simplesamlphp/simplesamlphp/www/* для inte rnet. Кстати, я пытаюсь быть поставщиком услуг.

Я не могу настроить AWS для поддержки второй веб-страницы, Laravel фильтрует мои маршруты, и SimpleSaml php имеет очень мало документации о стандартах PSR и о том, как она должна быть настроена.

Мне не удалось попасть на страницу приветствия simplesaml php. Возможно, мне не хватает сценария publi sh?

Я попытался поместить simplesamlphp/www/* в каталог public/ и использовать следующее, обнаруженное в сообщении о переполнении стека 2013 года. ,

Route::get("/", function() {
    ob_start();
    require("www/module.php");
    return ob_get_clean();
});
Route::get("/", function() {
    ob_start();
    require("www/index.php");
    return ob_get_clean();
});

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

Это мои метаданные, я не исключаю, что я ошибся. saml20-idp-remote. php

<?php
$metadata['CLIENTCONFIG'] = array (
    'metadata-set' => 'saml20-idp-remote',
    'entityid' => 'CLIENTCONFIG',
    'AssertionConsumerService' => 'http://myServer.com/acs_response',
    'SingleSignOnService' => 
    array (
        0 => 
            array (
                'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
                'Location' => 'https://www.destination.com/',
            ),
            'SingleLogoutService' => '',
            'certificate' => 'x509.crt', 
            'certFingerprint'=>'OP:K7:91:89:9G:AB:0Y:JF:2V:F9:90:2V:6O:5C:41:9D:PL:FG:45:34',
            'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',
    )
);
?>

authsources. php:

<?php
$config = [
    /* This is the name of this authentication source, and will be used to access it later. */
    'admin' => array(
        // The default is to use core:AdminPassword, but it can be replaced with
        // any authentication source.
        'core:AdminPassword',
    ),
    'CLIENTCONFIG' => array(
        'saml:SP',
        'idp'=>'CLIENTCONFIG',
        'acs.Bindings' => array(
            'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
            'urn:oasis:names:tc:SAML:1.0:profiles:browser-post',
        ),
        'ForceAuthn' => TRUE,
        'entityID' => 'CLIENTCONFIG',
        'saml:idp' => 'CLIENTCONFIG',
        'discoURL' => null,
        'privatekey' => 'saml.pem',
        'certificate' => 'saml.crt',
        'redirect.sign' => TRUE,
        'redirect.validate' => TRUE,
        'OrganizationName' => array(
            'en' => 'TheCompanyIWorkFor',
        ), 
        'OrganizationURL'=>'www.TheCompanyIWorkFor.com', 
        'sign.authnrequest'=> TRUE,
    ),

];

Прямо сейчас, когда я попробуйте вот что говорит мой SAML инспектор : Если вы заметили, что мой ACS не соответствует AS C, который я ввел. Я думаю, что это настройка по умолчанию.

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
                    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
                    ID="_1234567890987654321234567890QWERTYUIOPASDFGHJKL"
                    Version="2.0"
                    IssueInstant="2020-02-10T14:36:01Z"
                    Destination=""
                    AssertionConsumerServiceURL="http://mywebsite.com/module.php/saml/sp/saml2-acs.php/CLIENTCONFIG"
                    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                    >
    <saml:Issuer>CLIENTCONFIG</saml:Issuer>
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
                        AllowCreate="true"
                        />
</samlp:AuthnRequest>

Это мой метод UserController, который выбирает маршрут входа в систему:

use SimpleSAML\Auth\Simple;

public function getLogin(){
        if(!\Auth::check()) {
            $auth = New Simple('CLIENTCONFIG');
            dump('getLogin method');
            $auth->requireAuth([
                'ReturnTo' => 'http://myWebsite/dashboard',
                'KeepPost' => FALSE,
            ]);
            \SimpleSAML\Session::getSessionFromRequest()->cleanup();
        }
        $data=Array();
        // I get throw into an infinite loop of request generation. 
        return view('user.login', $data);
    }

Я не очень много знаю о SSO, и я слишком долго занимался этим вопросом! Поэтому, если кто-то может помочь настроить его как пакет composer, я был бы признателен. Цель состоит в том, чтобы попасть по URL-адресу единого входа и быть перенаправленным в IDP для входа в систему, а затем быть отправленным обратно. Это, вероятно, слишком много информации, и она была взломана, но мне нечего терять на этом этапе.

И нет, это не одно и то же: Единая регистрация при использовании оболочки SimpleSaml Php на Laravel этот вопрос фактически относится к другому пакету.

Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2020

Здесь была пара проблем. Главное, что я не смог добраться до встроенной веб-страницы simplesaml php.

В моем локальном окружении laravel просто не выпустит меня из рамок. Но я обнаружил, что могу использовать www / на своем AWS dev сервере, чтобы туда попасть.

Поскольку это было установлено с использованием composer, мне пришлось использовать эту ссылку и настроить свой baseurlpath. http://example.com/www/module.php/core/frontpage_welcome.php Не могу не подчеркнуть, насколько важно попасть на веб-страницу бэкэнда simplesaml. Это дает вам все инструменты, необходимые для завершения проекта. Если вы не можете добраться до него, попробуйте добавить часть URL www перед module.php.

Также у меня возникла проблема с моими метаданными. Это:

<?php
$metadata['CLIENTCONFIG'] = array (
    'metadata-set' => 'saml20-idp-remote',
    'entityid' => 'CLIENTCONFIG',
    'AssertionConsumerService' => 'http://mysite/acs_response',
    'SingleSignOnService' => 
    array (
        0 => 
            array (
                'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
                'Location' => 'https://www.destination.com/',
            ),
            'SingleLogoutService' => '',
            'certificate' => 'x509.crt', 
            'certFingerprint'=>'OP:K7:91:89:9G:AB:0Y:JF:2V:F9:90:2V:6O:5C:41:9D:PL:FG:45:34',
            'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',
    )
);
?>

Должно было быть:

<?php
$metadata['CLIENTCONFIG'] = array (
    'metadata-set' => 'saml20-idp-remote',
    'entityid' => 'CLIENTCONFIG',
    'AssertionConsumerService' => 'http://mysite/acs_response',
    'SingleSignOnService' => 
    array (
        0 => 
            array (
                'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
                'Location' => 'https://www.destination.com/',
            ),
    ),
    'SingleLogoutService' => '',
    'certificate' => 'x509.crt', 
    'certFingerprint'=>'OP:K7:91:89:9G:AB:0Y:JF:2V:F9:90:2V:6O:5C:41:9D:PL:FG:45:34',
    'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',
);
?>

У меня был последний кусок внутри массива, и он должен НЕ были там. Снова попробуйте перейти на эту веб-страницу.

Также я должен был установить свой 'baseurlpath' => 'http://example.com/www' После того, как я это сделал, все сгенерированные пути включали www and Мне не нужно было вставлять их в мой URL, чтобы добраться до него.

Мораль истории, делайте все возможное, чтобы добраться до www/module.php/core/frontpage_welcome.php Оттуда откроется мир, включая инструменты для создания метаданных. (И example.com должен быть веб-сайтом, на котором вы работаете. Не федеративным сервером. Просто для пояснения.)

...