Ma A Cosa Server Il CrmImpersonator???

Nell'SDK del CRM viene spiegato come autenticarsi al server crm, ma spesso si ottiene un errore http 401...

...questo perche' spesso ci si dimentica una cosa fondamentale: da dove ci si connette.

Infatti i metodi di autenticazione si dividono in

  • AD
  • SPLA
  • Windows Live
Ma la connessione puo' avvenire da:

  • Applicazioni o siti esterni al CRM
  • Pagine custom pubblicate all'interno del sito del crm (senza applicazioni web o directory virtuali)



Nel caso di applicazioni esterne e con installazioni IFD bisogna passare le credenziali e fin qui tutto normale. Il problema nasce quando si e' all'interno di pagine aspx richiamate da personalizzaizoni del CRM (es.: pulsanti custom). In questo caso non si hannon le credenziali dell'utente, ma bisogna passarle dal contesto http del CRM.

Ora quando si e' all'esterno valgono i meccanismi elencati nell'SDK con l'apertura della connessione ai servizi web previa generazione rispettivamente del token, del ticket, e dellla policy.
Quando pero' ci si connette da una pagina aspx pubblicata nel sito crm bisogna stare attenti all'impersonificazione.
Per implementare l'impersonificazione bisogna sempre usare le DefaultCreadentials!
Se siamo in ottica AD il token per l'autenticazione viene fornito dal contesto (metodo ExtractAuthenticationToken) 
Se invece siamo in IFD bisogna fare in modo che l'utente impersonificato sia sempre quello del pool di applicazioni che, facendo parte del gruppo AD PrivUserGroup, viene autorizzato (in caso contrario si riceve il famoso 401).
Per fare cio' bisogna primariamente inserire l'url nel modo corretto a seconda che ci si trovi al di fuori della lan o al suo interno. Di solito gli url delle pagine custom vengono espressi con link relativi del tipo "/isv/app/pagina.aspx". Quando si e' in IFD e' meglio usare la funzione js PrePendOrgName.
Poi, come si e' detto, usare sempre le DefaultCredentials. In questo modo pero' se si e' da fuori e l'autenticazione non avviene quindi in IIS, si impersonifica l'utente del pool di applicazioni, ma se si e' all'interno della lan viene impesonificato l'utente AD perche' l'autenticazione viene eseguita da IIS e cio' non va bene per un'installazione IFD (==>si ottiene 401).
A questo punto interviene il CrmImpersonator che invece riporta l'utente del thread a quello del pool di applicazioni eliminando l'errore.

Morale: quando si usa una pagina aspx pubblicata all'interno del sito del CRM in un'installazione IFD usare sempre:

  • CrmImpersonator
  • DefaultCredentials
  • ExtractAuthenticationToken


ATTENTIONE: quando si pubblicano pagine custom in un'installazione IFD evitare di creare nuove directory virtuali o applicazioni web e di eliminare tramite web.config i moduli http di autenticazione (CrmAuthentication) e di mapping del nome dell'organizzazione (MapOrg), altrimenti e' come se la pagina fosse su un sito esterno e l'impersonificazione non funziona!

Dettagli...