Whenever our custom application attempts to connect to a system set up with IFD, we receive this error. "The user authentication failed!". This application works in every scenario except with IFD.
private void WorkerFunction() { OrganizationServiceProxy serviceProxy; IOrganizationService service; //Create Connection
ServerConnection serverConnect = new ServerConnection(); ServerConnection.Configuration config = serverConnect.GetServerConfiguration(new Uri(myCRMService).Authority, myCRMuser, myCRMpass, myCRMdomain, myCRMOrgName); using (serviceProxy = new OrganizationServiceProxy(config.OrganizationUri, config.HomeRealmUri, config.Credentials, config.DeviceCredentials)) { serviceProxy.EnableProxyTypes(); // This statement is required to enable early-bound type support. service = (IOrganizationService)serviceProxy; //code
//code
//code
}
}
//Build Credentials
public class Configuration
{
public String ServerAddress;
public String OrganizationName;
public Uri DiscoveryUri;
public Uri OrganizationUri;
public Uri HomeRealmUri;
public ClientCredentials DeviceCredentials;
public ClientCredentials Credentials;
public AuthenticationType EndpointType;
}
public List<Configuration> configurations = null; private Configuration config = new Configuration(); public virtual Configuration GetServerConfiguration(string URL, string userName, string password, string domain, string org) { if (URL.EndsWith(".dynamics.com")) //online { //config.DiscoveryUri = new Uri("https://dev." + URL + "/XRMServices/2011/Discovery.svc"); config.DiscoveryUri = new Uri("https://" + URL + "/XRMServices/2011/Discovery.svc"); config.DeviceCredentials = GetDeviceCredentials(); config.OrganizationUri = new Uri("https://" + org + ".api.crm.dynamics.com/XRMServices/2011/Organization.svc"); // Get the target organization. } else //onPremise or IFD { config.DiscoveryUri = new Uri("https://" + URL + "/XRMServices/2011/Discovery.svc"); //config.DiscoveryUri = new Uri("http://" + URL + "/XRMServices/2011/Discovery.svc"); config.OrganizationUri = GetOrganizationAddress(config.DiscoveryUri); // Get the target organization. } config.Credentials = new ClientCredentials(); if (GetServerType(config.DiscoveryUri) == AuthenticationProviderType.ActiveDirectory) { config.Credentials.Windows.ClientCredential = new System.Net.NetworkCredential(userName, password, domain); } else if (GetServerType(config.DiscoveryUri) == AuthenticationProviderType.LiveId) { config.Credentials.UserName.UserName = userName; config.Credentials.UserName.Password = password; } else if (GetServerType(config.DiscoveryUri) == AuthenticationProviderType.Federation) { config.Credentials.UserName.UserName = userName; config.Credentials.UserName.Password = password; } if (configurations == null) configurations = new List<Configuration>(); //Store the completed configuration. configurations.Add(config); return config; }
EDIT: So as I'm researching, I'm learning more about claims based authentication and I'm having trouble finding good examples of code on how to create and use claims. Can anybody point me in the right direction? Also, do I need to use Windows Identity Foundation if this application runs on the same machine as CRM?