21 Апр, 2023

OIDC: Открытый протокол аутентификации

Penetration Testing as a service (PTaaS)

Tests security measures and simulates attacks to identify weaknesses.

Обзор для OIDC 

OpenID Connect (OIDC) - это протокол аутентификации, построенный поверх OAuth 2.0, который позволяет пользователям аутентифицироваться в веб-или мобильном приложении с помощью сторонней службы аутентификации. IT обеспечивает стандартизированный способ доступа к идентификационной информации в разных приложениях и услуги и поддерживает единый вход (SSO), который позволяет пользователям входить в систему один раз и получать доступ к нескольким веб-приложениям без необходимости каждый раз вводить свои учетные данные. OIDC был введен в 2014 году для устранения некоторых недостатков OAuth 2.0, который в первую очередь был разработан для целей авторизации, а не аутентификации. Он использует веб-токены JSON (JWTs) для обмена идентификационной информацией между поставщиком удостоверений и веб-приложением. OIDC поддерживает несколько разные типы потоков и областей применения, каждая из которых предназначена для конкретного варианта использования. 

История OIDC 

Протокол OpenID Connect (OIDC) был разработан в 2014 году как способ улучшить оригинальный протокол аутентификации OpenID, который был представлен в 2005 году, но не получил широкого распространения из-за своей сложности и отсутствия стандартизации. OIDC был разработан таким образом, чтобы быть более простым и гибким, чем его предшественник, и обеспечивать стандартизированный способ доступа к идентификационной информации в приложениях и службах. 

До внедрения OIDC разработчики обычно использовали OAuth 2.0 для обеспечения аутентификации для своих приложений, хотя OAuth 2.0 был в основном разработан для целей авторизации, а не аутентификации. Это привело к ряду проблем, таких как необходимость для разработчиков внедрять свои собственные механизмы аутентификации, что привело к несоответствиям и уязвимостям в системе безопасности. 

В ответ на эти вызовы группа лидеров отрасли, включая Google, Microsoft и Yahoo, в 2007 году учредила OpenID Foundation для содействия разработке и внедрению открытых стандартов управления идентификацией. Основное внимание фонда было сосредоточено на разработке нового протокола аутентификации, который основывался бы на OAuth 2.0 и устранял некоторые из его недостатков. 

Результатом этих усилий стало внедрение OIDC в 2014 году. OIDC был разработан как простой, гибкий и масштабируемый протокол, который можно было бы использовать для широкого спектра вариантов использования, от входа в социальную сеть до управления корпоративной идентификацией. Он был построен поверх OAuth 2.0, который обеспечил основу для безопасной связи между различными сторонами. 

OIDC был разработан для обеспечения обратной совместимости с OAuth 2.0, что означало, что разработчики могли использовать свою существующую инфраструктуру OAuth 2.0 и добавлять поверх нее функциональность OIDC. Это упростило разработчикам внедрение OIDC и начало использовать его в своих приложениях. 

Ключевые особенности OIDC 

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

Аутентификация пользователя  

Одной из основных целей OIDC является упрощение процесса аутентификации для конечных пользователей. OIDC позволяет пользователям аутентифицироваться с помощью стороннего поставщика удостоверений личности (IDP), избавляя пользователей от необходимости запоминать несколько имен пользователей и паролей для разных приложений. IDP аутентифицирует пользователя и отправляет обратно приложению идентификационный токен, который может быть использован для проверки личности пользователя. Это делает процесс аутентификации более безопасным и простым для конечных пользователей. 

Веб-токены JSON (JWTs)  

OIDC использует веб-токены JSON (JWTs) для обмена идентификационной информацией между IDP и приложением. JWT компактны, безопасны для URL-адресов и просты в анализе, что делает их идеальным форматом для обмена идентификационной информацией. JWT состоит из трех частей: заголовка, полезной нагрузки и подписи. Заголовок содержит информацию о JWT, такую как алгоритм, используемый для его подписи. Полезная нагрузка содержит идентификационную информацию, такую как имя пользователя и адрес электронной почты. Подпись используется для проверки подлинности JWT. 

Единый вход (SSO)  

OIDC поддерживает единый вход (SSO), который позволяет пользователям входить в систему один раз и получать доступ к нескольким приложениям без необходимости каждый раз вводить свои учетные данные. Это достигается за счет использования JWT, которые используются для обмена идентификационной информацией между IDP и приложением. Как только пользователь войдет в IDP, он сможет получить доступ к нескольким приложениям без необходимости повторного ввода своих учетных данных. 

Авторизация  

OIDC построен поверх OAuth 2.0, который обеспечивает основу для безопасной связи между различными сторонами. OAuth 2.0 в первую очередь предназначен для целей авторизации, но OIDC строится поверх него также для обеспечения аутентификации. OIDC позволяет клиентам получать авторизацию от пользователей для доступа к их защищенным ресурсам, таким как их адрес электронной почты или события календаря. 

Обратная совместимость с OAuth 2.0 

OIDC разработан таким образом, чтобы быть обратно совместимым с OAuth 2.0, что означает, что разработчики могут использовать свою существующую инфраструктуру OAuth 2.0 и добавлять поверх нее функциональность OIDC. Это позволяет разработчикам легко внедрить OIDC и начать использовать его в своих приложениях. 

Расширяемость  

OIDC разработан таким образом, чтобы быть гибким и расширяемым, что означает, что его можно настроить в соответствии с потребностями различных вариантов использования. OIDC поддерживает несколько различных типов потоков, каждый из которых предназначен для конкретного варианта использования. Это позволяет разработчикам легко внедрять OIDC в свои приложения и настраивать его в соответствии со своими конкретными потребностями. 

Стандартизация  

OIDC - это открытый стандарт, который поддерживается OpenID Foundation. Это означает, что он широко принят и поддерживается большим числом поставщиков удостоверений личности и разработчиков приложений. Стандартизация OIDC упрощает разработчикам внедрение ее в свои приложения, а поставщикам удостоверений - ее поддержку. 

Таким образом, OIDC - это гибкий, расширяемый и стандартизированный протокол аутентификации, который предоставляет пользователям простой и безопасный способ аутентификации в веб-и мобильных приложениях. Его поддержка JWTs, единого входа и обратная совместимость с OAuth 2.0 делает его популярным выбором для разработчиков, которым необходимо реализовать аутентификацию в своих приложениях. Его расширяемость и стандартизация делают его гибким и широко распространенным протоколом, который может быть настроен в соответствии с потребностями различных вариантов использования. 

Как работает OIDC? 

OpenID Connect (OIDC) - это протокол аутентификации, который позволяет пользователям проверять подлинность и разрешать доступ к веб-приложениям с помощью стороннего поставщика удостоверений (IdP), которому доверяют как пользователь, так и приложение. OIDC построен поверх OAuth 2.0, который является стандартным протоколом для авторизации. В этом разделе мы подробно обсудим, как работает OIDC. 

Пользователь инициирует запрос на аутентификацию: В процесс аутентификации начинается, когда пользователь инициирует запрос на аутентификацию для доступа к защищенному ресурсу в веб-приложении. Запрос отправляется клиенту OIDC, который является приложением, требующим аутентификации пользователя. 

Клиент OIDC отправляет запрос на авторизацию IdP: Затем клиент OIDC отправляет запрос на авторизацию IdP. Этот запрос включает в себя идентификационные данные клиента, запрашиваемую область доступа и URL-адрес перенаправления, куда пользователь будет отправлен после завершения процесса аутентификации. 

IdP аутентифицирует пользователя: Затем IdP аутентифицирует пользователя. Это может включать в себя ввод пользователем своего имени пользователя и пароля или использование более продвинутой формы аутентификации, такой как многофакторная аутентификация (MFA). Как только пользователь аутентифицируется, IdP генерирует токен доступа и отправляет его обратно клиенту OIDC. 

Клиент OIDC проверяет маркер доступа: Затем клиент OIDC проверяет токен доступа, полученный от IdP. Это включает в себя проверку подписи токена, даты истечения срока действия и другой информации, чтобы убедиться, что токен действителен и не был подделан. 

Клиент OIDC запрашивает информацию о пользователе у IdP: Если токен доступа действителен, клиент OIDC затем отправляет IdP запрос на получение информации о пользователе. Этот запрос включает маркер доступа, а также запрос на конкретную информацию о пользователе, такую как его имя, адрес электронной почты и другие атрибуты. 

IdP отправляет информацию о пользователе клиенту OIDC Затем IdP отправляет запрошенную информацию о пользователе клиенту OIDC. Эта информация обычно представлена в форме веб-токена JSON (JWT), который содержит идентификационную информацию пользователя, а также любые дополнительные утверждения, запрошенные клиентом OIDC. 

Клиент OIDC проверяет подлинность пользователя Наконец, клиент OIDC может аутентифицировать пользователя на основе информации, полученной от IdP. Если пользователь успешно прошел аутентификацию, ему предоставляется доступ к защищенному ресурсу веб-приложения. 

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

Чем OpenID Connect отличается от OAuth 2.0  

OpenID Connect (OIDC) и OAuth 2.0 являются широко используемыми протоколами для управления идентификацией и доступом в Интернете. Хотя у них много общего, между этими двумя протоколами есть некоторые важные различия, которые стоит отметить. В этом разделе мы обсудим основные различия между OIDC и OAuth 2.0. 

Цель Основное различие между OIDC и OAuth 2.0 заключается в их назначении. OAuth 2.0 - это в первую очередь протокол для авторизации, тогда как OIDC - это протокол для аутентификации. OAuth 2.0 используется для предоставления сторонним приложениям доступа к ресурсам пользователя без предоставления им полного доступа к учетной записи пользователя. OIDC, с другой стороны, используется для аутентификации пользователя и предоставления ему безопасного способа доступа к ресурсам в нескольких приложениях. 

Аутентификация Хотя OAuth 2.0 можно использовать для аутентификации, он не был разработан специально для этой цели. OIDC, с другой стороны, включает в себя функции, специально разработанные для аутентификации. OIDC позволяет делегировать аутентификацию пользователя доверенному стороннему поставщику удостоверений, который может предоставлять расширенные функции аутентификации, такие как многофакторная аутентификация (MFA). 

Информация о пользователе OIDC включает стандартный способ запроса и получения пользовательской информации, в то время как OAuth 2.0 этого не делает. С помощью OIDC, когда пользователь проходит аутентификацию, его идентификационная информация возвращается в стандартизированном формате JSON Web Token (JWT). Это позволяет приложениям получать стандартный набор пользовательской информации, такой как имя, адрес электронной почты и идентификатор пользователя, без необходимости внедрять пользовательские API для каждого поставщика удостоверений. 

Формат токена Другим ключевым различием между этими двумя протоколами является формат токена, используемый для аутентификации и авторизации. OAuth 2.0 использует токены на предъявителя, которые представляют собой простые токены, отправляемые в качестве заголовков авторизации в HTTP-запросах. Эти токены относительно легко перехватить и воспроизвести, что делает их менее безопасными для аутентификации. OIDC, с другой стороны, использует JWT, которые включают цифровую подпись для проверки их подлинности и предотвращения подделки. 

Функции безопасности OIDC включает в себя несколько функций безопасности, которые не включены в OAuth 2.0. Например, OIDC включает в себя возможность проверки подлинности клиентского приложения путем выполнения запроса с использованием клиентского секрета. OIDC также включает поддержку подписанных запросов, что помогает предотвратить повторные атаки и гарантирует, что запросы могут быть отправлены только авторизованными сторонами. 

Хотя и OAuth 2.0, и OIDC используются для управления идентификацией и доступом в Интернете, они служат разным целям и включают разные функции. OIDC включает расширенные функции аутентификации и стандартизированную пользовательскую информацию, что делает его более подходящим для сценариев аутентификации и единого входа (SSO). OAuth 2.0, с другой стороны, является в первую очередь протоколом для авторизации и не включает стандартизированную информацию о пользователе или расширенные функции аутентификации. 

Как использовать OIDC 

Чтобы использовать OpenID Connect (OIDC) для аутентификации, необходимо выполнить несколько шагов. Эти шаги могут варьироваться в зависимости от конкретной реализации OIDC, но в целом задействованы следующие шаги: 

Выберите поставщика удостоверений личности (IdP): Первым шагом в использовании OIDC для аутентификации является выбор поставщика удостоверений (IdP), который поддерживает OIDC. Популярные IDPL, которые поддерживают OIDC, включают Google, Microsoft и Okta. IdP предоставит идентификатор клиента OIDC и секрет клиента, который будет использоваться для аутентификации с помощью IdP. 

Добавьте поддержку OIDC в свое приложение: Следующий шаг - добавить поддержку OIDC в ваше приложение. Обычно это включает в себя добавление клиентской библиотеки OIDC в код вашего приложения. Популярные клиентские библиотеки OIDC включают библиотеку OpenID Connect для JavaScript (oidc-client-js) и библиотеку Spring Security OAuth для Java. 

Настройте свое приложение на использование IdP: После того как вы добавили поддержку OIDC в свое приложение, вам необходимо настроить свое приложение на использование IdP. Это включает в себя установку идентификатора клиента и клиентского секрета, предоставляемых IdP, а также настройку любых необходимых конечных точек и областей. 

Инициируйте поток аутентификации: Чтобы инициировать поток аутентификации, вашему приложению необходимо перенаправить пользователя к конечной точке авторизации IdP. Эта конечная точка обычно требует, чтобы пользователь прошел аутентификацию с помощью IdP, используя свое имя пользователя и пароль или другие формы аутентификации, такие как многофакторная аутентификация (MFA). 

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

Обменяйте код авторизации на токен доступа: Ваше приложение может использовать код авторизации, полученный от IdP, для запроса токена доступа от конечной точки токена. Затем токен доступа можно использовать для выполнения аутентифицированных запросов к API IdP. 

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

Используйте токен доступа для доступа к ресурсам: Как только токен доступа будет подтвержден, ваше приложение сможет использовать его для отправки запросов к API IdP или к ресурсам вашего приложения. Токен доступа должен быть включен в заголовок авторизации HTTP-запросов. 

Проблемы безопасности и их устранение 

Как и любой другой протокол аутентификации, OpenID Connect (OIDC) имеет свой собственный набор проблем безопасности, которые необходимо учитывать для обеспечения безопасной аутентификации. Ниже приведены некоторые из распространенных проблем безопасности, связанных с OIDC, и меры по исправлению, которые могут быть приняты: 

Атаки типа "Человек посередине" (MitM): Атаки MitM могут происходить, когда злоумышленник перехватывает связь между клиентом и поставщиком удостоверений. Это может привести к тому, что злоумышленник сможет украсть учетные данные пользователя или получить несанкционированный доступ к пользовательским данным. 

Исправление: Чтобы предотвратить атаки MitM, рекомендуется использовать HTTPS для шифрования связи между клиентом и поставщиком удостоверений. Это гарантирует, что связь между двумя сторонами не может быть перехвачена или подделана злоумышленником. 

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

Исправление: Чтобы предотвратить кражу токенов, токены доступа должны быть недолговечными и иметь срок годности. Кроме того, рекомендуется использовать токены обновления, которые можно использовать для получения нового токена доступа после истечения срока действия старого. Токены доступа также должны быть зашифрованы и подписаны, чтобы предотвратить несанкционированное использование. 

Атаки на подделку межсайтовых запросов (CSRF): CSRF-атаки могут происходить, когда злоумышленник отправляет запрос поставщику удостоверений от имени пользователя. Это может привести к тому, что злоумышленник сможет получить учетные данные пользователя или получить доступ к его данным. 

Исправление: Для предотвращения атак CSRF рекомендуется использовать токены CSRF, которые генерируются поставщиком удостоверений и включаются в запросы, отправляемые клиентом. Затем поставщик удостоверений может проверить токен, чтобы убедиться, что запрос является законным и не отправлен злоумышленником. 

Фишинговые атаки: Фишинговые атаки могут происходить, когда злоумышленник создает поддельную страницу входа в систему поставщика удостоверений личности и обманом заставляет пользователя вводить свои учетные данные. Это может привести к тому, что злоумышленник сможет украсть учетные данные пользователя и получить доступ к его данным. 

Исправление: Для предотвращения фишинговых атак рекомендуется обучать пользователей тому, как идентифицировать страницы входа в систему законных поставщиков удостоверений личности. Кроме того, многофакторная аутентификация (MFA) может быть использована для обеспечения дополнительного уровня безопасности и предотвращения несанкционированного доступа, даже если злоумышленник получил учетные данные пользователя. 

Небезопасное хранение токенов доступа: Если токены доступа хранятся небезопасно, злоумышленник может легко получить к ним доступ и использовать для получения несанкционированного доступа к данным пользователя. 

Исправление: Чтобы предотвратить небезопасное хранение токенов доступа, токены доступа следует хранить в безопасном месте, таком как хранилище на стороне клиента или хранилище на стороне сервера, с соответствующим шифрованием и контролем доступа. 

Чтобы обеспечить безопасную аутентификацию с помощью OIDC, важно принять меры по предотвращению MitM-атак, кражи токенов, CSRF-атак, фишинговых атак и небезопасного хранения токенов доступа. Следуя рекомендованным мерам по исправлению, безопасность аутентификации на основе OIDC может быть значительно повышена. 

Книги и ссылки 

Вот несколько книг и ссылок, связанных с OpenID Connect (OIDC): 

“OAuth 2.0: начало работы в области безопасности веб-API” Маттиаса Била: В этой книге рассматриваются основы OAuth 2.0 и OIDC и даются практические рекомендации по их внедрению в веб-приложения. 

“Упрощенный OAuth 2.0” Аарона Пареки: Это бесплатная онлайн-книга, которая предоставляет простое и понятное введение в OAuth 2.0 и OIDC. 

“OpenID Connect в действии” Прабата Сиривардены: Эта книга представляет собой всеобъемлющее руководство по внедрению OIDC в веб-приложениях и охватывает такие темы, как потоки аутентификации, управление токенами и соображения безопасности. 

Эти ресурсы могут стать хорошей отправной точкой для изучения и внедрения OpenID Connect. 

Другие Услуги

Готовы к безопасности?

Связаться с нами