Strumenti Utente

Strumenti Sito


guide_pubbliche:howto:identity:shibbolethsp_config

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
guide_pubbliche:howto:identity:shibbolethsp_config [2024/04/09 11:29]
riccardo.cappone@unipr.it [Architettura]
guide_pubbliche:howto:identity:shibbolethsp_config [2024/10/25 07:45] (versione attuale)
riccardo.cappone@unipr.it [Table]
Linea 39: Linea 39:
       * attributeID="​uniprId"​       * attributeID="​uniprId"​
       * attributeID="​organizationalUnit"​       * attributeID="​organizationalUnit"​
 +
 +  * samlSubjectID => urn:​oasis:​names:​tc:​SAML:​attribute:​subject-id
 +  * samlPairwiseID => urn:​oasis:​names:​tc:​SAML:​attribute:​pairwise-id
 +
  
 Lato Service Provider configurare opportunamente l'​attribute-map.xml per recepire gli attributi rilasciati:​\\ Lato Service Provider configurare opportunamente l'​attribute-map.xml per recepire gli attributi rilasciati:​\\
Linea 63: Linea 67:
   * uniprID -> <​Attribute name="​urn:​oid:​1.3.6.1.4.14657.1.1.3.42"​ id="​uniprID"/>​   * uniprID -> <​Attribute name="​urn:​oid:​1.3.6.1.4.14657.1.1.3.42"​ id="​uniprID"/>​
   * organizationalUnit -> <​Attribute name="​urn:​oid:​2.5.4.11"​ id="​organizationalUnit"/>​   * organizationalUnit -> <​Attribute name="​urn:​oid:​2.5.4.11"​ id="​organizationalUnit"/>​
 +
 +  * samlSubjectID => urn:​oasis:​names:​tc:​SAML:​attribute:​subject-id
 +  * samlPairwiseID => urn:​oasis:​names:​tc:​SAML:​attribute:​pairwise-id
 +
 +Riferimenti:​ [[https://​wiki.idem.garr.it/​wiki/​SAML-Subject-ID-Attribute]]
  
 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. 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.
Linea 99: Linea 108:
  
 ===== Registrazione relying party (RP) ===== ===== Registrazione relying party (RP) =====
-Il gestore del RP deve fornire ​il Metadata in formato JSON:+Il gestore del RP deve fornire ​tutti i redirect URI che verranno registrati lato OP nel Metadata in formato JSON:
  
-^  Nome chiave ​   ^  Tipo del valore ​ ^  Descrizione ​                                          ^ +^  Nome chiave ​   ^  Tipo del valore ​ ^  Descrizione ​                                     ​| ​                           | 
-| client_id ​      | string ​           | Identificatore OIDC client per l'​RP ​                   +| client_id ​      | string ​           | Identificatore OIDC client per l'​RP ​              | fornito da UNIPR           | 
-| response_types ​ | array of strings ​ | Tipologia risposte del client (obbligatorio ​id_token) ​ +| client_secret ​  | string ​           | Valore alfanumerico che funge da password ​        | fornito da UNIPR           
-| scope           | string ​           | Lista degli scope che rilasciano i claim               ​+| response_types ​ | array of strings ​ | Tipologia risposte ​da parte dell'​endpoint ​del OP  | id_token ​(implicit flow  ​
-| redirect_uris ​  | array of strings ​ | URL di redirezione per la response verso RP            |+| scope           | string ​           | Lista degli scope che rilasciano i claim          | openid email profile spid  ​
 +| redirect_uris ​  | array of strings ​ | URL di redirezione per la response verso RP       | fornito da RP              ​|
  
 Esempio: Esempio:
  
   {   {
-    "​redirect_uris":​["​httpq://​www.esempio.it/​secure/​redirect_uri"​],​+    "​redirect_uris":​["​https://​www.esempio.it/​secure/​redirect_uri"​],​
     "​client_id":"​lamiapp01",​     "​client_id":"​lamiapp01",​
     "​client_secret":"​stringaalfanumericasegreta",​     "​client_secret":"​stringaalfanumericasegreta",​
Linea 120: Linea 130:
 ^ scope    ^ claims - OP identifier ​                                                                                                            ^ claims - oidc names                                                                                                                ^ transcoder ​           ^ ^ scope    ^ claims - OP identifier ​                                                                                                            ^ claims - oidc names                                                                                                                ^ transcoder ​           ^
 | openid ​  | subject ​                                                                                                                           | sub                                                                                                                                | OIDCStringTranscoder ​ | | openid ​  | subject ​                                                                                                                           | sub                                                                                                                                | OIDCStringTranscoder ​ |
-| profile ​ | displayName,​ sn, givenName, codiceFiscale ​                                                                                         | name, family_name. given_name, codicefiscale ​                                                                                      ​| OIDCStringTranscoder ​ |+| profile ​ | displayName,​ sn, givenName, codiceFiscale, matricola ​                                                                              | name, family_name. given_name, codicefiscale, matricola ​                                                                           ​| 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 ​ | | 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 ​ | | email    | mail                                                                                                                               | email                                                                                                                              | OIDCStringTranscoder ​ |
Linea 149: Linea 159:
   ["​OIDC_CLAIM_codicefiscale"​]=>​   ["​OIDC_CLAIM_codicefiscale"​]=>​
   string(16) "​CPPRCR74P19Z112J"​   string(16) "​CPPRCR74P19Z112J"​
 +  ["​OIDC_CLAIM_matricola"​]=>​
 +  string(6) "​12345678"  ​
   ["​OIDC_CLAIM_eduPersonScopedAffiliation"​]=>​   ["​OIDC_CLAIM_eduPersonScopedAffiliation"​]=>​
   string(44) "​member@unipr.it staff@unipr.it alum@unipr.it"​   string(44) "​member@unipr.it staff@unipr.it alum@unipr.it"​
Linea 175: Linea 187:
   ​   ​
 ===== Flusso autorizzativo adottato dal nostro OP ===== ===== Flusso autorizzativo adottato dal nostro OP =====
-response_type => id_token+response_type => id_token ​(implicit flow)
   ​   ​
 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. 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.
Linea 181: Linea 193:
  
 {{:​guide_pubbliche:​howto:​identity:​response_type_id_token.png?​600|}} {{:​guide_pubbliche:​howto:​identity:​response_type_id_token.png?​600|}}
 +
 +===== OIDC client di esempio sviluppato in PhP =====
 +[[guide_pubbliche:​howto:​identity:​oidc_client|Esempio di OIDC client scritto in PhP]]
 +
 +
 +https://​wiki.asi.unipr.it/​dokuwiki/​doku.php?​id=guide_pubbliche:​howto:​identity:​oidc_client
 +
 +
 +\\
 +\\
 +\\
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  
Linea 191: Linea 224:
  
 ===== Modalità di richiesta ===== ===== Modalità di richiesta =====
-Inviare una richiesta a helpdesk.informatico@unipr.it richiedendo che il proprio servizio web possa avvalersi del middleware di autenticazione mediato dal reverse proxy UNIPR. +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/"​)+ 
 +Nella richiesta è opportuno indicare se l'​intera risorsa debba essere protetta da autenticazione ("/"​),​ oppure solo una o più location specifiche ("/​secure",​ "/​percorso/​specifico/"​).\\ 
 + 
 +Infine indicare anche l'​indirizzo IP del backend server (origin server) verso il quale il servizio di reverse proxy eseguirà l'​upstream delle richieste.\\ 
 + 
 +Si ricorda che il reverse proxy effettua TLS offloading, pertanto è obbligatorio accertarsi che il sito di backend non esegua alcun redirect verso https, altrimenti si genera un loop infinito a partire dalla prima richiesta. 
 + 
 +Quando la richiesta verrà accolta e lavorata, il sito web sarà automaticamente sottoposto ad autenticazione e protetto da certificato TLS. 
  
-Se  la richiesta viene accolta e lavorata, il sito web sarà automaticamente sottoposto ad autenticazione e protetto da certificato TLS. 
 ===== Architettura ===== ===== Architettura =====
  
-{{:​guide_pubbliche:​howto:​identity:​architettura_reverse_oidc2.png?600|}}+{{:​guide_pubbliche:​howto:​identity:​revproxyoidc.png?direct&​800|}} 
  
 ===== Attributi disponibili post autenticazione ===== ===== Attributi disponibili post autenticazione =====
Linea 209: Linea 250:
     [X-Remote-Givenname] => Mario     [X-Remote-Givenname] => Mario
     [X-Remote-Externalidploa] => LoA2     [X-Remote-Externalidploa] => LoA2
 +    [X-Remote-Matricola] => 123987
     [X-Remote-Codicefiscale] => RSSMAR74P19Z112J     [X-Remote-Codicefiscale] => RSSMAR74P19Z112J
     [X-Remote-Name] => Mario ROSSI     [X-Remote-Name] => Mario ROSSI
Linea 219: Linea 261:
   string(32) "​TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU"​   string(32) "​TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU"​
   ["​HTTP_X_REMOTE_FAMILYNAME"​]=>​   ["​HTTP_X_REMOTE_FAMILYNAME"​]=>​
-  string(7) "CAPPONE"+  string(7) "ROSSI"
   ["​HTTP_X_REMOTE_GIVENNAME"​]=>​   ["​HTTP_X_REMOTE_GIVENNAME"​]=>​
-  string(8) "Riccardo"+  string(8) "Mario"
   ["​HTTP_X_REMOTE_EXTERNALIDPLOA"​]=>​   ["​HTTP_X_REMOTE_EXTERNALIDPLOA"​]=>​
   string(4) "​LoA2"​   string(4) "​LoA2"​
 +  ["​HTTP_X_REMOTE_MATRICOLA"​]=>​
 +  string(6) "​123987"​
   ["​HTTP_X_REMOTE_CODICEFISCALE"​]=>​   ["​HTTP_X_REMOTE_CODICEFISCALE"​]=>​
-  string(16) "CPPRCR74P19Z112J"+  string(16) "RSSMAR74P19Z112J"
   ["​HTTP_X_REMOTE_NAME"​]=>​   ["​HTTP_X_REMOTE_NAME"​]=>​
-  string(16) "Riccardo CAPPONE"+  string(16) "Mario ROSSI"
   ["​HTTP_X_REMOTE_EMAIL"​]=>​   ["​HTTP_X_REMOTE_EMAIL"​]=>​
-  string(25) "riccardo.cappone@unipr.it"​+  string(25) "mario.rossi@unipr.it"​
 </​code>​ </​code>​
  
Linea 237: Linea 281:
  
     [X-Remote-Sub] => TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU     [X-Remote-Sub] => TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU
-    [X-Remote-Familyname] => CAPPONE +    [X-Remote-Familyname] => ROSSI 
-    [X-Remote-Givenname] => Riccardo+    [X-Remote-Givenname] => Mario
     [X-Remote-Externalidptype] => spid     [X-Remote-Externalidptype] => spid
     [X-Remote-Externalidploa] => LoA3     [X-Remote-Externalidploa] => LoA3
-    [X-Remote-Codicefiscale] => CPPRCR74P19Z112J +    [X-Remote-Codicefiscale] => RSSMAR74P19Z112J 
-    [X-Remote-Name] => Riccardo CAPPONE +    [X-Remote-Name] => Mario ROSSI 
-    [X-Remote-Email] => riccardo.cappone@unipr.it+    [X-Remote-Email] => mario.rossi@unipr.it
 </​code>​ </​code>​
 <​code>​ <​code>​
Linea 251: Linea 295:
   string(32) "​TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU"​   string(32) "​TYFP4PMTLC2VKCSGOCS7QEEPN2I2F4OU"​
   ["​HTTP_X_REMOTE_FAMILYNAME"​]=>​   ["​HTTP_X_REMOTE_FAMILYNAME"​]=>​
-  string(7) "CAPPONE"+  string(7) "ROSSI"
   ["​HTTP_X_REMOTE_GIVENNAME"​]=>​   ["​HTTP_X_REMOTE_GIVENNAME"​]=>​
-  string(8) "Riccardo"+  string(8) "Mario"
   ["​HTTP_X_REMOTE_EXTERNALIDPTYPE"​]=>​   ["​HTTP_X_REMOTE_EXTERNALIDPTYPE"​]=>​
   string(4) "​spid"​   string(4) "​spid"​
Linea 259: Linea 303:
   string(4) "​LoA3"​   string(4) "​LoA3"​
   ["​HTTP_X_REMOTE_CODICEFISCALE"​]=>​   ["​HTTP_X_REMOTE_CODICEFISCALE"​]=>​
-  string(16) "CPPRCR74P19Z112J"+  string(16) "RSSMAR74P19Z112J"
   ["​HTTP_X_REMOTE_NAME"​]=>​   ["​HTTP_X_REMOTE_NAME"​]=>​
-  string(16) "Riccardo CAPPONE"+  string(16) "Mario ROSSI"
   ["​HTTP_X_REMOTE_EMAIL"​]=>​   ["​HTTP_X_REMOTE_EMAIL"​]=>​
-  string(25) "riccardo.cappone@unipr.it"​+  string(25) "mario.rossi@unipr.it"​
 </​code>​ </​code>​