Skip to main content

Справочник по конфигурации SAML

Вы можете просмотреть метаданные SAML для ваш экземпляр GitHub Enterprise Server, а также узнать больше о доступных атрибутах SAML и требованиях к ответу.

Сведения о конфигурации SAML

Чтобы использовать единый вход SAML для проверки подлинностиGitHub, необходимо настроить внешний поставщик удостоверений SAML (IdP) и ваш экземпляр GitHub Enterprise Server В конфигурации GitHub SAML функции в качестве поставщика услуг SAML (SP). Дополнительные сведения о проверке подлинности для вашего предприятия см. в разделе Основы управления идентификацией и доступом.

GitHub обеспечивает интеграцию в соответствии со спецификацией SAML 2.0. Дополнительные сведения см. на вики-странице по SAML на веб-сайте OASIS.

При настройке единого входа GitHubSAML необходимо ввести уникальные значения из поставщика удостоверений SAML, а также ввести уникальные значения из GitHub поставщика удостоверений.

Метаданные SAML

Метаданные ваш экземпляр GitHub Enterprise Server поставщика услуг доступны http(s)://HOSTNAME/saml/metadataпо адресу , где HOSTNAME — это имя узла для вашего экземпляра. GitHub Enterprise Server использует привязку urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST .

ЗначениеДругие названияDescriptionПример
Идентификатор сущности поставщика удостоверенийURL-адрес SP, ограничение аудиторииURL-адрес верхнего уровня для экземпляр GitHub Enterprise Serverhttp(s)://HOSTNAME
URL-адрес службы контроля доступа (ACS)URL-адрес ответа, получателя или назначенияURL-адрес, с которого IdP отправляет ответы SAMLhttp(s)://HOSTNAME/saml/consume
URL-адрес единого входа SP
URL-адрес, по которому IdP начинает единый входhttp(s)://HOSTNAME/sso

Атрибуты SAML

Для следующих атрибутов SAML доступны GitHubследующие атрибуты SAML. Имена атрибутов можно изменить в атрибуте Консоль управления, за исключением атрибута administrator . Для получения дополнительной информации см. Администрирование экземпляра из веб-интерфейса.

имениОбязательноDescription
NameIDПостоянный идентификатор пользователя. Можно использовать любой формат идентификатора постоянного имени.
GitHub нормализует NameID элемент для использования в качестве имени пользователя, если не указан один из альтернативных утверждений. Дополнительные сведения см. в разделе Рекомендации по использованию имени пользователя для внешней проверки подлинности.

[!NOTE] Важно использовать удобочитаемый, постоянный идентификатор. Использование временного формата идентификатора, например urn:oasis:names:tc:SAML:2.0:nameid-format:transient , приведет к повторному связыванию учетных записей при каждом входе, что может быть вредно для управления авторизацией. | | SessionNotOnOrAfter | | Дата, которая GitHub делает связанное сеанс недействительным. После недопустимости пользователь должен снова пройти проверку подлинности, чтобы получить доступ к ваш экземпляр GitHub Enterprise Server вашей организации. Дополнительные сведения см. в разделе "Длительность сеанса и время ожидания". | | | | administrator | | Если это значение равно true, GitHub пользователь будет автоматически повышать уровень администратора сайта. Задание для этого атрибута всех значений, кроме true, приведет к понижению уровня при условии, что значение не пустое. Если пропустить этот атрибут или оставить значение пустым, роль пользователя не изменится. | | username | | Имя пользователя для ваш экземпляр GitHub Enterprise Server. | | | | full_name | | полное имя пользователя, отображаемое на странице профиля пользователя. | | emails | | Адреса электронной почты пользователя. Можно указать несколько адресов. Если вы синхронизируете использование лицензий между GitHub Enterprise Server и GitHub Enterprise Cloud, GitHub Connect используется emails для идентификации уникальных пользователей в разных продуктах. Дополнительные сведения см. в разделе Синхронизация использования лицензий из GitHub Enterprise Server с облаком. | | public_keys | | ключи общедоступного SSH для пользователя. Можно указать несколько ключей. | | gpg_keys | | GPG для пользователя. Можно указать несколько ключей. |

Чтобы указать несколько значений для атрибута, используйте несколько элементов <saml2:AttributeValue>.

<saml2:Attribute FriendlyName="public_keys" Name="urn:oid:1.2.840.113549.1.1.1" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml2:AttributeValue>ssh-rsa LONG KEY</saml2:AttributeValue>
    <saml2:AttributeValue>ssh-rsa LONG KEY 2</saml2:AttributeValue>
</saml2:Attribute>

Требования к ответу SAML

GitHub требует, чтобы ответное сообщение от поставщика удостоверений выполнило следующие требования.

  • Ваш IdP должен предоставить элемент <Destination> в корневом документе ответа и обеспечить соответствие URL-адресу ACS, только если корневой документ ответа подписан. Если идентификатор поставщика удостоверений подписывает утверждение, GitHub проигнорирует утверждение.

  • Ваш IdP всегда должен предоставлять элемент <Audience> как часть элемента <AudienceRestriction>. Значение должно соответствовать вашему EntityIdGitHubзначению. Это значение является URL-адресом, к которого вы обращаетесь GitHub, например http(s)://HOSTNAME.

  • IdP должен предоставить одно утверждение в ответе с цифровой подписью. Это можно сделать, подписав элемент или подписав <Assertion>``<Response> элемент.

  • IdP должен предоставить элемент <NameID> как часть элемента <Subject>. Вы можете использовать любой формат идентификатора постоянного имени.

  • Ваш IdP должен включать атрибут Recipient, который должен быть настроен с URL-адресом ACS. В следующем примере демонстрируется атрибут.

    <samlp:Response ...>
      <saml:Assertion ...>
        <saml:Subject>
          <saml:NameID ...>...</saml:NameID>
          <saml:SubjectConfirmation ...>
            <saml:SubjectConfirmationData Recipient="https://HOSTNAME/saml/consume" .../>
          </saml:SubjectConfirmation>
        </saml:Subject>
        <saml:AttributeStatement>
          <saml:Attribute FriendlyName="USERNAME-ATTRIBUTE" ...>
            <saml:AttributeValue>monalisa</saml:AttributeValue>
          </saml:Attribute>
        </saml:AttributeStatement>
      </saml:Assertion>
    </samlp:Response>
    

Сертификат подписи SAML для AuthnRequests

При первой настройке GitHub Enterprise Server и запуске экземпляра создается самозаверяющий сертификат подписи SAML, отдельный от сертификата SAML поставщика удостоверений. Этот сертификат используется для подписывания SAML AuthnRequests , отправленного поставщику удостоверений, и действует в течение десяти лет. Он хранится /data/user/common/saml-sp.p12 , и вы можете просмотреть сведения в формате в кодировке Base64 по http(s)://HOSTNAME/saml/metadataадресу.

Если поставщик удостоверений проверяет сертификат подписи SAML или включен сертификат подписи SAML, пользователи могут столкнуться с проблемами проверки подлинности при истечении срока действия сертификата. Чтобы проверить дату окончания срока действия, GitHub Enterprise Server администратор может подключиться к серверу через SSH и выполнить следующую команду. См. статью "Подключение к административной оболочке через SSH".

sudo openssl pkcs12 -in /data/user/common/saml-sp.p12 -clcerts -nokeys -password pass: | sudo openssl x509 -noout -enddate

Чтобы повторно создать сертификат подписи SAML SP, если срок его действия истек и требуется для утверждений поставщика удостоверений или зашифрованных утверждений, GitHub Enterprise Server администратор может выполнить команды ниже в сеансе GitHub Enterprise Server SSH.

Примечание.

Команды nomad будут кратко нарушены для пользователей по мере перезапуска github-unicorn службы.

# Backup the old certificate
sudo cp /data/user/common/saml-sp.p12 /data/user/common/saml-sp.p12-$(date +%d%m%Y_%H%M%S)

saml_tempdir=$(sudo mktemp -d)
sudo openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -sha256 -subj "/CN=github_enterprise" -keyout $saml_tempdir/saml.key -out $saml_tempdir/saml.crt
sudo openssl pkcs12 -export -inkey $saml_tempdir/saml.key -in $saml_tempdir/saml.crt -nodes -password pass: -out /data/user/common/saml-sp.p12
sudo rm -rf $saml_tempdir

sudo nomad stop github-unicorn
sudo nomad run -hcl1 /etc/nomad-jobs/github/unicorn.hcl

Длительность сеанса и время ожидания

Чтобы предотвратить проверку подлинности пользователя с помощью поставщика удостоверений и оставаться авторизованным на неопределенный срок, GitHub периодически отменяет сеанс для каждой учетной записи пользователя с доступом к ваш экземпляр GitHub Enterprise Server вашего предприятия. После этого пользователь должен снова выполнить проверку подлинности с помощью IdP.

По умолчанию, если поставщик удостоверений не утверждает значение атрибута SessionNotOnOrAfter , GitHub отменяет сеанс через неделю после успешной проверки подлинности с помощью поставщика удостоверений.

GitHub будет поддерживать настраиваемую длительность сеанса, если поставщик удостоверений предоставляет возможность настроить SessionNotOnOrAfter атрибут и значение, и если этот атрибут включен в ответы SAML. Если поставщик удостоверений не разрешает SessionNotOnOrAfter атрибут, администратор сайта может настроить настраиваемое время ожидания сеанса SAML для всех пользователей в экземпляре с помощью ghe-config saml.default-session-expiration [seconds] команды в административной оболочке.

Если вы определяете настраиваемое значение длительности сеанса менее 24 часов, GitHub пользователи могут запрашивать проверку подлинности при каждом GitHub запуске перенаправления.

Независимо от метода проверки подлинности, используемого в вашем экземпляре, GitHub Enterprise Server завершит сеанс пользователя через две недели непрерывной бездействия.

Примечание.

Microsoft Entra ID (ранее известный как Azure AD) не поддерживает атрибут SessionNotOnOrAfter. Кроме того, настраиваемая политика времени существования для токенов SAML, выданных Entra ID , не контролирует время ожиданияGitHubсеанса.