public Token RequestToken(IAuthenticationRequest tokenRequest) { // Check that we're accessing a valid organization from the CrmDiscoveryService Web service. if (String.IsNullOrEmpty(tokenRequest.OrganizationName)) { OrganizationDetail orgInfo = GetOrganizationDetail(); tokenRequest.OrganizationName = orgInfo.OrganizationName; } // Retrieve a CrmTicket from the CrmDiscoveryService Web service. RetrieveCrmTicketResponse crmTicketResponse = GetCrmTicketResponse(tokenRequest); if (crmTicketResponse == null) { // user not found, try default credentials IAuthenticationRequest defaultTicketRequest = GetDefaultTicketRequest(); crmTicketResponse = GetCrmTicketResponse(defaultTicketRequest); } // user not found at all, throw exception if (crmTicketResponse == null) { InvalidCredentialsException ex = new InvalidCredentialsException(); ex.Data.Add("Username", tokenRequest.DomainName + @"\" + tokenRequest.Username); throw ex; } CrmAuthenticationToken crmToken = GetCrmAuthenticationToken(tokenRequest, crmTicketResponse); return(new Token(crmToken, crmTicketResponse.OrganizationDetail.CrmServiceUrl)); }
private RetrieveCrmTicketResponse GetCrmTicketResponse(IAuthenticationRequest tokenRequest) { // Retrieve a CrmTicket from the CrmDiscoveryService Web service. RetrieveCrmTicketRequest crmTicketRequest = new RetrieveCrmTicketRequest(); crmTicketRequest.OrganizationName = tokenRequest.OrganizationName; crmTicketRequest.UserId = tokenRequest.DomainName + @"\" + tokenRequest.Username; crmTicketRequest.Password = Globals.UnwrapSecureString(tokenRequest.Password); RetrieveCrmTicketResponse crmTicketResponse = null; try { crmTicketResponse = (RetrieveCrmTicketResponse)_disco.Execute(crmTicketRequest); } catch (SoapException se) { // examine SoapException for authentication failure } catch (Exception ex) { AddExceptionData(ex, tokenRequest); throw; } return(crmTicketResponse); }
private CrmAuthenticationToken GetCrmAuthenticationToken(IAuthenticationRequest tokenRequest, RetrieveCrmTicketResponse ticket) { Int32 authenticationType; #if DEBUG_AuthOverride authenticationType = Globals.CrmServiceSettings.DeploymentType; #else if (String.IsNullOrEmpty(tokenRequest.DomainName)) { // this is a CRM user, don't authenticate with their credentials authenticationType = Globals.CrmServiceSettings.DeploymentType; } else { // this is a domain user, authenticate via AD authenticationType = AuthenticationType.AD; } #endif CrmAuthenticationToken sdkToken = new CrmAuthenticationToken() { AuthenticationType = authenticationType, OrganizationName = ticket.OrganizationDetail.OrganizationName, CrmTicket = ticket.CrmTicket }; return(sdkToken); }