Jak službu k Proxy IdP připojím¶
- Table of contents
- Jak službu k Proxy IdP připojím
- OpenID Connect
- SAML2
Proxy IdP podporuje dva protokoly pro připojení služeb – *OpenID Connect* a *SAML2*.
OpenID Connect - je podporován nativně
SAML2 - je podporován přes SP
OpenID Connect¶
OpenID Connect neboli OIDC je rozšíření autorizačního protokolu OAuth 2 o autentizaci a APIpro získávání informací o uživateli. Z hlediska aplikací je OIDC obdoba SAML2, ale:
- není nutná výměna metadat mezi IdP a SP
- uživatel si sám volí, která osobní data aplikaci zpřístupní
- aplikace nejsou omezené na web (mohou být mobilní, desktopové, command-line, SmartTV)
Postup připojení služby k Proxy IdP¶
1) Registrace klienta (aplikace) probíhá na adrese https://login.cesnet.cz/oidc/- V levém menu v kolonce Developer vybrat Self-service client registration, kliknout na tlačítko + New Client.
- V záložce Main zadat v Redirect URI (s) URL končící na /oauth2callback
- V záložce Access zvolit potřebné Scopes.
- Uložit a poznamenat si Client ID, Client Secret a Registration Access Token.
- Název služby
- Stručný popis služby
- Kontaktní email (preferujeme neosobní e-maily)
- Client ID (získané při registraci)
- Produkční/testovací služba
- Privacy Policy Url (pro produkční služby)
- Požadované scopes spolu s odůvodněním. Veškeré dostupné scopes jsou popsány níže
3) Vyčkat na mailové potvrzení.
4) Pro službu bude v systému Perun vytvořena facility a žadatel bude přiřazen jako správce.
Služba bude poskytnuta do VO einfra jako resource. Správce VO einfra může na resource přiřazovat skupiny,
což znamená, že členové těchto skupin budou mít přístup na službu. Přístup na službu tedy v případě potřeby mohou mít
všichni členové VO einfra. Informace o členství v přiřazených skupinách se bude přenášet na službu v claimu eduperson_entitlement.
Jinak řečeno pokud služba potřebuje informace o členství ve skupinách, je potřeba vytvořit seznam skupin, které službu zajímají. Služba si musí specifikovat, z jaké VO chce skupiny dostávat (pokud nestačí výchozí VO einfra), a následně předat managerovi dané VO seznam požadovaných skupin. Manager VO má právo přidělit na resource skupiny, které se poté budou posílat službě.
OpenID Connect Scopes¶
viz Atributy vydávané Proxy IdP#Scopes-dostupné-pomocí-protokolu-OpenID-Connect
Webová služba na Apache serveru¶
implementace klienta (aplikace) lze přes následující modul mod_auth_openidc
https://github.com/zmartzone/mod_auth_openidc/releases/
Instalace modulu přes terminál v Debianu 10¶
apt install apache2 libapache2-mod-auth-openidc
Aktivace modulu přes terminál¶
Příkaz pro aktivaci mod_auth_openidc (vyžaduje root, vytvoří linky v /etc/apache2/mods-enabled/ pro auth_openidc.load a auth_openidc.conf):
a2enmod auth_openidc
pozn.: V případě odezvy terminálu “Module auth_openidc already enabled” je již modul zapnut
V případě potřeby si terminál vyžádá restart apache, který lze provést příkazem:
systemctl restart apache2
Příklad konfigurace v Apache¶
# metadata OIDCProviderMetadataURL https://login.cesnet.cz/oidc/.well-known/openid-configuration OIDCProviderMetadataRefreshInterval 3600 OIDCClientID b2bc0708-ec82-418b-a727-42526a99f29c OIDCClientSecret Eowd2VeXuJ88eFpaEowd2VeXuJ88eFpaEowd2VeXuJ88eFpa # požadované scopes OIDCScope "openid email profile address phone eduperson_entitlement" # do REMOTE_USER se dá obsah claimu sub s identifikátorem EINFRA (jinak je to sub@iss) OIDCRemoteUserClaim sub # timeout pro neaktivní session, default je 300 vteřin OIDCSessionInactivityTimeout 3600 # timeout pro používanou session, default je 28800 vteřin OIDCSessionMaxDuration 86400 # náhodná hodnota pro šifrování cookies a cache OIDCCryptoPassphrase VeXuJ88eFpaEowd2Ve #odkomentujte, pokud chcete vynutit přihlašování přes konkrétní IdP, v tomto případě MUNI #OIDCPathAuthRequestParams acr_values=urn:cesnet:proxyidp:idpentityid:https://idp2.ics.muni.cz/idp/shibboleth #neexistující URL pro zpracování návratu z OIDC serveru OIDCRedirectURI "/oauth2callback" <Location /oauth2callback> AuthType openid-connect Require valid-user </Location> # zavolání /oauth2callback?info=json v prohlížeči zobrazí data z userinfo pro debugování OIDCInfoHook userinfo # chráněná URL, může kdokoliv přihlášený <Location /cgi-bin/> AuthType openid-connect Require valid-user </Location> # chráněná URL, můžou jen zaměstnanci CESNETu, kteří poskytli identifikátor, jméno a emailovou adresu <Location /myapp/> AuthType openid-connect <RequireAll> Require claim "eduperson_entitlement:urn:geant:cesnet.cz:group:cesnet:Employees#perun.cesnet.cz" Require claim "sub~.+" Require claim "name~.+" Require claim "email~.+" </RequireAll> </Location>
Další volby modulu jsou v souboru /etc/apache2/mods-available/auth_openidc.conf, případně v https://github.com/zmartzone/mod_auth_openidc/blob/master/auth_openidc.conf
Pro nastavení autorizace viz- https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#logic
- https://github.com/zmartzone/mod_auth_openidc/wiki/Authorization
Přihlášení přes OIDC¶
Schéma komunikace mezi prohlížečem, aplikací a OIDC serverem při přihlášení:
0) Aplikace se zaregistruje u autorizačního serveru (OIDC provider) a získá své client_id a client_secret, což je obdoba jména a hesla pro aplikaci
1) Uživatel přístoupí na aplikaci
2) Webový prohlížeč je přeposlán na authorization endpoint. Sem se posílá client_id a seznam požadovaných scopes (povolení). Jeden scope povoluje přístup k více claims (údajům o uživateli)
3) Proběhne autentizace uživatele
4) Uživatel si vybere, která scopes (povolení) chce aplikaci přidělit
5) Aplikace získá access_code představující souhlas uživatele
6) + 7) Aplikace se přihlásí k autorizačnímu serveru svým client_id a client_secret a vymění access_code za access_token
8) Žádost aplikace o atributy uživatele
9) + 10) Resource server si ověří jaké údaje může uživateli vydat na základě povolených scopes
11) Předání claims uživatele aplikaci
Dostupné implementace OIDC Relying Party (OAuth2 client), ke kterým jsme schopni poskytnout konzultaci:
- modul do webserveru Apache - mod_auth_openidc https://github.com/zmartzone/mod_auth_openidc/releases/
- JavaScriptová knihovna - oidc-client-js https://github.com/IdentityModel/oidc-client-js/
SAML2¶
Security Assertion Markup Language 2.0 je verze standardu SAML pro výměnu autorizačních dat
mezi poskytovatelem identit a poskytovatelem služby. SAML 2.0 je protokol založený na jazyku XML.
Poskytovatel identit, Identity Provider (IdP)
IdP si v sobě uchovává autoritativní informace o uživatelích.
Dále provádí autentizaci uživatelů a předává informace o uživatelích (například jméno, e-mail, afiliace).
Poskytovatel služby, Service Provider (SP)
SP poskytuje službu uživatelům.
Deleguje autentizaci uživatelů na IdP a konzumuje dodatečná data o uživatelích dodané IdP (například jméno, e-mail, afiliace).
Postup připojení služby k Proxy IdP¶
1) Odeslat mail na login@cesnet.cz s následujícími položkami:- Název služby
- Stručný popis služby
- Kontaktní email (preferujeme neosobní e-maily)
- SAML2 metadata, není-li služby již registrovaná v eduID.cz nebo eduGAIN entityID, je-li služba registrovaná v eduID.cz nebo eduGAIN
- Produkční/testovací služba
- Privacy Policy Url (pro produkční služby)
- Požadované atributy spolu s odůvodněním. Veškeré dostupné atributy jsou popsány níže
2) Stáhnout si metadata IdP z Proxy IdP z URL: https://login.cesnet.cz/proxy/saml2/idp/metadata.php?output=xhtml
3) Vyčkat na mailové potvrzení.
4) Pro službu bude v systému Perun vytvořena facility a žadatel bude přiřazen jako správce.
Služba bude poskytnuta do VO einfra jako resource. Správce VO einfra může na resource přiřazovat skupiny,
což znamená, že členové těchto skupin budou mít přístup na službu. Přístup na službu tedy v případě potřeby mohou mít
všichni členové VO einfra. Informace o členství v přiřazených skupinách se bude přenášet na službu v claimu eduPersonEntitlement.
Jinak řečeno pokud služba potřebuje informace o členství ve skupinách, je potřeba vytvořit seznam skupin, které službu zajímají. Služba si musí specifikovat, z jaké VO chce skupiny dostávat (pokud nestačí výchozí VO einfra), a následně předat managerovi dané VO seznam požadovaných skupin. Manager VO má právo přidělit na resource skupiny, které se poté budou posílat službě.
SAML2 atributy¶
Sociální poskytovatelé identit¶
Jedná se o dočasné umístění dokumentace pro bridge pro sociální poskytovatele identit.
Bridge zajišťuji překlad mezi autentizačním mechanismem sociálního poskytovatele identit
a protokolem SAML2.
Registrace služby k sociálním IdP¶
1) Odeslat mail na login@cesnet.cz s následujícími položkami:- Název služby
- Popis služby
- Kontaktní email (preferujeme neosobní e-maily)
- SAML2 metadata
- Produkční/testovací služba
- Privacy Policy Url (pro produkční služby)
- Požadované atributy spolu s odůvodněním, dostupné atributy viz níže
2) Stáhnout si metadata Proxy IdP z https://login.cesnet.cz/proxy/saml2/idp/metadata.php?output=xhtml
3) Vyčkat na mailové potvrzení
Dostupné atributy¶
eduPersonPrincipalName - obsahuje identifikátor uživatele u sociálního providera viz níže
displayName
mail
schacHomeOrganization - viz níže
Google¶
Metadata: https://login.cesnet.cz/google/saml2/idp/metadata.php?output=xhtml
Identitikátor uživatele: <Google ID>@google.extidp.cesnet.cz
schacHomeOrganization: google.com
Facebook¶
Metadata: https://login.cesnet.cz/facebook/saml2/idp/metadata.php?output=xhtml
Identitikátor uživatele: <Targeted Facebook ID>@facebook.extidp.cesnet.cz
schacHomeOrganization: facebook.com
LinkedIn¶
Metadata: https://login.cesnet.cz/linkedin/saml2/idp/metadata.php?output=xhtml
Identitikátor uživatele: <LinkedIn ID>@linkedin.extidp.cesnet.cz
schacHomeOrganization: linkedin.com
ORCID¶
Metadata: https://login.cesnet.cz/orcid/saml2/idp/metadata.php?output=xhtml
Identitikátor uživatele: <ORCID ID>@orcid.extidp.cesnet.cz
schacHomeOrganization: orcid.org
Federované přihlášení¶
Ukázkové schéma, jak uživatel přistoupí ke službě přes protokol SAML2 při přihlášení přes Proxy IdP.
1) Přístup na službu
2) Služba si vyžádá přihlášení uživatele
3) a 4) Uživatel je odkázán na Discovery Service
5) Uživatel je odkázán na přihlašovací formulář vybrané organizace
6) Předání atributů z organizace na Proxy IdP
7) Získání atributů o uživateli ze systému Perun
8) Předání obou sad atributů službě
Discovery Service
Discovery Service (DS) automatické zjišťování zařízení a služeb nabízených v počítačové síti.
Poznámka:
Dostupné implmentace, ke kterým jsme schopni poskytnout konzultaci:
Shibboleth https://www.shibboleth.net/products/service-provider/
SimpleSAMLphp https://simplesamlphp.org
Příklady federací¶
Mesh Federace
Hub and Spoke Federace
Další užitečné kapitoly¶
Vlastnosti Proxy IdP
Služby poskytované Proxy IdP
________________________________________________________________________________________