ncarandini / anpr-dotnet

ANPR .NET SDK
MIT License
0 stars 0 forks source link

ANPR web services - SAML #1

Open Eduardo1977 opened 7 years ago

Eduardo1977 commented 7 years ago

Gent.mo Dott. Carandini, mi sto occupando di ANPR da qualche mese, a parte qualche criticità, è un progetto davvero strategico per la crescita del digitale in Italia. Spero venga portato a termine nel più breve tempo possibile, anche perchè stanno facendo un ottimo lavoro. Premesso che ho già approfondito tutti gli aspetti tecnici che riguardano l'architettura e il funzionamento di ANPR, così come lo studio delle specifiche per utilizzare i vari webservice (soap, saml, wsdl, xsd) e gli standard di sicurezza adottati (WS-SECURITY, token saml, certificati X509), vorrei chiederle aiuto su .Net C#. In particolare, sto cercando di sviluppare in C# un prototipo di client per collegarsi ad ANPR e consumare uno dei tanti webservice di consultazione/estrazione dati, utilizzando il certificato di postazione assegnato al Comune per il quale sto effettuando i test. Ad oggi, sono bloccato sulla parte che deve generare l'asserzione SAML 2.0 da inserire nell'header del messaggio SOAP e vorrei chiederle se potrebbe darmi qualche indicazione utile su come procedere. Andrebbero bene anche riferimenti ad articoli o risorse sul web, in modo da avere una guida sicura. In ogni caso, la ringrazio per l'attenzione e la disponibilità. Cordiali Saluti.

Eduardo Gira

ncarandini commented 7 years ago

Al momento sono in vacanza, ma nel frattempo prova a dare un'occhiata qui: https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/saml-tokens-and-claims

Eduardo1977 commented 7 years ago

Ho cercato e letto decine di articoli in questa settimana, ma questo non lo avevo trovato. Grazie!

Eduardo1977 commented 7 years ago

Buongiorno, credo di aver superato la parte relativa alla generazione dell'asserzione SAML. Ho solo qualche dubbio sull'IdPostazione firmato che secondo le specifiche è : "il Base64 di un PKCS #7 Signed Data e rappresenta il risultato della firma dell’identificativo di postazione, ottenuta con la chiave privata del certificato di postazione. Il PKCS #7 deve includere il certificato per permettere la verifica della firma.".
Per ora sto usando questa procedura dove 'signingCert' è il certificato di postazione .p12 caricato direttamente da file (specificando il percorso) : _string OID_DATA = "1.2.840.113549.1.7.1"; ContentInfo content = new ContentInfo(new Oid( OIDDATA ), dataByte); SignedCms signedCms = new SignedCms(content, true); CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, signingCert); signer.IncludeOption = X509IncludeOption.EndCertOnly; signedCms.ComputeSignature(signer); byte[] signaturePKCS7 = signedCms.Encode(); string IdPostazioneFirmatoPKCS7 = Convert.ToBase64String(signaturePKCS7);

Adesso, invece, sono alle prese con la corretta configurazione dell'App.config (il prototipo client per ora è un'applicazione standalone windowForm). Credo che il binding corretto da utilizzare sia quello di tipo "wsHttpBinding", mentre per il resto ho difficoltà su quali siano le impostazioni necessarie da inserire. Sto provando anche da codice ad impostare la configurazione (serviceModel, client, server, bindings, endpoint, credentials, certificate, ...) ma non funziona. Avrebbe qualche consiglio o riferimento che mi possa aiutare? Grazie

Eduardo1977 commented 6 years ago

Buongiorno @ncarandini , ho qualche dubbio che in visual studio vengano ignorate le "PolicyReference" contenute nel file esterno "policy-X509v3.xml" referenziato nel file WSDL di cui riporto un frammento:

  <wsdlsoap:operation soapAction="" />
  <wsdl:input>
    <wsp:PolicyReference xmlns:wsp="http://www.w3.org/ns/ws-policy" **URI="policy-X509v3.xml"** />
    <wsdlsoap:body use="literal" />
  </wsdl:input>

Il problema si manifesta in .NET appena provo ad aggiungere/aggiornare il riferimento al servizio WSDL di ANPR, che riporta questo avviso:

Avviso dello strumento personalizzato: Un riferimento criteri è stato ignorato perché i criteri con ID 'policy-X509v3.xml' non sono stati trovati. XPath://wsdl:definitions[@targetNamespace='http://sogei.it/ANPR/6001AnprService']/wsdl:binding[@name='AnprBinding6001']/wsdl:operation[@name='emissioneCertificato']/wsdl:input

Premetto che il file "policy-X509v3.xml" si trova nella stessa cartella del WSDL. Quindi, dovrebbe essere corretto referenziarlo con percorso relativo. Comunque, ho fatto diverse prove mettendo nell'URI il percorso assoluto ed anche quello su IIS in localhost. Il risultato è sempre lo stesso. Non è che bisogna metterlo in qualche altra cartella di .NET ? Oppure c'è qualche opzione di configurazione da impostare?