Com certeza este código é bem útil, porém, muito extenso se precisarmos de um recurso para uma versão de autenticação específica, como por exemplo a [Federation - IFD].
Por exemplo, como saber se o meu CRM IFD vai expirar? Neste sentido segue uma classe para nos ajudar a identificar quando o [Token] vai expirar.
Crie a classe [DiscoveryServiceHelper]
using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Client; using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel.Description; using System.Text; public class DiscoveryServiceHelper { public static string GetProxy(string url) { string httpAux = url.Substring(0, url.IndexOf("//") + 2); string urlAux = url.Replace(httpAux, ""); string urlAux_part1 = urlAux.Substring(0, urlAux.IndexOf("/") + 1); string urlAux_part2 = url.Substring(url.IndexOf("XRMServices")); urlAux_part2 = urlAux_part2.Replace("Organization.svc", "Discovery.svc"); string discoveryURL = httpAux + urlAux_part1 + urlAux_part2; return discoveryURL; } public static bool HasCRMProxyExpired(string url, ClientCredentials credentials) { string discoveryURL = GetProxy(url); IServiceManagement<IOrganizationService> serviceManagement; serviceManagement = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(discoveryURL)); AuthenticationCredentials authCredentials = new AuthenticationCredentials(); authCredentials.ClientCredentials = credentials; AuthenticationCredentials tokenCredentials = serviceManagement.Authenticate(authCredentials); var expired = (tokenCredentials.SecurityTokenResponse != null && DateTime.Now.AddMinutes(15) >= tokenCredentials.SecurityTokenResponse.Response.Lifetime.Expires.Value.ToLocalTime()); return expired; } }
E utilize o método [HasCRMProxyExpired] para descobrir isto. Neste exemplo o código detecta 15 minutos antes se o token vai expirar.
P.S.: Não esqueça de adicionar as bibliotecas [System.ServiceModel.dll], [System.IdentityModel.dll] e [Microsoft.IdentityModel.dll] no seu projeto do Visual Studio. Uma maneira rápida de instalação do WIF (Windows Identity Foundation) é via NuGet do VS, usando o comando: Install-Package Microsoft.IdentityModel. Você pode também habilitá-lo via Painel de Controle -> Programas e Recursos -> Ativar ou desativar recursos do Windows -> Windows Identity Foundation 3.5 .
Ref: Helper code: ServerConnection class
Cheers!