Защищенный ресурс SAML

Я пытаюсь защитить ресурс с помощью SAML. В игре участвуют три участника: поставщик удостоверений (IDP, вне моего контроля), поставщик услуг (SP, я использую spring-security-saml, но этот вопрос не относится к нему) и защищенный ресурс (PR, некоторая защищенная конечная точка в службе за пределами SP).

Мне нужно поддерживать два сценария:

  1. Пользователь пытается получить доступ к PR в первый раз, без какого-либо сеанса.
  2. Пользователь снова пытается получить доступ к PR, если он ранее обращался к нему.

Существует подробное руководство о том, как должен работать сценарий 1, поскольку это стандартный способ использования SAML из того, что я видел. Сценарий 2 кажется менее стандартным, и мне еще предстоит найти какую-либо исчерпывающую документацию о том, как с ним обращаться.

В сценарии 1 поток кажется стандартным:

  • Пользователь пытается получить доступ к PR
  • PR направляет пользователя к ИП
  • SP выполняет обычные утверждения SAML с IDP, а затем перенаправляет пользователя для входа в систему с IDP
  • Пользователь успешно входит в IDP
  • Пользователь перенаправляется обратно в SP с информацией о пользователе
  • SP перенаправляет обратно в PR (возможно, с каким-то сгенерированным токеном для использования в будущем или дополнительной информацией о пользователе)
  • Информация из PR доводится до пользователя

Это сценарий 2, в котором я менее ясен, я думаю следующее:

  • Пользователь пытается получить доступ к PR с помощью токена, предоставленного в предыдущем сценарии
  • PR проверяет действительность токена с SP
  • SP определяет, действителен ли токен (как это сделать? Кажется, в стандарте SAML нет ничего для проверки активности сеанса)
  • PR разрешает доступ к ресурсу в зависимости от ответа от ИП

Мои вопросы:

  • Правильно ли я понимаю сценарий 2? Это как предполагается использовать SAML?
  • Как я могу проверить действительность сеанса с IDP?
  • Должен ли PR проверять действительность сеанса по каждому запросу? Поскольку SAML не требует истечения срока действия (например, токенов доступа OAuth), похоже, нет никакого способа кэшировать сеанс пользователя.

1 ответ

Для доступа к PR может быть два условия.

  1. Действительный сеанс приложения, созданный PR с указанным временем, прежде чем его необходимо продлить.
  2. Действительный токен SAML, на котором будет основан сеанс приложения.

PR может придерживаться мнения, что пока токен SAML действителен, сеанс приложения действителен. Или он может решить, что хочет создавать новый сеанс каждые 10 минут, что означает перенаправление к IdP для получения нового токена SAML, на котором будет основан новый сеанс приложения. Это зависит от защищаемого ресурса. В конфиденциальном ресурсе, возможно, с медицинскими данными, сеансом следует управлять соответствующим образом.

Что касается срока действия токена SAML, IdP выдает токен на заданный период времени, используя Response/Conditions/NotBefore и Response/Conditions/NotOnOrAfterкоторые показаны в примерах. Есть также Response/AuthnStatement/SessionNotOnOrAfterкоторый можно использовать для проверки действительности. Этот:

Возвращает или задает момент времени, в который сеанс между принципалом, идентифицированным субъектом, и органом SAML, выдающим этот оператор, должен считаться завершенным.

от сюда. Это эффективно ограничивает сеанс связи с общественностью, поскольку IdP "отключает" пользователя по истечении этого времени. например, публичный запрос доступа для часового доступа к PR. NotOnOrAfter относится к утверждению, в то время как SessionNotOnOrAfterотносится к пользователю. После SessionNotOnOrAfter IdP может не аутентифицировать пользователя в зависимости от политики и т. д.

Если PR необходимо возобновить сеанс приложения, он может попросить SP проверить токен SAML, что может включать определение того, NotOnOrAfterв прошлом. Если это так, то SP снова запустит процесс с IdP, чтобы получить новый токен SAML. Если IdP имеет дело с конфиденциальным PR, он может освободить атрибуты на ограниченное время, в зависимости от того, как предоставляется доступ на его конце.

Другие вопросы по тегам