Give application control over when users are prompted to authenticate
Add authenticate methods to InteractiveBrowserCredential and DeviceCodeCredential
The option disableAutomaticAuthentication can be specified on credential builders to disable automatic prompting of users when getToken is called.
Add AuthenticationRequiredException which can be handled to manually prompt users to authenticate.
Persist user authentication details between executions
The newly added AuthenticationRecord is returned from authenticate calls
AuthenticationRecord supports serialize and deserialize
Added 'enablePersistentCache' option to allow for the persistence of the tokens to the shared token cache
Prompt the user to authenticate and store the AuthenticationRecord
InteractiveBrowserCredential credential = new InteractiveBrowserCredentialBuilder ()
.clientId ("<Client-ID>" )
.enablePersistentCache ()
.disableAutomaticAuthentication ()
.build ();
FileOutputStream outputStream = new FileOutputStream ("./profile.json" );
credential .authenticate ()
.flatMap (authenticationRecord -> authenticationRecord .serialize (outputStream ))
.map (outputStreamResponse -> {
try {
outputStreamResponse .close ();
return Mono .empty ();
} catch (IOException e ) {
return Mono .error (e );
}
}).block ();
Create a credential from a pre-existing AuthenticationRecord
FileInputStream inputStream = new FileInputStream ("./profile.json" );
InteractiveBrowserCredential interactiveBrowserCredential = AuthenticationRecord .deserialize (inputStream )
.map (authenticationRecord ->
new InteractiveBrowserCredentialBuilder ()
.clientId ("<Client-ID>" )
.authenticationRecord (authenticationRecord )
.disableAutomaticAuthentication ()
.enablePersistentCache ()
.build ()
).block ();
Using a credential to manually authenticate with a service client and handling AuthenticationRequiredException
SecretClient client = new SecretClientBuilder ()
.vaultUrl ("https://myvault.vault.azure.net/" )
.credential (interactiveBrowserCredential )
.buildClient ();
try {
client .getSecret ("secret" );
}
catch (AuthenticationRequiredException e ) {
interactiveBrowserCredential .authenticate (e .getTokenRequestContext ());
}
client .getSecret ("secret" );