public async virtual Task <ExtendedAccessToken> AuthenticateAsync(string[] scopes, CancellationToken cancellationToken) { MsiType msiType = await GetMsiTypeAsync(cancellationToken).ConfigureAwait(false); // if msi is unavailable or we were unable to determine the type return CredentialUnavailable exception that no endpoint was found if (msiType == MsiType.Unavailable || msiType == MsiType.Unknown) { return(new ExtendedAccessToken(new CredentialUnavailableException(MsiUnavailableError))); } using Request request = CreateAuthRequest(msiType, scopes); Response response = await _pipeline.HttpPipeline.SendRequestAsync(request, cancellationToken).ConfigureAwait(false); if (response.Status == 200) { AccessToken result = await DeserializeAsync(response.ContentStream, cancellationToken).ConfigureAwait(false); return(new ExtendedAccessToken(result)); } if (response.Status == 400 && msiType == MsiType.Imds) { _msiType = MsiType.Unavailable; string message = await ResponseExceptionExtensions.CreateRequestFailedMessageAsync(IdentityUnavailableError, response, null, true).ConfigureAwait(false); return(new ExtendedAccessToken(new CredentialUnavailableException(message))); } throw await response.CreateRequestFailedExceptionAsync().ConfigureAwait(false); }
public virtual ExtendedAccessToken Authenticate(string[] scopes, CancellationToken cancellationToken) { MsiType msiType = GetMsiType(cancellationToken); // if msi is unavailable or we were unable to determine the type return CredentialUnavailable exception that no endpoint was found if (msiType == MsiType.Unavailable || msiType == MsiType.Unknown) { return(new ExtendedAccessToken(new CredentialUnavailableException(MsiUnavailableError))); } using Request request = CreateAuthRequest(msiType, scopes); Response response = _pipeline.HttpPipeline.SendRequest(request, cancellationToken); if (response.Status == 200) { AccessToken result = Deserialize(response.ContentStream); return(new ExtendedAccessToken(result)); } if (response.Status == 400 && msiType == MsiType.Imds) { _msiType = MsiType.Unavailable; ValueTask <string> messageTask = ResponseExceptionExtensions.CreateRequestFailedMessageAsync(IdentityUnavailableError, response, null, false); // TODO: this should use TaskExtensions EnsureCompleted from Azure.Core shared source when it gets move into shared source. Debug.Assert(messageTask.IsCompleted); string message = messageTask.GetAwaiter().GetResult(); return(new ExtendedAccessToken(new CredentialUnavailableException(message))); } throw response.CreateRequestFailedException(); }