Jak službu k Proxy IdP připojím

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 API
pro 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.
2) Po registraci odeslat mail na s následujícími položkami:
  • 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 eduPersonEntitlement.

OpenID Connect Scopes

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
apt install libapache2-mod-auth-openidc

Instalace modulu přes terminál v Debianu 9

Instalace apache (vyžaduje root):

apt install apache2

Instalace aktuální verze z https://github.com/zmartzone/mod_auth_openidc/releases (vyžaduje root):

apt install libjansson4 libhiredis0.13

wget https://github.com/zmartzone/mod_auth_openidc/releases/download/v2.3.11/libcjose0_0.6.1.4-1.stretch+1_amd64.deb
wget https://github.com/zmartzone/mod_auth_openidc/releases/download/v2.3.11/libapache2-mod-auth-openidc_2.3.11-1.stretch+1_amd64.deb

dpkg -i libcjose0_0.6.1.4-1.stretch+1_amd64.deb libapache2-mod-auth-openidc_2.3.11-1.stretch+1_amd64.deb

Spuštění modulu přes terminál

Příkaz pro zapnutí mod_auth_openidc (vyžaduje root):

$ 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 přes příkaz:

$ 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 eduPersonEntitlement" 

# 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

#neexistující URL pro zpracování návratu z OIDC serveru
OIDCRedirectURI "/oauth2callback" 
<Location /oauth2callback>
  AuthType openid-connect
  Require valid-user
</Location>

# 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 "eduPersonEntitlement: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

Federované přihlášení

Ukázkové schéma, jak uživatel přistoupí ke službě přes protokol OIDC při federovaném 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) Přístup 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

Poznámka:
Dostupné implmentace, ke kterým jsme schopni poskytnout konzultaci:
mod_auth_openidc https://github.com/zmartzone/mod_auth_openidc/releases/
JavaScript client 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 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.

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 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 federovaném přihlášení.

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
________________________________________________________________________________________

Tok-atributu.png (66.7 KB) Roman Kružík, 03/12/2019 12:36 PM

Federovane-prihlaseni-OIDC.png (110 KB) Roman Kružík, 03/12/2019 12:36 PM

Mesh-federace.png (140 KB) Martin Kuba, 07/15/2019 02:28 PM

Hub-and-Spoke-federace.png (125 KB) Martin Kuba, 07/15/2019 02:28 PM