В целях безопасности, в чем преимущество токена id, предоставляемого OIDC? Что если идентификационный токен украден? - PullRequest
0 голосов
/ 05 января 2019

Я много читал об OIDC и OAuth2, я знаю, что токен идентификатора в основном используется для того, чтобы клиент знал, кто пользователь и находится ли он в данный момент в сети.

Кроме того, Id-токен может предотвратить класс атак подражания [подробности можно найти в этой статье].

Но что, если маркер идентификатора украден? Может ли злоумышленник использовать токен id для олицетворения пользователя?

В нашем проекте мы просто обеспечиваем https помимо OIDC. Какие еще соображения безопасности я должен предпринять, чтобы смягчить атаки на олицетворение?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Я на самом деле не пурист в области безопасности, поэтому мои дополнения к пунктам Габора сделаны с более практической точки зрения, как кто-то, кто отвечает за создание хорошо спроектированных UI и API:

  • Идентификационный токен представляет собой подтверждение аутентификации для пользовательского интерфейса
  • Идентификационный токен НИКОГДА не используется API-интерфейсами, которые вместо них должны использовать токены доступа
  • Идентификационный токен - это единственный тип токена, который пользовательский интерфейс должен когда-либо читать, и он должен иметь формат JWT
  • Для входа в систему через веб-интерфейс идентификатор токена обеспечивает дополнительную безопасность, поскольку позволяет интерфейсу пользователя проверять токены и защищать от некоторых типов атак замены токена - так что да - OIDC более безопасен
  • Для работы выхода иногда требуется токен id

Вы должны ВСЕГДА использовать сертифицированную библиотеку безопасности, которая выполняет этот тип работы за вас, вместо того, чтобы читать токены непосредственно в своем собственном коде.

0 голосов
/ 05 января 2019

Цель или назначение OIDC - не быть более безопасным, чем OAuth2, и такое сравнение не имеет смысла. Они решают разные проблемы.

Давайте начнем с OAuth2. В очень коротком и несколько упрощенном виде OAuth2 решает проблему, когда веб-сайт содержит данные пользователя, и этот пользователь хочет предоставить доступ к некоторым своим данным другому веб-сайту. Допустим, у вас есть учетная запись Facebook, но вы хотите разрешить моему приложению доступ к некоторым вашим данным на Facebook, или, для более конкретного примера, вы хотите, чтобы мое приложение awesomeapp.com разместило ссылку на вашу стену Facebook. Для этого мой веб-сайт перенаправляет вас на Facebook, вы входите в систему, получаете токен доступа и отправляете этот токен доступа обратно на мой сайт, чтобы я мог использовать его от вашего имени, чтобы получить то, что вы разрешили мне.

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

По крайней мере, пока OIDC не появится на картинке. OIDC предоставляет элемент идентификации.

Цель идентификационного токена - предоставить идентификационную информацию, чтобы сообщить мне претензий о том, кто вы есть. Он может указывать ваш адрес электронной почты, в каких группах безопасности вы находитесь, в какой компании вы работаете или что-то еще. Также его можно использовать для загрузки дополнительных заявок, если они не вписываются в фактический токен (см. userinfo ). Эти претензии исходят от провайдера идентификации, скажем, Facebook, которому мое приложение, конечно, должно доверять, то есть я буду верить всему, что Facebook говорит мне о вас.

Это все возможно с чистым OAuth2, но не существует стандартного, хорошо известного способа сделать это (или хорошо, это OIDC :)). Вы можете изобретать и реализовывать что-то самостоятельно, но эти вещи сложнее, чем может показаться на первый взгляд. Вот почему OIDC был изобретен, так что вам не нужно. Но в конце концов, OIDC - это просто способ использовать OAuth2 для идентификации. В конце концов, это просто расширенный OAuth2, если хотите.

Что касается соображений безопасности, которые вам необходимо принять во внимание - эта часть вашего вопроса слишком широка, и, к сожалению, на нее нельзя ответить. Безопасность - очень сложная тема.

...