Azure.Authenticate with interactive user login (Microsoft.Azure.Management.Fluent)

6.9k Views Asked by At

I used to manage Azure resources an old preview version. The authentication worked something like this:

// Authorize 
this.AuthenticationResult = this.Authorize();
this.Credentials = new TokenCloudCredentials(config.SubscriptionId, this.AuthenticationResult.AccessToken);
this.ResourceManagement = new ResourceManagementClient(this.Credentials, new Uri(config.ManagementBaseUrl));

That would pop up and interactive user login window. I'd like to do the same with the new fluent nuget package (Microsoft.Azure.Management.Fluent version="1.0.0")

Azure.Authenticate(???)

This seems to be the best documentation of the authentication method: https://github.com/Azure/azure-sdk-for-net/blob/Fluent/AUTH.md

But it only covers options that will store credentials on the HDD which I'd like to avoid. So that whatever user is using my program is needed to login.

So in summary: How do I authenticate using an interactive user login with the latest Azure management API?

2

There are 2 best solutions below

7
On

According to SDK source code, there is no interactive user login currently.

 credentialsCache[adSettings.TokenAudience] = await UserTokenProvider.LoginSilentAsync(
                        userLoginInformation.ClientId, TenantId, userLoginInformation.UserName,
                        userLoginInformation.Password, adSettings, TokenCache.DefaultShared);

But it only covers options that will store credentials on the HDD which I'd like to avoid. So that whatever user is using my program is needed to login.

To avoid storing credentials on the HDD , if no interactive user login is accepted we could use Login Slient model with username and password.

var credentials = new AzureCredentials(new UserLoginInformation { ClientId = "Azure client Id",UserName = "username",Password = "Password"}, "tenant Id", AzureEnvironment.AzureGlobalCloud);  //AzureChinaCloud,AzureGermanCloud,AzureUSGovernment

var azure = Azure
            .Configure()
            .Authenticate(credentials)
            .WithDefaultSubscription();
0
On

Fluent libraries does not support interactive login. If your project targets .Net Core then you can use Device Flow authentication, but that will require you to pop-up to the caller information received from Azure AD Source code in Fluent Repo