SAML provider для VCloudDirector#

Инструкция по первичной настройке#

Регенерация сертификатов VCloudDirector#

1. На стороне VCD#

Срок действия сертификатов VDC видно в Administration ‣ Identity Providers ‣ SAML:

VCD: SAML Configuration

VCD: SAML Configuration#

Попытка cгенерировать новые самостоятельно (Edit ‣ Regenerate) успехом не увенчалась (ошибок нет, но после сохранения вижу старый серт). ТП выполнила перегенерацию самостоятельно и ответила:

Описанное вами поведение портала вызвано известным вендору багом. С помощью workaround срок действия сертификата был продлён.

По ссылке со скриншота выше (Metadata https://vcd.sbercloud.ru/cloud/org/SiteFactory/saml/metadata/alias/vcd) загружаем spring_saml_metadata.xml — из него возьмём новые сертификаты VCD для импорта в Keycloak.

2. Извлекаем сертификаты#

Нам требуются два сертификата: для подписи и для шифрования. Ниже пример файла spring_saml_metadata.xml, отметил, откуда копировать сертификаты.

<?xml version="1.0" encoding="UTF-8"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="vcloud" entityID="vcloud">
  <md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    
    <md:KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>
            --- тут сертификат подписи в формате PEM ---
          </ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>

    <md:KeyDescriptor use="encryption">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>
            --- тут сертификат шифрования в формате PEM ---
          </ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://vcd.sbercloud.ru/login/org/sitefactory/saml/SingleLogout/alias/vcd"/>
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://vcd.sbercloud.ru/login/org/sitefactory/saml/SingleLogout/alias/vcd"/>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
    <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName</md:NameIDFormat>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://vcd.sbercloud.ru/login/org/sitefactory/saml/SSO/alias/vcd" index="0" isDefault="true"/>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:profiles:holder-of-key:SSO:browser" Location="https://vcd.sbercloud.ru/login/org/sitefactory/saml/HoKSSO/alias/vcd" hoksso:ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" index="1" xmlns:hoksso="urn:oasis:names:tc:SAML:2.0:profiles:holder-of-key:SSO:browser"/>
  </md:SPSSODescriptor>
</md:EntityDescriptor>

Копируем сертификаты в файлы, например, vcloud_signing_cert.pem и vcloud_encryption_cert.pem, добавив строки для идентификации:

-----BEGIN CERTIFICATE-----
< вставляем содержимое сертификата сюда >
-----END CERTIFICATE-----

3. На стороне Keycloak#

Идём на https://auth.appworks.ru/auth/admin/master/console/#/realms/master (на 2022-09-15 нужно разрешить доступ на уровне nginx на c04-dmz-nginx).

Открываем Realm Master, слева в меню — Клиенты, в списке выбираем vcloud, переходим на вкладку Ключи.

Импортируем полученные в пункте 2 сертификаты в Ключ подписи и Ключ шифрования.

Проверяем, что авторизация в VCD работает.