OpenID Connect — je autentizační protokol postavený nad OAuth 2.0, který ke standardní autorizaci přidává vrstvu ověření identity uživatele. Na rozdíl od čistého OAuth 2.0, kde access token poskytuje přístup ke zdrojům bez informací o uživateli, OpenID Connect vrací ID Token — JWT s potvrzenými údaji profilu. Podle údajů OpenID Foundation, 2026 je protokol podporován všemi hlavními Identity Provider — Google, Apple, Microsoft a Auth0.
Hlavní
OpenID Connect (OIDC) — je otevřený autentizační protokol postavený jako vrstva nad OAuth 2.0. Standardizuje to, co v OAuth 2.0 chybělo: ověření identity uživatele. Pokud OAuth 2.0 odpovídá na otázku „která aplikace má přístup?„, pak OIDC odpovídá na otázku „kdo přesně je tento uživatel?„.
Protokol používá ID Token — JSON Web Token (JWT), který obsahuje sadu claims: jedinečný identifikátor subjektu, email, jméno, avatar, časová razítka vydání a vypršení. Klientská aplikace může ID Token kryptograficky ověřit — server podepisuje token pomocí RS256 nebo ES256 a klient kontroluje podpis veřejným klíčem získaným prostřednictvím JWKS endpointu.
Podle údajů Auth0, 2025 používá více než 78 % mobilních aplikací využívajících autentizaci třetí strany OIDC prostřednictvím Google Sign-In nebo Sign in with Apple. To činí protokol de facto standardem pro social login a firemní autentizaci.
OpenID Connect definuje několik toků (flows) v závislosti na typu klienta. Pro mobilní aplikace je standardem Authorisation Code Flow s Proof Key for Code Exchange (PKCE) — poskytuje ochranu i bez client secret na zařízení.
Identity Provider (IdP) — je server, který provádí autentizaci uživatele a vydává tokeny. V ekosystému OIDC poskytuje IdP dva klíčové endpointy: Authorisation Endpoint pro přihlášení uživatele a Token Endpoint pro výměnu kódu za tokeny. Klient zjistí adresy těchto endpointů prostřednictvím Discovery URL — standardní cesty /.well-known/openid-configuration, která vrací JSON dokument s celou konfigurací poskytovatele.
Každý IdP zveřejňuje svůj JWKS (JSON Web Key Set) — sadu veřejných klíčů pro ověření podpisu ID Token. Klient tyto klíče ukládá do mezipaměti a používá je k ověření každého přijatého tokenu bez dotazování na server.
Authorisation Code Flow — je tříkrokový proces. Nejprve mobilní aplikace vygeneruje code verifier (náhodný řetězec o délce 43–128 znaků) a jeho hash — code challenge. Aplikace otevře prohlížeč nebo WebView s URL obsahujícím client_id, redirect_uri, scope (openid profile email) a code challenge. Uživatel zadá přihlašovací údaje na stránce IdP a potvrdí souhlas. IdP přesměruje prohlížeč zpět do aplikace s authorisation code.
Ve druhém kroku aplikace odešle authorisation code, code verifier a client_id na Token Endpoint serveru. Server zkontroluje code verifier proti uloženému code challenge a vrátí ID Token, Access Token a volitelně Refresh Token. Ve třetím kroku aplikace ověří ID Token: validuje podpis prostřednictvím JWKS, zkontroluje issuer (iss), audience (aud) a čas vypršení (exp). Pokud je ověření úspěšné — uživatel je považován za autentizovaného.
PKCE (Proof Key for Code Exchange) eliminuje zranitelnost vlastní standardnímu Authorisation Code Flow u veřejných klientů. Protože mobilní aplikace nemůže bezpečně uložit client secret, útočník, který zachytil authorisation code, by jej mohl vyměnit za tokeny. Code verifier řeší tento problém: i když je kód zachycen, bez původního code verifier je výměna nemožná. OAuth Security Best Practices (RFC 9700) vyžadují PKCE pro všechny veřejné klienty, včetně mobilních aplikací.
OpenID Connect vrací dva zásadně odlišné tokeny: ID Token a Access Token. ID Token — je vždy JWT, který klient může nezávisle přečíst a ověřit. Obsahuje informace o uživateli a slouží k autentizaci, nikoli k přístupu k API.
ID Token se skládá z headeru, payloadu a signature, zakódovaných v Base64 a oddělených tečkami. Header obsahuje alg (algoritmus podpisu) a kid (identifikátor klíče). Payload zahrnuje povinné claims: iss (issuer — vydavatel tokenu), sub (subject — jedinečné ID uživatele), aud (audience — identifikátor klienta), exp (expiration), iat (issued at). Volitelně — name, email, picture, locale.
Příklad dekódovaného payloadu ID Token od Google:
{
"iss": "https://accounts.google.com",
"sub": "1234567890",
"aud": "my-app-123.apps.googleusercontent.com",
"exp": 1812345678,
"iat": 1812342078,
"name": "Ivan Petrov",
"email": "ivan@example.com"
}
Access Token — je neprůhledný token (libovolný řetězec) nebo JWT, který klient předává v API požadavcích. Na rozdíl od ID Token, access token není určen ke čtení klientem — jeho formát a obsah jsou známy pouze serveru zdrojů a autorizačnímu serveru. Access Token má scope — omezení přístupových práv — a krátkou životnost, obvykle 15–60 minut.
OAuth 2.0 — je autorizační rámec, který definuje, jak aplikace získává přístup ke zdrojům uživatele. OpenID Connect — je vrstva, která do tohoto procesu přidává autentizaci. Klíčový rozdíl: OAuth 2.0 nedefinuje formát tokenu a neposkytuje aplikaci způsob, jak zjistit, kdo přesně požadavek provedl.
| Parametr | OAuth 2.0 | OpenID Connect |
|---|---|---|
| Účel | Autorizace přístupu ke zdrojům | Autentizace + autorizace |
| Token identity | Ne | ID Token (JWT) |
| Scope | api:read, api:write | openid, profile, email |
| UserInfo endpoint | Volitelné | Standardizovaný |
| Single Logout | Ne | Specifikace OpenID Connect Session Management |
OpenID Connect je nezbytný, když aplikace potřebuje rozeznat uživatele, nejen získat přístup k jeho datům. Pokud používáte „Přihlásit se přes Google„ nebo „Sign in with Apple„ — to je OIDC. Pokud vaše aplikace volá API třetí strany jménem uživatele bez potřeby znát jeho identitu — stačí čistý OAuth 2.0. Pro firemní systémy s Single Sign-On (SSO) je volba jasná: pouze OpenID Connect, protože poskytuje standardizované odhlášení a správu relací.
Integrace OpenID Connect do mobilní aplikace vyžaduje výběr vhodné knihovny a správné nastavení toku. Pro Android se používá credential manager (AndroidX Credentials) nebo knihovna AppAuth. Pro iOS — framework AuthenticationServices s ASWebAuthenticationSession.
Níže je uveden příklad spuštění Authorisation Code Flow pomocí knihovny AppAuth-Android. Aplikace vytvoří autorizační požadavek, otevře prohlížeč pro přihlášení uživatele a zpracuje callback s tokeny.
val authRequest = AuthorizationRequest.Builder(
serviceConfig,
clientId,
"code",
Uri.parse("com.example.app:/oauth")
)
.setScope("openid profile email")
.build()
val authService = AuthorizationService(this)
val intent = authService.getAuthorizationRequestIntent(authRequest)
startActivityForResult(intent, REQUEST_CODE)
override fun onActivityResult(
requestCode: Int,
resultCode: Int,
data: Intent?
) {
if (requestCode == REQUEST_CODE) {
val response = AuthorizationResponse.fromIntent(data)
if (response?.authorizationCode != null) {
exchangeCodeForTokens(response.authorizationCode)
}
}
}
ASWebAuthenticationSession od Apple poskytuje vestavěný prohlížeč pro OIDC tok s podporou SSO přes iCloud Keychain. Relace se spouští s autorizační URL a callback se zpracovává prostřednictvím completion handleru.
Při výběru knihovny pro OpenID Connect zvažte podporu PKCE přímo z krabice: AppAuth-Android a AppAuth-iOS podporují PKCE ve výchozím nastavení. Firebase Authentication používá OIDC pod kapotou pro Google Sign-In, Sign in with Apple a Microsoft — vývojář nemusí tok implementovat ručně. Pro firemní systémy s vlastním IdP (např. Keycloak nebo Okta) zůstává AppAuth standardní volbou s plnou kontrolou nad konfigurací a zpracováním chyb.
let authURL = URL("https://accounts.google.com/o/oauth2/v2/auth")!
let callbackURL = URL("com.example.app://oauth")!
let session = ASWebAuthenticationSession(
url: authURL,
callbackURLScheme: callbackURL.scheme!
) { url, error in
guard let url = url else { return }
let components = URLComponents(url: url)
let code = components?.queryItems?.first(where: { $0.name == "code" })?.value
if let code = code { exchangeCode(code) }
}
session.start()
Často kladené otázky
OpenID Connect — je vrstva nad OAuth 2.0, která přidává autentizaci. OAuth 2.0 je zodpovědný pouze za autorizaci přístupu ke zdrojům. OIDC zavádí ID Token — JWT s údaji uživatele, standardizuje UserInfo endpoint a přidává možnosti Single Sign-On a odhlášení.
Pro mobilní aplikace se doporučuje Authorisation Code Flow s PKCE. Nevyžaduje client secret, chrání před zachycením authorisation code a je podporován všemi hlavními Identity Provider. Implicit Flow je zastaralý a neměl by být používán v nových projektech.
ID Token se ověřuje ve třech krocích: validace podpisu pomocí veřejného klíče z JWKS endpointu, kontrola claims (iss, aud, exp) a dekódování payloadu. Většina SDK — AppAuth, MSAL, Google Sign-In — provádí toto ověření automaticky při přijetí tokenu.
Scope openid — je povinný parametr, který odlišuje OIDC požadavek od běžného OAuth 2.0. Bez něj server nevrátí ID Token. Další scopy — profile, email, address — určují, které konkrétní claims o uživateli budou zahrnuty do tokenu.
Technicky — ano, prostřednictvím toku Resource Owner Password Credentials, ale nedoporučuje se. Prohlížečový tok zajišťuje izolaci přihlašovacích údajů — aplikace nikdy nevidí heslo uživatele. Apple a Google vyžadují pro své služby autentizaci prostřednictvím prohlížeče.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také