Como integrar uma Aplicação Web num ambiente de CRM com ADFS configurado

De modo a permitir ao cliente um melhor uso da aplicação CRM 2011 sentimos a necessidade da criação de uma Aplicação Web .NET. Com a introdução de IFD (https://technet.microsoft.com/en-us/library/gg188602.aspx) a autenticação via código C# (.NET) envolve mais alguns passos. Em seguida tento descrever todos os passos necessários e explicar como é fácil fazer esta configuração. Em https://msdn.microsoft.com/en-us/library/gg509057.aspx é possível ver algum desses passos mas a informação é pouca ou quase nenhuma. Neste momento estamos a reescrever este artigo de modo que a informação seja mais atualizada e acessível para todos.

Tal como o artigo apresenta existe alguns pré-requisitos necessários para que a aplicação funcione:

- Certificado presente no servidor de CRM e ADFS (Personal Store e Trusted Root Certificate Authorities)

- Windows Identity Foundation SDK instalado (https://www.microsoft.com/en-us/download/details.aspx?id=4451)

- CRM 2011 com IFD configurado (https://technet.microsoft.com/en-us/library/gg188602.aspx)

- Microsoft Visual Studio 2010 ou 2012 instalado.

Sem os passos acima não será possível esta integração.

 

Procedimentos para a integração da Web aplicação com CRM/ADFS:

 

1. Criar uma aplicação Web no IIS (Internet Information Services) (https://msdn.microsoft.com/en-us/library/bb763170(v=vs.100).aspx)

Binding type: HTTPS

Port: (Por exemplo e caso o CRM esteja a utilizar a porta 443) 444

SSL Certificate: Escolher aqui o certificado CRM.

Os certificados Token-decrypting e Token-signing necessitam também de ser adicionados a  Trusted root Certification Authorities no servidor que hospeda a aplicação Web (normalmente costuma ser o servidor de CRM)

ATENÇÃO: O número da porta terá de ser diferente da porta do CRM. Caso contrário e caso experimentem apagar a web aplicação ou modificar o número da porta uma mensagem de aviso poderá aparecer:

Warning message: "The certificate associated with this binding is also assigned to another site's binding. Deleting this binding will cause the HTTPS binding of the other site to be unusable. Do you still want to continue?"

Para contornar este problema existem vários blogs a explicar como faze-lo mas o melhor será contactar um administrador de sistemas pois ao remover podem estragar a aplicação CRM 2011.

 

2. No servidor de DNS é necessário adicionar um HOST(A or AAAA) com o nome da aplicação Web e com o IP do servidor de CRM.

 

3. É recomendado que Application Pool desta Aplicação Web não seja a mesma conta que está a ser utilizada pela aplicação CRM. Por isso será necessário criar uma nova conta na AD (Active Directory).

No servidor de AD a nova conta terá que ter:

Membro de Active Directory Domain Users.

Membro de PrivUserGroup.

Membro de SQLAccessGroup.

Membro de Active Directory Performance Log Users.

 

No servidor de CRM a nova conta terá que ter/ser:

Perfil de Administrador (Administrator user).

Membro de IIS_IUSRS e CRM_WPG.

Permissões de leitura e escrita (full control) sobre o certificado.

Permissões de leitura e escrita (full control) sobre o certificado.

 

4. Download do SDK https://www.microsoft.com/en-us/download/details.aspx?id=24004

 

5. Abrir a solução ExternalCRM.sln presente na pasta: SampleCode\CS\GeneralProgramming\Authentication\IFDSingleSignOn

 

6. Adicionar duas assemblies (referencias) ao projeto: Microsoft.Crm.Sdk.Proxy.dll e Microsoft.Xrm.Sdk.dll (Presentes na pasta bin do SDK).

 

7. Alterar o ficheiro Default.aspx.cs com os valores da sua organização:

 

CrmConnect crmConnect = new CrmConnect(

new Uri("https://boots.smclaims02.com:555/xrmservices/2011/organization.svc"),

new Uri("https://dev.smclaims02.com:555/xrmservices/2011/discovery.svc"),

"Administrator@smclaims02DOM.extest.microsoft.com",

"password");

 

8. Garantir que no ficheiro web.config as linhas em baixo não estão comentadas (name, role e upn)

     
<applicationService>

        <claimTypeRequired>

          <!--Following are the claims offered by STS 'https://adfs.smclaims02.com/adfs/services/trust'. Add or uncomment claims that you require by your application and then update the federation metadata of this application.-->

          <claimType type="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" optional="true" />

          <claimType type="https://schemas.microsoft.com/ws/2008/06/identity/claims/role" optional="true" />

          <claimType type="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" optional="true" />

 

 9. É necessário adicionar a referência STS ao projeto para tal, basta clicar com o botão direito do rato sobre o projeto e escolher a opção “Add STS reference”. Uma nova janela de configuração aparecerá e será necessário preencher alguns campos necessários, tais como:

- Application URI (Nome do web site): (Exemplo) https://nomedoservidor:444/Default.aspx

- STS WS-Federation metadata document location (FederationMetadata XML de ADFS): (Exemplo) https://adfs/FederationMetadata/2007-06/FederationMetadata.xml

- Quando selecionado a opção “Enable encription” será pedido para adicionar o certificado de CRM/ADFS

IMPORTANTE: Depois desta configuração é necessário verificar se o passo 8 ainda contém os três claim type rules (name, role e upn).

 

10. Fazer Build e verificar que não existe nenhum erro de compilação.

 

11. Garantir que se é possível aceder através do Internet Explorer ao FederationMetadata XML da Web aplicação criada.

(Exemplo) https://nomedoservidor:444/FederationMetadata/2007-06/FederationMetadata.xml

 

12. Fazer Publish da Web aplicação diretamente do Visual Studio ou manualmente no IIS (copiando todos os ficheiros contido na pasta do projecto ExternalCRM.sln)

 

13. Por último é necessário ir ao servidor de ADFS e criar uma Relying party para a Web aplicação criada (https://technet.microsoft.com/en-us/library/dd807132(v=ws.10).aspx) e adicionar três regras.

Neste ponto teremos que adicionar ao ficheiro XML com a FederationMetadata do web site

(Exemplo) https://nomedoservidor:444/FederationMetadata/2007-06/FederationMetadata.xml

Para adicionar as três regras à Relying Party teremos que seguir o mesmo procedimento que se fez na configuração de IFD (https://technet.microsoft.com/en-us/library/gg188595.aspx)

Regra 1 (UPN) 

Rule template: Pass Through or Filter an Incoming Claim.

Claim rule name: (Exemplo) “Pass through UPN”

Incoming claim type: UPN.

Activar a opção “Pass through all claim values”.

 

Regra 2 (Primary SID)

Rule template: Pass Through or Filter an Incoming Claim.

Claim rule name: (Exemplo) “Pass through primary SID”.

Incoming claim type: Primary SID.

Activar a opção “Pass through all claim values”.

 

Regra 3 (Windows Account name) 

Rule template: Transform an Incoming Claim

Claim rule name: (Exemplo) “Transform Windows Account name as name”.

Incoming claim type: Windows account name.

Outgoing claim type: Name.

Activar a opção “Pass through all claim values”.

 

14. Ao tentar aceder à página (Exemplo) https://nomedoservidor:444 ser-lhe-á apresentado a seguinte página:

  

 

Espero que estes passos sejam úteis para vocês.

 

Hélio.