OpenID Connect (OIDC)
Зачем
Аутентификация для обеспечения информационной безопасности.
Термины
- OpenID Connect Provider (OP) - Identity Provider
- User
- Client - ИС
- Confidential
- Public
- Claims
- Scope - права Client
- OAuth2
- Authorization Server
- Resource Server
- Resource Owner
Flow-Grant
Client type — тип клиента, от которого зависит способ взаимодействия с ним. Тип клиента определяется его возможностью безопасно хранить свои учётные данные для авторизации — токен. Поэтому существует всего 2 типа клиентов:
- Confidential — клиент, который может безопасно хранить свои учётные данные. Например, к такому типу клиентов относят web-приложения, имеющие backend.
- Public — не может безопасно хранить свои учётные данные. Этот клиент работает на устройстве владельца ресурса, например, это браузерные или мобильные приложения.
Flow also called Grants:
- Confidential - machine to machine communication
- Authentication Flow=Authorization Code Flow - using a browser and server BackEnd
- Client Credentials Flow - client_secret храниться на клиенте BackEnd
- Public - GUI с участием User
- Authorization Code Flow with PKCE
- Implicit Flow legacy
- Device authorization
Параметры Flow
Основные параметры Flow
- Аутентификация Client через OpenID Connect Provider (IDP)
- IdToken - IdentityToken (формат JWT обязателен) (OIDC) - for authenticating a user. A JWT token used to represent the identity of the user.
- TokenEndpoint - получаем IdentityToken
- ClientId
- ClientSecret
- Хранится на BackEnd и передается в Authentication Flow
- в Implicit Flow не хранится в SPA, JS и не передается
Identity Token
Структура Payload:
- обязательные
- iss: “http://my-domain.auth0.com” - идентификатор эмитента (сервера авторизации), источника ответа; реги-строзависимый URL-адрес, использующий схему https; содержит схему, хост и опционально компоненты номера порта и пути, но не компоненты запроса или фрагмента
-
sub: “auth0 123456” - Уникальный идентификатор пользователя - aud: “1234abcdef” - равно client_id - ИС запращивающая доступ, аудитория, для которой предназначен данный ID токен, должна содержать идентификатор client_id;
- exp: 1311281970 - срок действия (UNIX format)
- iat: 1311280970 - дата время выдачи токена (UNIX format)
- scope: openid - These are the scopes that bind to user attributes(claims). You can use OIDC scopes to limit access user’s attributes. – nonce: - равно значению параметра nonce, в запросе аутентификации. Серверу авторизации следует включать этот параметр, если значение параметра nonce присутствует в соответствующем запросе аутентификации
- опциональные
- Custom User Claims – azp: идентификатор клиента стороны, для которого был выпущен ID токен.
Deployment
- Redirect
- Client application requires centralized session management across applications.
- SSO is implicit (if in IAM session is created, SSO is implemented for other resources).
- VueJS SPA example
- PHP keycloak JS
- Embedded Sign-In Widget, authentication SDK, or direct API calls
- Full control over application customization is a key requirement.
- There is a slightly increased risk in security due to IAM not being able to guarantee that the Sign-In Widget has been implemented correctly. VueJS SPA Okta Auth0 Auth.js example VueJS SPA Okta Widget example BackEnd Spring SPA Azure ADFS example