OAuth2 Knihovny a SDK

Doporučené knihovny pro integraci OAuth2 autentizace kdo.je do vaší aplikace

Úvod

kdo.je OAuth 2.0 server je kompatibilní se standardními OAuth 2.0 a OpenID Connect knihovnami. Na této stránce naleznete doporučené knihovny pro různé platformy a jazyky, které zjednoduší implementaci OAuth autentizace ve vaší aplikaci.

Před začátkem: Ujistěte se, že máte zaregistrovanou OAuth aplikaci v sekci Moje aplikace a máte k dispozici client_id (a případně client_secret). Podrobný popis OAuth flow naleznete v OAuth2 dokumentaci.

Frontend (JavaScript/TypeScript)

Pro single-page aplikace (SPA), mobilní webové aplikace a frontend autentizaci.

oidc-client-ts Doporučeno

github.com/authts/oidc-client-ts

Moderní TypeScript knihovna pro OpenID Connect a OAuth2 autentizaci. Oficiální nástupce oidc-client-js s lepší podporou TypeScript a moderními funkcemi.

Výhody:
  • Plná podpora TypeScript
  • Automatická podpora PKCE (doporučeno pro public clients)
  • Funguje i bez discovery endpointu (manuální konfigurace)
  • Podpora Silent Refresh (automatické obnovení tokenů)
  • Aktivní vývoj a komunita
  • Framework agnostic (React, Vue, Angular, vanilla JS)
Instalace:
npm install oidc-client-ts
Použití:
import { UserManager } from 'oidc-client-ts';

const userManager = new UserManager({
  authority: 'https://www.kdo.je',
  client_id: 'your-client-id',
  redirect_uri: 'https://yourapp.com/callback',
  response_type: 'code',
  scope: 'openid profile email',
  automaticSilentRenew: true,

  // Protože kdo.je nemá discovery endpoint, použijte manuální konfiguraci:
  metadata: {
    authorization_endpoint: 'https://www.kdo.je/oauth/authorize',
    token_endpoint: 'https://www.kdo.je/oauth/token',
    userinfo_endpoint: 'https://www.kdo.je/oauth/userinfo',
    revocation_endpoint: 'https://www.kdo.je/oauth/revoke'
  }
});

// Zahájit přihlášení
await userManager.signinRedirect();

// Zpracovat callback
const user = await userManager.signinRedirectCallback();

// Získat access token
const currentUser = await userManager.getUser();
const accessToken = currentUser?.access_token;
Doporučeno pro:
  • React, Vue, Angular SPA aplikace
  • TypeScript projekty
  • Public clients (bez server-side komponenty)

@auth0/auth0-spa-js

github.com/auth0/auth0-spa-js

Knihovna od Auth0 pro single-page aplikace. Přestože je od Auth0, funguje s jakýmkoliv OAuth2 serverem včetně kdo.je.

Výhody:
  • Jednoduchá API a konfigurace
  • Skvělá dokumentace a příklady
  • Optimalizováno pro SPA aplikace
  • Automatické PKCE
  • Token caching a refresh
Instalace:
npm install @auth0/auth0-spa-js
Doporučeno pro:
  • Single-page aplikace s jednoduchou konfigurací
  • Projekty preferující Auth0 ekosystém

AppAuth-JS

github.com/openid/AppAuth-JS

Oficiální JavaScript SDK od OpenID Foundation. Implementace OAuth 2.0 a OpenID Connect best practices.

Výhody:
  • Oficiální implementace od OpenID Foundation
  • Striktní dodržování RFC standardů
  • Podpora PKCE
  • Podpora mobilních aplikací (React Native, Cordova)
Instalace:
npm install @openid/appauth
Doporučeno pro:
  • Mobilní aplikace (React Native, Cordova)
  • Projekty vyžadující striktní RFC compliance

Backend (.NET/C#)

Pro server-side aplikace, ASP.NET Core webové aplikace a API.

Microsoft.AspNetCore.Authentication.OpenIdConnect Doporučeno

NuGet Package

Oficiální Microsoft knihovna pro OpenID Connect autentizaci v ASP.NET Core aplikacích. Perfektní integrace s ASP.NET Core autentizačním systémem.

Výhody:
  • Oficiální Microsoft balíček
  • Nativní integrace s ASP.NET Core
  • Automatická správa cookie session
  • Podpora PKCE, refresh tokenů
  • Funguje s jakýmkoliv OIDC serverem
  • Skvělá dokumentace
Instalace:
dotnet add package Microsoft.AspNetCore.Authentication.OpenIdConnect
Konfigurace v Program.cs:
builder.Services.AddAuthentication(options =>
{
  options.DefaultScheme = "Cookies";
  options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
  options.Authority = "https://www.kdo.je";
  options.ClientId = "your-client-id";
  options.ClientSecret = "your-client-secret";
  options.ResponseType = "code";
  options.UsePkce = true;
  options.SaveTokens = true;
  options.GetClaimsFromUserInfoEndpoint = true;

  options.Scope.Add("openid");
  options.Scope.Add("profile");
  options.Scope.Add("email");

  // kdo.je nemá discovery endpoint, použijte manuální konfiguraci:
  options.RequireHttpsMetadata = true;
  options.MetadataAddress = null; // zakázat auto-discovery
  options.Configuration = new OpenIdConnectConfiguration
  {
    AuthorizationEndpoint = "https://www.kdo.je/oauth/authorize",
    TokenEndpoint = "https://www.kdo.je/oauth/token",
    UserInfoEndpoint = "https://www.kdo.je/oauth/userinfo"
  };
});

// Middleware
app.UseAuthentication();
app.UseAuthorization();
Použití v Razor Pages:
// Pages/Login.cshtml.cs
public class LoginModel : PageModel
{
  public IActionResult OnGet()
  {
    return Challenge(new AuthenticationProperties
    {
      RedirectUri = "/"
    }, "oidc");
  }
}

// Získání přihlášeného uživatele
var userName = User.Identity?.Name;
var email = User.FindFirst("email")?.Value;
Doporučeno pro:
  • ASP.NET Core webové aplikace (Razor Pages, MVC)
  • Confidential clients (aplikace s backend serverem)
  • Aplikace vyžadující cookie-based autentizaci

IdentityModel

NuGet Package  |  GitHub

Low-level OAuth 2.0 a OpenID Connect klientská knihovna. Ideální pro API-to-API komunikaci, machine-to-machine autentizaci a pokročilé scénáře.

Výhody:
  • Flexibilní low-level API
  • Podpora discovery dokumentu
  • Token introspection a revocation
  • Client credentials flow
  • Device authorization flow
  • PKCE support
Instalace:
dotnet add package IdentityModel
Příklad - Token request:
using IdentityModel.Client;

var client = new HttpClient();

// Token request
var tokenResponse = await client.RequestAuthorizationCodeTokenAsync(new AuthorizationCodeTokenRequest
{
  Address = "https://www.kdo.je/oauth/token",
  ClientId = "your-client-id",
  ClientSecret = "your-client-secret",
  Code = authorizationCode,
  RedirectUri = "https://yourapp.com/callback",
  CodeVerifier = codeVerifier // pro PKCE
});

if (!tokenResponse.IsError)
{
  var accessToken = tokenResponse.AccessToken;
  var refreshToken = tokenResponse.RefreshToken;
}
Příklad - UserInfo request:
var userInfoResponse = await client.GetUserInfoAsync(new UserInfoRequest
{
  Address = "https://www.kdo.je/oauth/userinfo",
  Token = accessToken
});

var userName = userInfoResponse.Claims.FirstOrDefault(c => c.Type == "name")?.Value;
Doporučeno pro:
  • API-to-API autentizace
  • Background services a daemon aplikace
  • Pokročilé OAuth scénáře
  • Client credentials flow
  • Projekty vyžadující granulární kontrolu nad OAuth flow

Příklady konfigurace

React (s oidc-client-ts)

// AuthProvider.tsx
import { UserManager, WebStorageStateStore } from 'oidc-client-ts';

const oidcConfig = {
  authority: 'https://www.kdo.je',
  client_id: 'your-react-app-client-id',
  redirect_uri: window.location.origin + '/callback',
  post_logout_redirect_uri: window.location.origin,
  response_type: 'code',
  scope: 'openid profile email',
  automaticSilentRenew: true,
  userStore: new WebStorageStateStore({ store: window.localStorage }),
  metadata: {
    authorization_endpoint: 'https://www.kdo.je/oauth/authorize',
    token_endpoint: 'https://www.kdo.je/oauth/token',
    userinfo_endpoint: 'https://www.kdo.je/oauth/userinfo',
    revocation_endpoint: 'https://www.kdo.je/oauth/revoke'
  }
};

export const userManager = new UserManager(oidcConfig);

ASP.NET Core API (Bearer token autentizace)

// Pro API, které přijímá JWT tokeny od kdo.je
builder.Services.AddAuthentication("Bearer")
  .AddJwtBearer("Bearer", options =>
  {
    options.Authority = "https://www.kdo.je";
    options.TokenValidationParameters = new TokenValidationParameters
    {
      ValidateAudience = true,
      ValidAudience = "https://www.kdo.je",
      ValidateIssuer = true,
      ValidIssuer = "https://www.kdo.je",
      ValidateLifetime = true
    };
  });

Discovery Endpoint

Nově dostupné! kdo.je OAuth server nyní poskytuje OpenID Connect Discovery endpoint na adrese /.well-known/openid-configuration. Knihovny mohou automaticky zjistit všechny potřebné endpointy a konfigurace je tak mnohem jednodušší!

Dostupné Discovery endpointy:

  • GET https://www.kdo.je/.well-known/openid-configuration - OpenID Connect Discovery Document
  • GET https://www.kdo.je/.well-known/jwks.json - JSON Web Key Set s veřejnými RSA klíči pro RS256
RS256 Signing: kdo.je OAuth server používá asymetrické podepisování tokenů algoritmem RS256. Veřejný klíč je dostupný přes JWKS endpoint, což umožňuje distribuovanou validaci tokenů bez sdílení tajných klíčů.

Použití s automatickým discovery:

// Konfigurace S discovery endpointem (FUNGUJE!):
const userManager = new UserManager({
  authority: 'https://www.kdo.je', // automaticky načte /.well-known/openid-configuration
  client_id: 'your-client-id',
  redirect_uri: 'https://yourapp.com/callback',
  response_type: 'code',
  scope: 'openid profile email'
  // metadata sekce už není potřeba! ✅
});
Poznámka: I když je discovery endpoint dostupný, můžete stále používat manuální konfiguraci endpointů (sekce metadata), pokud preferujete větší kontrolu nad konfigurací.

Příklad ASP.NET Core s automatickým discovery:

// Automatické načtení konfigurace z discovery endpointu
builder.Services.AddAuthentication("Bearer")
  .AddJwtBearer("Bearer", options =>
  {
    options.Authority = "https://www.kdo.je";
    options.RequireHttpsMetadata = true;
    // Automaticky načte JWKS z /.well-known/jwks.json
    options.TokenValidationParameters = new TokenValidationParameters
    {
      ValidateIssuer = true,
      ValidateAudience = true,
      ValidateLifetime = true
    };
  });
Další zdroje

Dokumentace:

Pokud máte jakékoli dotazy nebo problémy s integrací, kontaktujte nás na support@kdoje.cz