OIDC, SAML и внешние поставщики идентификации#

Сервис OIDC Discovery#

Blitz Identity Provider автоматически публикует сервис OIDC Discovery в соответствии с заданными в Blitz Identity Provider настройками. В составе сервиса можно прописать адрес документации на OIDC сервис. Чтобы задать свой адрес документации, необходимо в блоке настроек blitz.prod.local.idp.oauth прописать настройку serviceDocumentationUrl со значением адреса ссылки на документацию.

Адреса вызовов внешних поставщиков#

При внедрении Blitz Identity Provider может возникнуть потребность настроить вызовы с серверов Blitz Identity Provider обработчиков внешних поставщиков идентификации не напрямую, а через прокси сервер. В этом случае есть необходимость изменить стандартные адреса обработчиков внешних поставщиков идентификации на адреса, зарегистрированные на прокси сервере. Чтобы скорректировать адреса обработчиков, необходимо изменить значения настроек authUri, tokenUri, dataUri в соответствующих блоках настроек внешних поставщиков идентификации в blitz.prod.local.idp.federation.

Пример настроек для входа через внешний поставщик Google:

"federation" : {
  "points" : {
    "google" : [
      {
        …
        "authUri" : "https://accounts.google.com/o/oauth2/auth",
        "tokenUri" : "https://accounts.google.com/o/oauth2/token",
        "dataUri" : "https://www.googleapis.com/oauth2/v1/userinfo?alt=json",
        …
      },
      …
    ]
  }
}

Внешний SAML-поставщик#

Blitz Identity Provider позволяет настроить вход через внешний поставщик идентификации, работающий по протоколу SAML 2.0.

Для этого необходимо в блоке настроек blitz.prod.local.idp.federations создать внешний поставщик saml со следующими настройками:

  • name – системное имя внешнего поставщика идентификации;

  • humanReadableName – описание внешнего поставщика идентификации;

  • clientId – имя поставщика услуг (EntityId), присвоенное Blitz Identity Provider при регистрации во внешнем SAML поставщике идентификации;

  • signAuthnReq – определяет, должен ли Blitz Identity Provider подписывать SAML запрос, отправляемый внешнему поставщику идентификации;

  • checkAssertionSign – определяет, необходимо ли проверять подпись SAML утверждений, полученных от внешнего поставщика идентификации (для ПРОД сред обязательно необходимо включать проверку подписи);

  • блок credentials с настройками доступа к ключевому контейнеру, используемому для подписывания запросов к поставщику идентификации SAML. Настраивается опционально, в случае если для взаимодействия с внешним поставщиком идентификации требуется использовать отдельный контейнер ключей. Если настройка не задана, то ключи будут браться из основного keystore, настроенного в блоке blitz.prod.local.idp.keystore (при этом в качестве alias будет использоваться имя поставщика идентификации из настройки name).

    Задаются настройки:

    • alias – имя ключа в контейнере;

    • keystore – блок настроек, содержащий тип контейнера (type), который может быть JCEKS или BKS, а также путь к контейнеру (path) и пароль к контейнеру (password);

  • idpMetaPath – путь к файлу, в котором хранятся метаданные внешнего поставщика идентификации (XML-файл с метаданными IDP);

  • блок настроек userMatching – задает правила сопоставления учетных записей:

    • в настройке type – признак, что используется базовая (значение builder) настройка связывания учетных записей;

    • в настройке mapping – правила сопоставления учетных записей из внешнего SAML-поставщика идентификации учетным записям в Blitz Identity Provider;

    • в настройке matchingRules – правила переноса SAML-утверждений из внешнего поставщика идентификации в атрибуты учетной записи в Blitz Identity Provider;

    • requireLogInToBind – признак «Предлагать пользователю ввести логин и пароль для привязки, если учетная запись не была идентифицирована»;

    • strictMatching – признак «Требовать ввод пароля, если учетная запись была идентифицирована»;

    • uniqueMatching – признак «Для привязки должна быть найдена только одна учетная запись по заданным правилам соответствия».

Пример настроек внешнего поставщика идентификации:

"federation" : {
  "points" : {
    "saml" : [
      {
       "name" : "demo-idp",
        "humanReadableName" : "External SAML IDP",
        "clientId" : "login.company.com",
        "signAuthnReq" : true,
        "checkAssertionSign" : true,
        "_credentials" : {
            "alias" : "demo-idp",
            "keyStore" : {
              "password" : "*****",
              "path" : "demo-idp-key.jks",
              "type" : "JCEKS"
            }
        },
        "idpMetaPath" : "demo-idp-metadata.xml",
        "userMatching" : {
          "type" : "builder",
          "mapping" : [
            {
              "attr" : "urn:saml:mail",
              "master" : false,
              "value" : "${email}"
            }
          ],
          "matchingRules" : [
            [
              {
                "attr" : "urn:saml:mail",
                "value" : "${email}"
              }
            ]
          ],
          "requireLogInToBind" : false,
          "strictMatching" : false,
          "uniqueMatching" : false
        }
      }
    ],
    …
  }
}

После создания настроек внешнего поставщика необходимо включить его в списке доступных внешних поставщиков идентификации. Для этого в блок настроек blitz.prod.local.idp.login в перечень методов аутентификации (methods) в список внешних поставщиков входа externalIdps добавить внешний поставщик c fedPoint, соответствующий настроенному.

Пример настройки для включения внешнего поставщика идентификации с типом saml и именем demo-idp:

"login" : {
  …
  "methods" : {
    …
    "externalIdps" : {
      "idps" : [
        …
        {
          "fedPoint" : "saml:demo-idp"
        },
        …
      ],
      …
    },
    …
  },
  …
}

Настроить логотип для кнопки входа через внешний поставщик входа.

Внешний поставщик СУДИС#

Blitz Identity Provider позволяет настроить вход через внешний поставщик идентификации СУДИС.

Для этого необходимо в блоке настроек blitz.prod.local.idp.federations создать внешний поставщик sudis со следующими настройками:

  • name – системное имя внешнего поставщика идентификации;

  • humanReadableName – описание внешнего поставщика идентификации;

  • clientId – имя поставщика услуг (EntityId), присвоенное Blitz Identity Provider при регистрации в СУДИС;

  • блок credentials с настройками доступа к ключевому контейнеру, используемому для подписывания и шифрования запросов к СУДИС. Должно использоваться ПО CMSServer, дистрибутив которого предоставляет поставщик СУДИС.

    Задаются настройки:

    • endpoint – адрес сервера CMSServer;

    • fingerprint – SHA1 хэш сертификата IDP СУДИС. Указывается в формате {SHA1}значение;

    • recipientKey – идентификатор ключа СУДИС (значение cn из subject сертификата СУДИС);

    • senderKey – идентификатор ключа Blitz Identity Provider, используемого для подписания запросов к СУДИС и расшифровывания ответов (значение cn из subject сертификата Blitz Identity Provider, зарегистрированного в СУДИС);

  • idpEntityIdEntityID СУДИС;

  • sidAttrName – имя атрибута, используемого в качестве идентификатора учетной записи в СУДИС;

  • ssoServiceLocation – адрес обработчика запроса запросов на аутентификацию в СУДИС;

  • sloServiceResponseLocation – адрес ответа на запросы логаута, инициированные в СУДИР из СУДИС;

  • sloServiceLocation – адрес обработчика логаута в СУДИС при инициировании логаута из СУДИР в СУДИС;

  • блок настроек userMatching – задает правила сопоставления учетных записей:

    • в настройке type – признак, что используется базовая (значение builder) настройка связывания учетных записей;

    • в настройке mapping – правила сопоставления учетных записей из внешнего SAML-поставщика идентификации учетным записям в Blitz Identity Provider;

    • в настройке matchingRules – правила переноса SAML-утверждений из внешнего поставщика идентификации в атрибуты учетной записи в Blitz Identity Provider;

    • requireLogInToBind – признак «Предлагать пользователю ввести логин и пароль для привязки, если учетная запись не была идентифицирована»;

    • strictMatching – признак «Требовать ввод пароля, если учетная запись была идентифицирована»;

    • uniqueMatching – признак «Для привязки должна быть найдена только одна учетная запись по заданным правилам соответствия».

Пример настроек внешнего поставщика идентификации:

"federation" : {
  "points" : {
    "sudis" : [
    {
        "clientId" : "<ENTITY_ID BLITZ>",
        "credentials" : {
            "endpoint" : "http://<CMS_HOST>:<CMS_PORT>",
            "fingerprint" : "{SHA1}<FINGERPRINT SUDIS CERT>",
            "recipientKey" : "<SUDIS_KEY SUBJECT.CN>",
            "senderKey" : "<BLITZ_KEY SUBJECT.CN>"
        },
        "humanReadableName" : "SUDIS",
        "idpEntityId" : "http://…",
        "name" : "sudis",
        "sidAttrName" : "oid",
        "ssoServiceLocation" : "http://…/idp/profile/SAML2/POSTGOST/SSO",
        "sloServiceLocation" : "http://…/idp/Logout",
        "sloServiceResponseLocation" : "http://…/idp/profile/SAML2/Redirect/SLO",
        "userMatching" : {
            …
        }
    }
],

После создания настроек внешнего поставщика необходимо включить его в списке доступных внешних поставщиков идентификации. Для этого в блок настроек blitz.prod.local.idp.login в перечень методов аутентификации (methods) в список внешних поставщиков входа externalIdps добавить внешний поставщик c fedPoint, соответствующий настроенному.

Пример настройки для включения внешнего поставщика идентификации с типом sudis и именем sudis:

"login" : {
  …
  "methods" : {
    …
    "externalIdps" : {
      "idps" : [
        …
        {
          "fedPoint" : "sudis:sudis"
        },
        …
      ],
      …
    },
    …
  },
  …
}