IdentityModel - RequestClientCredentialsTokenAsync
Этот способ RequestClientCredentialsTokenAsync
для генерации токена (oauth2) у меня отлично работает, когда я вызываю его из модульного теста, но из API MVC .Net Framework 4.6.1 у меня есть это исключение: (извините, исключение на французском языке)
<Error>
<Message>
Une erreur s'est produite lors de l'envoi de la demande.
</Message>
<ExceptionMessage>
Une erreur s'est produite lors de l'envoi de la demande.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
à JwtBearerAuthentication.JwtAssertionTokenManager.AcquireAccessToken() dans C:\Users\S851029\source\repos\Sources\AF.EFormSignature.JwtBearerAuthentication\JwtAssertionTokenManager.cs:ligne 55 à JwtBearerAuthentication.JwtAssertionTokenManager.GetAccessToken(Boolean forceRefresh) dans C:\Users\S851029\source\repos\Sources\AF.EFormSignature.JwtBearerAuthentication\JwtAssertionTokenManager.cs:ligne 28 à AF.EFormSignature.Web.Controllers.IdentiteNumeriqueController.RecuperationStatutIdentite() dans C:\Users\S851029\source\repos\Sources\AF.EFormSignature.Web\Controllers\IdentiteNumeriqueController.cs:ligne 72 à lambda_method(Closure , Object , Object[] ) à System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters) à System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) à System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary
2 аргумента, CancellationToken cancellationToken) --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(задача задачи) à System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() --- Fin de la trace de la pile à partiau de l'emplication 'исключение été levée --- à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(задача задачи) à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(задача Task). () --- Fin de la trace de la pile à partir de l'предварительное размещение в текущем состоянии после исключения на уровне последнего --- на System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) на System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndotersDebugger.AuthorizationFilterAttribute.d__2.MoveNext() --- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (TaskForNonSuccess (Task) à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(задача задачи) à System.Web.Http.Controllers.ExceptionFilterResult.d__0.MoveNext() Произошла ошибка.
Une erreur s'est produite lors de l'envoi de la demande.
System.Net.Http.HttpRequestException
à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(задача задачи) à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(задача задачи) à IdentityModel.Client.HttpClientTokenRequestExtensions.d__7. Невозможно установить соединение с удаленным сервером System.Net.WebException
à System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context) à System.Net.Http.HttpClientHandler.GetRequestStreamCallbackes (произошла ошибка IAsyncResult. Предварительная попытка подключения к подключенному автомобилю с подключением к сообщению об ошибке в течение определенного времени или с подключением к подключенному автомобилю без сообщения 171.18.28.75:443
System.Net.Sockets.SocketException
à System.Net.Sockets.Socket.InternalEndConnect(IAsyncResult asyncResult) à System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) à System.Net.ServicePoint.ConnectSocketInternal(логическое значение connectFailure, состояние сокета и s4, SocketState, SocketState и s6) IAsyncResult asyncResult, исключение и исключение)
private string AcquireAccessToken()
{
// Build assertion
var authenticationToken = GetAuthenticationToken();
HttpClientHandler handler = new HttpClientHandler();
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
HttpMessageInvoker msg = new HttpMessageInvoker(handler);
TokenClientOptions tokenClientOptions = new TokenClientOptions();
tokenClientOptions.Address = TokenEndpointUrl;
tokenClientOptions.ClientId = ClientId;
tokenClientOptions.ClientSecret = ClientSecret;
TokenClient tokenClient = new TokenClient(msg, tokenClientOptions);
var payload = new Dictionary<string, string> {
{ "client_assertion_type", "urn:ietf:params:oauth:client-assertion-type:jwt-bearer" },
{ "client_assertion", authenticationToken }
};
// Send authorization parameters using HTTP POST method and the Form Serialization
// See http://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication
var tokenResponse = tokenClient.RequestClientCredentialsTokenAsync(Scope, payload);
if (tokenResponse.Result.IsError)
{
throw new InvalidOperationException(tokenResponse.Result.Exception.Message, tokenResponse.Result.Exception);
}
var accessToken = tokenResponse.Result.AccessToken;
// Get token expiration date to configure cache expiration
var accessTokenExpiration = GetTokenExpirationDate(accessToken);
// Cache access token to prevent calling MAAM server for each request
WriteTokenToCache(GenerateTokenCacheKey(), accessToken, new DateTimeOffset(accessTokenExpiration));
return accessToken;
}