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();
        }
Esempio n. 3
0
 public AADTokenHandler(AadMetadata aadMetaData)
 {
     this.aadMetaData = aadMetaData;
 }