2016-02-15 4 views
0

Я использую SimpleSAMLphp как IdP для кучи приложений у нас есть, главным образом Drupal сайт. Я использовал SQL как источник authsource на IdP и работает для аутентификации пользователей, ответ возвращается к Drupal и пользователи аутентифицированы. Все хорошо !SimpleSAMLphp генерировать утверждение

Однако нам также необходимо использовать социальный вход (логин с Twitter, Facebook и т. Д.). SimpleSAMLphp поддерживает OAuth, я поставил его и Войти работает на IdP с социальными счетами, SimpleSAML создает сеанс и печенье, но я не прошел проверку подлинности на сайте Drupal.

Что мне нужно сделать, это заполнить запрос, вернувшись на Drupal и аутентифицировать пользователя там, то есть выпустить подтверждение на Drupal на успех.

Как и в источнике SQL, я сопоставил атрибуты в каждом из исходных файлов (Twitter.php, Facebook.php и т. Д.), Однако, когда SQL auth возвращается к Drupal и создает сеанс, остальные просто отображают свои атрибуты в шаблоне.

Как я могу сгенерировать и отправить подтверждение для Drupal из этих социальных учетных записей, чтобы аутентифицировать моих пользователей?

saml10-sp-remote.php (IdP)

$metadata['https://durpal_url/simplesaml_drupal_sp/module.php/saml/sp/metadata.php/sp'] = array (
    'SingleLogoutService' => 
    array (
    0 => 
    array (
     'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 
     'Location' => 'https://durpal_url/simplesaml_drupal_sp/module.php/saml/sp/saml2-logout.php/sp', 
    ), 
    1 => 
    array (
     'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:SOAP', 
     'Location' => 'https://durpal_url/simplesaml_drupal_sp/module.php/saml/sp/saml2-logout.php/sp', 
    ), 
), 
    'AssertionConsumerService' => 
    array (
    0 => 
    array (
     'index' => 0, 
     'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', 
     'Location' => 'https://durpal_url/simplesaml_drupal_sp/module.php/saml/sp/saml2-acs.php/sp', 
    ), 
    1 => 
    array (
     'index' => 1, 
     'Binding' => 'urn:oasis:names:tc:SAML:1.0:profiles:browser-post', 
     'Location' => 'https://durpal_url/simplesaml_drupal_sp/module.php/saml/sp/saml1-acs.php/sp', 
    ), 
    2 => 
    array (
     'index' => 2, 
     'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact', 
     'Location' => 'https://durpal_url/simplesaml_drupal_sp/module.php/saml/sp/saml2-acs.php/sp', 
    ), 
    3 => 
    array (
     'index' => 3, 
     'Binding' => 'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01', 
     'Location' => 'https://durpal_url/simplesaml_drupal_sp/module.php/saml/sp/saml1-acs.php/sp/artifact', 
    ), 
), 
    'certData' => 'xxxx', 
); 

authsources.php (IdP)

'sql' => array(
     'sqlauth:SQL', 
     'dsn' => 'mysql:host=localhost;dbname=db', 
     'username' => 'user', 
     'password' => 'pass', 
     'query' => 'SELECT u.uid, u.name, u.mail, r.name AS role FROM users u JOIN users_roles ur on ur.uid = u.uid JOIN role r on r.rid = ur.rid where u.mail = :username AND pass = MD5(:password);', 
    ), 

'facebook' => array(
    'authfacebook:Facebook', 
    'api_key' => 'xxxx', 
    'secret' => 'xxxx', 
    'req_perms' => 'email', 
), 

'linkedin' => array(
    'authlinkedin:LinkedIn', 
    'key' => 'xxxx', 
    'secret' => 'xxxx', 
), 

'twitter' => array(
    'authtwitter:Twitter', 
    'key' => 'xxxx', 
    'secret' => 'xxxx', 
    'force_login' => true, 
), 

saml20-idp-remote.php (SP, Drupal)

$metadata['http://idp_url/simplesaml/saml2/idp/metadata.php'] = array (
    'metadata-set' => 'saml20-idp-remote', 
    'entityid' => 'http://idp_url/simplesaml/saml2/idp/metadata.php', 
    'SingleSignOnService' => 
    array (
    0 => 
    array (
     'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 
     'Location' => 'http://idp_url/simplesaml/saml2/idp/SSOService.php', 
    ), 
), 
    'SingleLogoutService' => 
    array (
    0 => 
    array (
     'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 
     'Location' => 'http://idp_url/simplesaml/saml2/idp/SingleLogoutService.php', 
    ), 
), 
    'certData' => 'xxx', 
    'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient', 
); 

saml20-idp-hosted.php (IdP)

$metadata['__DYNAMIC:1__'] = array(
    'host' => '__DEFAULT__', 
    'privatekey' => 'mysite.com.key', 
    'certificate' => 'mysite.com.crt', 
    'auth' => 'sql', 
); 
+0

Опубликовать некоторые из них. Является ли IDP настроенным на использование социальных поставщиков в качестве источника аутсорсинга? Похоже, вы просто настроили дополнительные источники authsources и не настроили IDP для их использования. – Patrick

+0

@Patrick обновлен! IdP настроен на использование социального как authsource, IdP указывает на SP и SP на IdP. С этой конфигурацией, только с использованием SQL authsource на самом деле создает сеанс на Drupal – blackbird

+0

, вы можете также включить 'saml20-idp-hosting.php' из вашего idp? – Patrick

ответ

1

фона

Вашего вопроса в том, что ваш идентификатор поставщик настроен на использование SQL авторизации и не щебетать, LinkedIn и т.д. друпал сайт будет посылать вам МВУ и МВА только знающая SQL. Хотя у вас есть собственные источники, настроенные для социальных сетей, SSP позволяет тестировать и проверять их независимо от конфигурации IDP. Вот почему SSP просто отображает социальные атрибуты в шаблоне и не позволяет вам входить в drupal с ними.

Вариант А

multiauth позволит вам определить authsource, который включает в свой социальный и SQL. Затем настроить IDP, чтобы использовать новый multiauth авторизация источником

Вариант B

ВПЛ в социальной поставщика. Мы управляем IDP на одного социального провайдера. У нас несколько IDP (с уникальными идентификаторами сущностей) определяют в saml20-idp-hosted.php - по одному для каждой социальной учетной записи. Мы делаем это так, потому что каждый из наших SP только хочет доверять подмножество всех настроенных социальных ВПЛ.

Каждый SP в этой опции будет включать в себя дополнительные данные IDP в saml20-idp-remote.php

Вариант C

Outsource. Мы запускаем этот социальный шлюз saml как SaaS product. Это имеет смысл, если вам не нравится запускать что-либо самостоятельно, или если у вас есть несколько SP, которые хотят разных социальных провайдеров или использовать разные социальные ключи/секреты api для SP.