in provisioning/provisioning-device-client/src/main/java/com/microsoft/azure/sdk/iot/provisioning/device/internal/task/RegisterTask.java [278:331]
private RegistrationOperationStatusParser authenticateWithDPS() throws ProvisioningDeviceClientException, SecurityProviderException
{
if (securityProvider.getRegistrationId() == null)
{
throw new ProvisioningDeviceClientException(new IllegalArgumentException("registration id cannot be null"));
}
try
{
SSLContext sslContext = securityProvider.getSSLContext();
if (sslContext == null)
{
throw new ProvisioningDeviceSecurityException("Null SSL Context received from security client");
}
authorization.setSslContext(sslContext);
if (this.securityProvider instanceof SecurityProviderX509)
{
RequestData requestData = new RequestData(securityProvider.getRegistrationId(), sslContext, true, this.provisioningDeviceClientConfig.getPayload());
log.info("Authenticating with device provisioning service using x509 certificates");
return this.authenticateWithX509(requestData);
}
else if (this.securityProvider instanceof SecurityProviderTpm)
{
SecurityProviderTpm securityProviderTpm = (SecurityProviderTpm) securityProvider;
if (securityProviderTpm.getEndorsementKey() == null || securityProviderTpm.getStorageRootKey() == null)
{
throw new ProvisioningDeviceSecurityException(new IllegalArgumentException("Ek or SRK cannot be null"));
}
//SRS_RegisterTask_25_009: [ If the provided security client is for Key then, this method shall save the SSL context to Authorization if it is not null and throw ProvisioningDeviceClientException otherwise. ]
RequestData requestData = new RequestData(securityProviderTpm.getEndorsementKey(), securityProviderTpm.getStorageRootKey(), securityProvider.getRegistrationId(), sslContext, null, this.provisioningDeviceClientConfig.getPayload());
log.info("Authenticating with device provisioning service using tpm");
return this.authenticateWithTPM(requestData);
}
else if (this.securityProvider instanceof SecurityProviderSymmetricKey)
{
RequestData requestData = new RequestData(securityProvider.getRegistrationId(), sslContext, null, this.provisioningDeviceClientConfig.getPayload());
log.info("Authenticating with device provisioning service using symmetric key");
return this.authenticateWithSasToken(requestData);
}
else
{
throw new ProvisioningDeviceSecurityException("Unknown Security client received");
}
}
catch (SecurityProviderException | IOException | InterruptedException e)
{
throw new ProvisioningDeviceSecurityException(e);
}
}