4.1.3. Registrace klienta¶
Pro komunikaci se službou MojeID přes protokol OpenID Connect je potřeba zaregistrovat klienta (službu) na serveru MojeID. Je možné využít buď ruční, či automatické registrace. Automatická registrace je vhodná pro dynamicky vytvářené klienty (JS, mobilní zařízení) a ruční registrace je vhodná pro serverové klienty.
4.1.3.1. Ruční registrace¶
Ruční registraci lze provést na adrese https://mojeid.cz/consumer_admin/. V případě testovací instance MojeID na adrese https://mojeid.regtest.nic.cz/consumer_admin/. Na stejné adrese lze pak spravované klienty i upravovat či mazat. Takto vytvoření klienti mají dobu platnosti nastavenou na neurčito. Specifikace jednotlivých položek lze nalézt v dokumentaci protokolu OpenID Connect (https://openid.net/specs/openid-connect-registration-1_0.html#ClientMetadata).
Příklad ruční registrace klienta v testovací instanci MojeID:
U libovolného účtu, který vytvoříte v testovací instanci MojeID, přejděte po přihlášení na https://mojeid.regtest.nic.cz/consumer_admin/.
Přejděte na odkaz
Založení nové služby
. Vyplňte požadované položkyNázev klienta
,Seznam URI
a klikněte na tlačítkoUložit
.V seznamu spravovaných služeb se vytvoří záznam s ID klienta.
Pro získání
Client secret / Tajemství klienta
přejděte v nově přidané službě na odkazAktualizovat
.Zobrazí se stránka pro editaci nastavení ‒
Tajemství klienta
najdete v posledním řádku zobrazeného formuláře.
4.1.3.2. Automatická registrace¶
Podrobnosti lze nalézt v dokumentaci protokolu OpenID Connect (https://openid.net/specs/openid-connect-registration-1_0.html). O potřebná nastavení by se měla postarat použitá knihovna. Takto vytvořené registrace vyprší po uplynutí 24 hodin, ale je možné je prodlužovat (viz Změna registrace).
Pozor: automatickou (dynamickou) registraci nelze využít pro Plný přístup.
Příklad registrace klienta s použitím knihovny:
from oic.oic.consumer import Consumer
client = Consumer(SessionDB(URL), OIC_CONFIG, client_config=OIC_CLIENT_CONFIG)
client.redirect_uris = URL + client.consumer_config['authz_page']
provider_info = client.provider_config(ISSUER)
client.register(provider_info["registration_endpoint"], response_types='code', client_name=MY_CLIENT_NAME)
Příklad registračního dotazu:
POST /oidc/registration HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: mojeid.cz
{
"application_type": "web",
"redirect_uris":
["https://client.example.org/callback",
"https://client.example.org/callback2"],
"client_name": "My Example",
"logo_uri": "https://client.example.org/logo.png",
"token_endpoint_auth_method": "client_secret_post"
}
Příklad odpovědi serveru na registrační dotaz:
HTTP/1.1 201 Created
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"client_id": "s6BhdRkqt3",
"client_secret": "ZJYCqe3GGRvdrudKyZS0XhGv_Z45DuKhCUk0gBR1vZk",
"client_secret_expires_at": 1577858400,
"registration_access_token": "MY.SECRET.REGISTRATION.ACCESS.TOKEN",
"registration_client_uri": "https://mojeid.cz/oidc/registration?client_id=s6BhdRkqt3",
"token_endpoint_auth_method": "client_secret_post",
"application_type": "web",
"redirect_uris":
["https://client.example.org/callback",
"https://client.example.org/callback2"],
"client_name": "My Example",
"logo_uri": "https://client.example.org/logo.png"
}
Poznámka
Vyřízení registrace a získání Client ID a Client Secret lze provést
i bez knihovny, stačí třeba poslat dotaz POST přes curl
.
Příklad:
curl --data '{"redirect_uris": "https://navratova-adresa.cz",
"client_name": "Název služby"}' https://mojeid.cz/oidc/registration/
Registrace umožňuje také s registrací klienta asociovat metadata (viz Client Metadata ve specifikaci),
takže si poskytovatel může nadefinovat např. název a ikonu služby,
konkrétně atributy client_name
, logo_uri
, případně client_uri
.
4.1.3.2.1. Informace o registraci¶
Součástí odpovědi serveru MojeID na provedenou registraci je i adresa URL, na které lze získat aktuální informace
o registraci (konfigurační endpoint registration_client_uri
), a přístupový kód (registration_access_token
).
Při dotazu GET na tuto adresu URL je nutné se autentifikovat pomocí přístupového kódu. Ten je nutné zahrnout do
hlavičky Authorization
požadavku HTTP.
Odpověď serveru je ve stejném formátu jako odpověď při registraci a obsahuje aktuální informace o vašem klientovi na našem serveru.
4.1.3.2.2. Změna registrace¶
Pomocí výše uvedeného konfiguračního endpointu je možné i editovat některé informace o registrovaném klientovi.
Pro konfiguraci je nutné použít dotaz POST, opět doplněný o registration_access_token
v hlavičce Authorization
.
Formát požadavku je stejný jako v případě registrace a stejné je i jeho zpracování na serveru s následujícími výjimkami:
Není možné změnit registrované
redirect_uri
aclient_id
.Hodnota
client_secret
je ignorována. V případě přítomnosti položky v dotazu je vygenerován novýclient_secret
. Ten je zaslán v odpovědi na konfigurační dotaz.
Příklad konfiguračního dotazu, který zajistí vygenerování nového
client_secret
a změnu logo_uri
a policy_uri
.
POST /oidc/registration?client_id=MYCLIENTID HTTP/1.1
Accept: application/json
Host: mojeid.cz
Authorization: Bearer MY.SECRET.REGISTRATION.ACCESS.TOKEN
{
"client_secret": null,
"logo_uri": "https://client.example.org/another-logo.png",
"policy_uri": "https://client.example.org/policy-page"
}
Odpověď serveru na konfigurační dotaz je stejná jako odpověď na registrační dotaz a obsahuje aktuální informace o vašem klientovi na našem serveru.