public DeviceRegistrationRequest(Guid applicationId, LiveDevice device) : this() { if (null == device) { throw new ArgumentNullException("device"); } this.ClientInfo = new DeviceRegistrationClientInfo() { ApplicationId = applicationId, Version = "1.0" }; this.Authentication = new DeviceRegistrationAuthentication() { MemberName = device.User.DeviceId, Password = device.User.DecryptedPassword }; }
private static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri, DeviceUserName userName) { var text = DeviceIdManager.DiscoverEnvironment(issuerUri); var liveDevice = new LiveDevice { User = userName, Version = 1 }; var registrationRequest = new DeviceRegistrationRequest(applicationId, liveDevice); var deviceRegistrationResponse = DeviceIdManager.ExecuteRegistrationRequest(string.Format(CultureInfo.InvariantCulture, "https://login.live{0}.com/ppsecure/DeviceAddCredential.srf", string.IsNullOrWhiteSpace(text) ? null : ("-" + text)), registrationRequest); if (!deviceRegistrationResponse.IsSuccess) { throw new DeviceRegistrationFailedException((Microsoft.Xrm.Tooling.Connector.DeviceRegistrationErrorCode)deviceRegistrationResponse.Error.RegistrationErrorCode, deviceRegistrationResponse.ErrorSubCode); } DeviceIdManager.WriteDevice(text, liveDevice); return(liveDevice.User.ToClientCredentials()); }
/// <summary> /// Loads the device's credentials from the file system /// </summary> /// <param name="issuerUri">URL for the current token issuer</param> /// <returns>Device Credentials (if set) or null</returns> /// <remarks> /// The issuerUri can be retrieved from the IServiceConfiguration interface's CurrentIssuer property. /// </remarks> public static ClientCredentials LoadDeviceCredentials(Uri issuerUri) { //If the credentials should not be persisted to a file, then they won't be present on the disk. if (!PersistToFile) { return(null); } EnvironmentConfiguration environment = DiscoverEnvironmentInternal(issuerUri); LiveDevice device = ReadExistingDevice(environment); if (null == device || null == device.User) { return(null); } return(device.User.ToClientCredentials()); }
private static ClientCredentials RegisterDevice(Guid applicationId, Uri issuerUri, LiveDevice device) { EnvironmentConfiguration environment = DiscoverEnvironmentInternal(issuerUri); DeviceRegistrationRequest request = new DeviceRegistrationRequest(applicationId, device); string url = string.Format(CultureInfo.InvariantCulture, LiveIdConstants.RegistrationEndpointUriFormat, environment.HostName); DeviceRegistrationResponse response = ExecuteRegistrationRequest(url, request); if (!response.IsSuccess) { bool throwException = true; if (DeviceRegistrationErrorCode.DeviceAlreadyExists == response.Error.RegistrationErrorCode) { if (!PersistToFile) { //If the file is not persisted, the registration will always occur (since the credentials are not //persisted to the disk. However, the credentials may already exist. To avoid an exception being continually //processed by the calling user, DeviceAlreadyExists will be ignored if the credentials are not persisted to the disk. return(device.User.ToClientCredentials()); } else if (PersistIfDeviceAlreadyExists) { // This flag indicates that the throwException = false; } } if (throwException) { throw new DeviceRegistrationFailedException(response.Error.RegistrationErrorCode, response.ErrorSubCode); } } if (PersistToFile || PersistIfDeviceAlreadyExists) { WriteDevice(environment, device); } return(device.User.ToClientCredentials()); }