internal/DeviceCodeHelper.cs
using System;
using System.Threading.Tasks; using System.Collections.Generic; //using System.Diagnostics; using Microsoft.Identity.Client; public static class DeviceCodeHelper { public static Func<DeviceCodeResult,Task> GetDeviceCodeResultCallback() { return deviceCodeResult => { // This will print the message on the console which tells the user where to go sign-in using // a separate browser and the code to enter once they sign in. // The AcquireTokenWithDeviceCode() method will poll the server after firing this // device code callback to look for the successful login of the user via that browser. // This background polling (whose interval and timeout data is also provided as fields in the // deviceCodeCallback class) will occur until: // * The user has successfully logged in via browser and entered the proper code // * The timeout specified by the server for the lifetime of this code (typically ~15 minutes) has been reached // * The developing application calls the Cancel() method on a CancellationToken sent into the method. // If this occurs, an OperationCanceledException will be thrown (see catch below for more details). Console.WriteLine(deviceCodeResult.Message); //Console.WriteLine("ExpiresOn: " + deviceCodeResult.ExpiresOn.ToLocalTime()); // try { // Process.Start(new ProcessStartInfo { UseShellExecute = true, FileName = deviceCodeResult.VerificationUrl }); // //Clipboard.SetData(DataFormats.Text, (Object)deviceCodeResult.UserCode); // Process.Start(new ProcessStartInfo { UseShellExecute = false, FileName = "cmd", Arguments = "/c echo " + deviceCodeResult.UserCode + " | clip" }); // } // catch {} return Task.FromResult(0); }; } } |