======= Service Provider: HowTo Shibboleth ======= \\ ====== Protocollo SAML2 ====== Le informazioni seguenti sono ad uso e consumo del referente tecnico che amministra il Service Provider Shibboleth ===== Informazioni ===== * EntityID dell’IdP: https://shibidp.unipr.it/idp/shibboleth * Metadata dell‘IdP: https://shibidp.unipr.it/idp/shibboleth * L’elenco degli attributi veicolati attraverso le asserzioni SAML sono * **Per tutti gli entityID** * attributeID="transientId" * attributeID="eduPersonTargetedID" * attributeID="eduPersonAffiliation" * attributeID="eduPersonScopedAffiliation"\\ * **Per gli entityID del tipo *.unipr.it** * attributeID="uniprID" * attributeID="uid" * attributeID="sn" * attributeID="givenName" * attributeID="mail" * attributeID="locality" * attributeID="server" * attributeID="principal" * attributeID="matricola" * attributeID="categoria" * attributeID="corsolaurea" * attributeID="uniprStudDip" * attributeID="codSISA" * attributeID="eduPersonPrimaryAffiliation" * attributeID="codicefiscale" * attributeID="uniprId" * attributeID="organizationalUnit" Lato Service Provider configurare opportunamente l'attribute-map.xml per recepire gli attributi rilasciati:\\ * transientID viene codificato lato Idp nel seguente modo: nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" * eduPersonTargetedID -> * eduPersonAffiliation -> * eduPersonScopedAffiliation -> * uniprID -> * uid -> * sn -> * givenName -> * mail -> * locality -> * server -> * principal viene codificato nel seguente modo lato IdP: nameFormat="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" * matricola -> * categoria -> * corsolaurea -> * uniprStudDip -> * codSISA -> * eduPersonPrimaryAffiliation -> * codicefiscale -> * uniprID -> * organizationalUnit -> Per tutti gli entityID non riferiti al dominio unipr.it occorre concordare il rilascio degli attributi, che saranno filtrati e rilasciati in maniera puntuale da parte del nostro IdP. ===== Istruzioni ===== - Caricare il Metadata dell'IdP, reperibile al paragrafo precedente - Comunicare all'Area Sistemi Informativi il metadata dell'SP via email: - destinatario email: sistemitecnologici.infrastrutture@unipr.it - il metadata può essere comunicato in uno dei seguenti modi: - inserendolo come allegato in formato compresso - indicando l'URL per il download nel corpo del messaggio - Nel caso di entityID non riferito a dominio unipr.it, richiedere gli attributi necessari da rilasciare al vostro SP. - Requisiti: - **Le asserzioni devono essere firmate e cifrate**, pertanto includere in linea nel Metadata del proprio SP i certificati per la firma e la crittografia. ===== Riferimenti ===== * https://shibboleth.atlassian.net/wiki/spaces/SP3/overview?homepageId=2058387896 ====== Protocollo OpenID Connect (OIDC) ====== OpenID Connect Issuer: https://shibidp.unipr.it OIDC Discovery (come da specifiche [[https://openid.net/specs/openid-connect-discovery-1_0.html]]):\\ [[https://shibidp.unipr.it/.well-known/openid-configuration ]] default scope: openid email profile ===== Registrazione relying party (RP) ===== Il gestore del RP deve fornire il Metadata in formato JSON: ^ Nome chiave ^ Tipo del valore ^ Descrizione ^ | client_id | string | Identificatore OIDC client per l'RP | | response_types | array of strings | Tipologia risposte del client (obbligatorio id_token) | | scope | string | Lista degli scope che rilasciano i claim | | redirect_uris | array of strings | URL di redirezione per la response verso RP | Esempio: { "redirect_uris":["httpq://www.esempio.it/secure/redirect_uri"], "client_id":"lamiapp01", "client_secret":"stringaalfanumericasegreta", "response_types":["id_token"], "grant_types":["authorization_code"], "scope": "openid email profile spid" } ^ scope ^ claims - OP identifier ^ claims - oidc names ^ transcoder ^ | openid | subject | sub | OIDCStringTranscoder | | profile | displayName, sn, givenName, codiceFiscale | name, family_name. given_name, codicefiscale | OIDCStringTranscoder | | spid | unipr_spid_email, spidName, spidFamilyName, spidCode, spidFiscalNumber, externalIDPLoA, externalIDPType, spid_shib_authnctx_class | unipr_spid_email, spidName, spidFamilyName, spidCode, spidFiscalNumber, externalIDPLoA, externalIDPType, spid_shib_authnctx_class | OIDCStringTranscoder | | email | mail | email | OIDCStringTranscoder | Esempio: ["OIDC_CLAIM_email"]=> string(25) "riccardo.cappone@unipr.it" ["OIDC_CLAIM_spid_shib_authnctx_class"]=> string(30) "https://www.spid.gov.it/SpidL2" ["OIDC_CLAIM_externalIDPLoA"]=> string(4) "LoA3" ["OIDC_CLAIM_family_name"]=> string(7) "CAPPONE" ["OIDC_CLAIM_iat"]=> string(10) "1709631164" ["OIDC_CLAIM_exp"]=> string(10) "1709634764" ["OIDC_CLAIM_name"]=> string(16) "Riccardo CAPPONE" ["OIDC_CLAIM_auth_time"]=> string(10) "1709631164" ["OIDC_CLAIM_spidName"]=> string(8) "RICCARDO" ["OIDC_CLAIM_spidFamilyName"]=> string(7) "CAPPONE" ["OIDC_CLAIM_codicefiscale"]=> string(16) "CPPRCR74P19Z112J" ["OIDC_CLAIM_eduPersonScopedAffiliation"]=> string(44) "member@unipr.it staff@unipr.it alum@unipr.it" ["OIDC_CLAIM_aud"]=> string(11) "sptestunipr" ["OIDC_CLAIM_sid"]=> string(33) "_2be7419256300bfc12ae5386638b8287" ["OIDC_CLAIM_spidFiscalNumber"]=> string(16) "CPPRCR74P19Z112J" ["OIDC_CLAIM_nonce"]=> string(43) "I3nOHwGpLWh2whVI-7LBsoPWhxAHo7PEW-VYUuc7GXw" ["OIDC_CLAIM_unipr_spid_email"]=> string(25) "riccardocappone@gmail.com" ["OIDC_CLAIM_given_name"]=> string(8) "Riccardo" ["OIDC_CLAIM_externalIDPType"]=> string(4) "spid" ["OIDC_CLAIM_spidCode"]=> string(14) "NAMI0007649168" ["OIDC_CLAIM_iss"]=> string(24) "https://shibidp.unipr.it" ["OIDC_CLAIM_sub"]=> string(32) "TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU" ===== Flusso autorizzativo adottato dal nostro OP ===== response_type => id_token In questa modalità è attivo solamente l'Authorization Endpoint che dopo l'autenticazione rilascerà l'ID Token comprensivo dei claim sottoscritti dagli scope. La durata dell'ID Token è 1h. {{:guide_pubbliche:howto:identity:response_type_id_token.png?600|}} ====== Protocollo OpenID Connect (OIDC) via reverse proxy riservato a Relying Party UNIPR ====== Il servizio di autenticazione basato su protocollo OIDC (OpenID Connect via OAuth2) servito via reverse proxy è riservato esclusivamente ai Relying Party UNIPR (su dominio unipr.it). In vista della disattivazione del protocollo CAS, questo middleware semplifica notevolmente l'autenticazione presso il nostro Identity Provider, mettendo a disposizione dei service provider l'intera filiera di autenticazione 'a costo zero', senza cioè il bisogno da parte degli sviluppatori dei servizi web, di gestire il processo di autenticazione. ===== Modalità di richiesta ===== Inviare una richiesta a helpdesk.informatico@unipr.it richiedendo che il proprio servizio web possa avvalersi del middleware di autenticazione OIDC mediato dal reverse proxy UNIPR. Nella richiesta è opportuno indicare se l'intera risorsa debba essere protetta da autenticazione ("/"), oppure solo una o più location specifiche ("/secure", "/percorso/specifico/") Quando la richiesta verrà accolta e lavorata, il sito web sarà automaticamente sottoposto ad autenticazione e protetto da certificato TLS. ===== Architettura ===== {{:guide_pubbliche:howto:identity:architettura_reverse_oidc3.png?600 |}} ===== Attributi disponibili post autenticazione ===== ==== Autenticazione con credenziali di Ateneo ==== Headers disponibili [X-Remote-Sub] => TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU [X-Remote-Familyname] => ROSSI [X-Remote-Givenname] => Mario [X-Remote-Externalidploa] => LoA2 [X-Remote-Codicefiscale] => RSSMAR74P19Z112J [X-Remote-Name] => Mario ROSSI [X-Remote-Email] => mario.rossi@unipr.it In php -> $_SERVER ["HTTP_X_REMOTE_SUB"]=> string(32) "TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU" ["HTTP_X_REMOTE_FAMILYNAME"]=> string(7) "ROSSI" ["HTTP_X_REMOTE_GIVENNAME"]=> string(8) "Mario" ["HTTP_X_REMOTE_EXTERNALIDPLOA"]=> string(4) "LoA2" ["HTTP_X_REMOTE_CODICEFISCALE"]=> string(16) "RSSMAR74P19Z112J" ["HTTP_X_REMOTE_NAME"]=> string(16) "Mario ROSSI" ["HTTP_X_REMOTE_EMAIL"]=> string(25) "mario.rossi@unipr.it" ==== Autenticazione con SPID ==== Headers disponibili [X-Remote-Sub] => TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU [X-Remote-Familyname] => ROSSI [X-Remote-Givenname] => Mario [X-Remote-Externalidptype] => spid [X-Remote-Externalidploa] => LoA3 [X-Remote-Codicefiscale] => RSSMAR74P19Z112J [X-Remote-Name] => Mario ROSSI [X-Remote-Email] => mario.rossi@unipr.it In php -> $_SERVER ["HTTP_X_REMOTE_SUB"]=> string(32) "TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU" ["HTTP_X_REMOTE_FAMILYNAME"]=> string(7) "ROSSI" ["HTTP_X_REMOTE_GIVENNAME"]=> string(8) "Mario" ["HTTP_X_REMOTE_EXTERNALIDPTYPE"]=> string(4) "spid" ["HTTP_X_REMOTE_EXTERNALIDPLOA"]=> string(4) "LoA3" ["HTTP_X_REMOTE_CODICEFISCALE"]=> string(16) "RSSMAR74P19Z112J" ["HTTP_X_REMOTE_NAME"]=> string(16) "Mario ROSSI" ["HTTP_X_REMOTE_EMAIL"]=> string(25) "mario.rossi@unipr.itt"