diff --git a/azure-client-authentication/src/main/java/com/microsoft/azure/credentials/ApplicationTokenCredentials.java b/azure-client-authentication/src/main/java/com/microsoft/azure/credentials/ApplicationTokenCredentials.java index 384ab3f7671af..abe3a65c9bdd8 100644 --- a/azure-client-authentication/src/main/java/com/microsoft/azure/credentials/ApplicationTokenCredentials.java +++ b/azure-client-authentication/src/main/java/com/microsoft/azure/credentials/ApplicationTokenCredentials.java @@ -24,6 +24,8 @@ * Token based credentials for use with a REST Service Client. */ public class ApplicationTokenCredentials extends TokenCredentials { + /** The endpoint of the target resource. */ + private String resourceEndpoint; /** The active directory application client id. */ private String clientId; /** The tenant or domain the containing the application. */ @@ -56,6 +58,30 @@ public ApplicationTokenCredentials(String clientId, String domain, String secret } else { this.environment = environment; } + this.resourceEndpoint = this.environment.getTokenAudience(); + } + + /** + * Initializes a new instance of the UserTokenCredentials. + * + * @param clientId the active directory application client id. + * @param domain the domain or tenant id containing this application. + * @param secret the authentication secret for the application. + * @param resourceEndpoint the endpoint of the target resource. + * @param environment the Azure environment to authenticate with. + * If null is provided, AzureEnvironment.AZURE will be used. + */ + public ApplicationTokenCredentials(String clientId, String domain, String secret, String resourceEndpoint, AzureEnvironment environment) { + super(null, null); // defer token acquisition + this.clientId = clientId; + this.domain = domain; + this.secret = secret; + this.resourceEndpoint = resourceEndpoint; + if (environment == null) { + this.environment = AzureEnvironment.AZURE; + } else { + this.environment = environment; + } } /** @@ -212,7 +238,7 @@ private void acquireAccessToken() throws IOException { AuthenticationContext context = new AuthenticationContext(authorityUrl, this.getEnvironment().isValidateAuthority(), executor); try { authenticationResult = context.acquireToken( - this.getEnvironment().getTokenAudience(), + this.resourceEndpoint, new ClientCredential(this.getClientId(), this.getSecret()), null).get(); } catch (Exception e) { diff --git a/azure-client-authentication/src/main/java/com/microsoft/azure/credentials/UserTokenCredentials.java b/azure-client-authentication/src/main/java/com/microsoft/azure/credentials/UserTokenCredentials.java index 60d6bdb3c0a58..c37479771a9b9 100644 --- a/azure-client-authentication/src/main/java/com/microsoft/azure/credentials/UserTokenCredentials.java +++ b/azure-client-authentication/src/main/java/com/microsoft/azure/credentials/UserTokenCredentials.java @@ -21,6 +21,8 @@ * Token based credentials for use with a REST Service Client. */ public class UserTokenCredentials extends TokenCredentials { + /** The endpoint of the target resource. */ + private String resourceEndpoint; /** The Active Directory application client id. */ private String clientId; /** The domain or tenant id containing this application. */ @@ -59,6 +61,34 @@ public UserTokenCredentials(String clientId, String domain, String username, Str } else { this.environment = environment; } + this.resourceEndpoint = this.environment.getTokenAudience(); + } + + /** + * Initializes a new instance of the UserTokenCredentials. + * + * @param clientId the active directory application client id. + * @param domain the domain or tenant id containing this application. + * @param username the user name for the Organization Id account. + * @param password the password for the Organization Id account. + * @param clientRedirectUri the Uri where the user will be redirected after authenticating with AD. + * @param resourceEndpoint the endpoint of the target resource. + * @param environment the Azure environment to authenticate with. + * If null is provided, AzureEnvironment.AZURE will be used. + */ + public UserTokenCredentials(String clientId, String domain, String username, String password, String clientRedirectUri, String resourceEndpoint, AzureEnvironment environment) { + super(null, null); // defer token acquisition + this.clientId = clientId; + this.domain = domain; + this.username = username; + this.password = password; + this.clientRedirectUri = clientRedirectUri; + this.resourceEndpoint = resourceEndpoint; + if (environment == null) { + this.environment = AzureEnvironment.AZURE; + } else { + this.environment = environment; + } } /** @@ -136,7 +166,7 @@ private void acquireAccessToken() throws IOException { AuthenticationContext context = new AuthenticationContext(authorityUrl, this.getEnvironment().isValidateAuthority(), Executors.newSingleThreadExecutor()); try { authenticationResult = context.acquireToken( - this.getEnvironment().getTokenAudience(), + this.resourceEndpoint, this.getClientId(), this.getUsername(), this.getPassword(), diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/AzureEnvironment.java b/azure-client-runtime/src/main/java/com/microsoft/azure/AzureEnvironment.java index 04a6af99d93db..897e29b622c09 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/AzureEnvironment.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/AzureEnvironment.java @@ -56,7 +56,7 @@ public AzureEnvironment( * Provides the settings for authentication with Azure. */ public static final AzureEnvironment AZURE = new AzureEnvironment( - "https://login.windows.net/", + "https://login.microsoftonline.com/", "https://management.core.windows.net/", true, "https://management.azure.com/");