public static async Task <string> GetAccessTokenAsync(AadMetadata aad, CancellationToken cancellationToken) { var authority = aad.Authority; var authContext = new AuthenticationContext(authority); AuthenticationResult authResult = null; var token = string.Empty; // On full .net framework, use interactive logon to get token. // On dotnet core, acquire token using device id. // https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/wiki/Acquiring-a-token-return-AuthenticationResult-and-possibly-UserInfo #if DotNetCoreClr try { authResult = await authContext.AcquireTokenSilentAsync(aad.Cluster, aad.Client); } catch (AdalException adalException) { if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently || adalException.ErrorCode == AdalError.InteractionRequired) { try { var codeResult = await authContext.AcquireDeviceCodeAsync(aad.Cluster, aad.Client); Console.WriteLine(Resource.MsgAADSignin); Console.WriteLine(codeResult.Message + "\n"); authResult = await authContext.AcquireTokenByDeviceCodeAsync(codeResult); } catch (Exception ex) { Console.WriteLine(Resource.ErrorAAD); Console.WriteLine("Message: " + ex.Message + "\n"); } } } token = authResult.AccessToken; #else authResult = await authContext.AcquireTokenAsync( aad.Cluster, aad.Client, new Uri(aad.Redirect), new PlatformParameters(PromptBehavior.SelectAccount)); token = authResult.AccessToken; #endif return(token); }
/// <summary> /// Serializes the object to JSON. /// </summary> /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param> /// <param name="obj">The object to serialize to JSON.</param> internal static void Serialize(JsonWriter writer, AadMetadata obj) { // Required properties are always serialized, optional properties are serialized when not null. writer.WriteStartObject(); if (obj.Authority != null) { writer.WriteProperty(obj.Authority, "authority", JsonWriterExtensions.WriteStringValue); } if (obj.Client != null) { writer.WriteProperty(obj.Client, "client", JsonWriterExtensions.WriteStringValue); } if (obj.Cluster != null) { writer.WriteProperty(obj.Cluster, "cluster", JsonWriterExtensions.WriteStringValue); } if (obj.Login != null) { writer.WriteProperty(obj.Login, "login", JsonWriterExtensions.WriteStringValue); } if (obj.Redirect != null) { writer.WriteProperty(obj.Redirect, "redirect", JsonWriterExtensions.WriteStringValue); } if (obj.Tenant != null) { writer.WriteProperty(obj.Tenant, "tenant", JsonWriterExtensions.WriteStringValue); } writer.WriteEndObject(); }
public AADTokenHandler(AadMetadata aadMetaData) { this.aadMetaData = aadMetaData; }