Аутентификация

Приложения Fedora, требующие аутентификации, должны поддерживать Fedora Account System на базе FreeIPA в качестве поставщика удостоверений.

Fedora Account System поддерживает fasjson как API только для чтения, OpenID Connect, OAuth 2.0 и другое.

Аутентификация

Все новые приложения должны использовать OpenID Connect для аутентификации пользователей.

Раньше мы поддерживали OpenID 2.0, но теперь он устарел и будет удалён.

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

При запросе токена доступа в OAuth 2.0 клиентам разрешено указывать scope токена доступа. Этот scope указывает, для чего разрешено использовать токен. В большинстве случаев ваше приложение должно требовать собственный scope или scopes, чтобы пользователи могли выдавать токены доступа, которые можно использовать только с конкретным приложением. Для этого обратитесь к странице аутентификации в Wiki.

OpenID Connect требует запроса scope "openid". Несоблюдение этого приведёт к неопределённому поведению.

Библиотеки

Authlib

Authlib — это библиотека Python для создания серверов и клиентов OAuth и OpenID Connect. Она имеет слои интеграции для Flask и Django в качестве серверов и клиентов протокола, а также слои интеграции клиента для Requests, HTTPX, Starlette и FastAPI. Как клиентское приложение, аутентифицирующееся через OpenID Connect, она наиболее полезна, если нужно поддерживать несколько поставщиков аутентификации (например, социальные сети).

Flask-OIDC

Flask-OIDC — это расширение Flask, которое упрощает использование Authlib при работе с Flask только с одним поставщиком аутентификации (например, с поставщиком удостоверений Fedora).

OAuthLib

OAuthLib — это низкоуровневая реализация OAuth 2.0 с поддержкой OpenID Connect. Она не привязана к какому-либо фреймворку HTTP-запросов. Как правило, вы будете использовать эту библиотеку только косвенно. Если вы изучаете эту библиотеку, обратите внимание, что это библиотека как для клиентов OAuth, так и для поставщиков OAuth. Наибольший интерес для вас представляет подпакет OAuth client.

Requests-OAuthlib

Requests-OAuthlib использует библиотеку Requests вместе с OAuthLib для предоставления простого в использовании интерфейса для клиентов OAuth 2.0. Если вам нужно добавить поддержку в приложение, для которого нет расширения для OAuthLib, вам следует использовать эту библиотеку.

Flask-OAuthlib

Flask-OAuthlib — это расширение Flask, построенное поверх Requests-OAuthlib. Оно поставляется с множеством примеров в каталоге examples репозитория. Приложения Flask в инфраструктуре Fedora должны использовать это расширение, если нет веской причины этого не делать (и эта причина задокументирована здесь).

Pyramid-OAuthLib

Pyramid-OAuthLib — это расширение Pyramid, использующее OAuthlib. Похоже, оно не активно поддерживается, но это разумная отправная точка для наших немногочисленных приложений на Pyramid.

Mozilla-Django-OIDC

Mozilla-Django-OIDC — это расширение Django для OpenID Connect.

Поток

Это схема классического потока аутентификации OpenID Connect.

FASJSON

Данные учётных записей хранятся в FreeIPA, но предоставляются пользователям и приложениям через FASJSON в виде REST API с ответами в формате JSON.

Аутентификация в FASJSON выполняется с помощью Kerberos keytab для приложений и Kerberos-билета для пользователей.

Ниже показан поток запроса к FASJSON, объясняющий, как он проксирует запросы к IPA.