in CredentialProvider.Microsoft/CredentialProviders/Vsts/AdalTokenProvider.cs [33:60]
public async Task<IAdalToken> AcquireTokenWithDeviceFlowAsync(Func<DeviceCodeResult, Task> deviceCodeHandler, CancellationToken cancellationToken, ILogger logger)
{
var authenticationContext = new AuthenticationContext(authority, tokenCache);
var deviceCode = await authenticationContext.AcquireDeviceCodeAsync(resource, clientId);
cancellationToken.ThrowIfCancellationRequested();
if (deviceCodeHandler != null)
{
await deviceCodeHandler(deviceCode);
cancellationToken.ThrowIfCancellationRequested();
}
AuthenticationResult result = null;
var deviceFlowTimeout = EnvUtil.GetDeviceFlowTimeoutFromEnvironmentInSeconds(logger);
var task = authenticationContext.AcquireTokenByDeviceCodeAsync(deviceCode);
if (await Task.WhenAny(task, Task.Delay(deviceFlowTimeout*1000, cancellationToken)) == task)
{
result = await task;
}
else
{
logger.Error(string.Format(Resources.DeviceFlowTimedOut, deviceFlowTimeout));
}
return new AdalToken(result);
}