Я перехожу с .NET Core 1.1 на 2.0, и теперь мне нужно обновить свою аутентификацию тоже.
Я использую OAuth и OpenIddict до .NET Core 2.0
КогдаЯ отправляю запрос моему connect/token
Я получаю следующее:
OpenIddict.Server.OpenIddictServerHandler [0] Ответ токена был успешно возвращен: {
"ошибка":" unsupported_grant_type ",
" error_description ":" Указанный параметр 'grant_type' не поддерживается. "
}.
Это мой метод запроса:
using (var client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Post, $"{url}/connect/token");
request.Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
["grant_type"] = "client_credentials",
["client_id"] = clientId,
["client_secret"] = clientSecret,
["pessoaid"] = pessoaId,
["usuarioid"] = usuarioId,
["conta"] = conta,
["cpfcnpj"] = userDoubleCpf,
["fonteDados"] = fonteDados,
["userIdsLogged"] = userIdsLogged
});
var response = await client.SendAsync(request, HttpCompletionOption.ResponseContentRead);
response.EnsureSuccessStatusCode();
var result = JObject.Parse(await response.Content.ReadAsStringAsync());
if (result["error"] != null)
{
throw new InvalidOperationException("An error occurred while retrieving an access token.");
}
return result;
}
Мои OpenIddictApplications генерируются, когда приложение связано с учетной записью пользователя, поэтому ClientId и Secret генерируются, когда запрос на вход в систему отправляется моему API и извлекает соответствующие значения.
Я последовал за документом и включил все в мой Startup.cs
Это мой AuthorizationController:
[HttpPost("~/connect/token"), Produces("application/json")]
public async Task<IActionResult> Exchange(OpenIdConnectRequest request)
{
Debug.Assert(request.IsTokenRequest(),
"The OpenIddict binder for ASP.NET Core MVC is not registered. " +
"Make sure services.AddOpenIddict().AddMvcBinders() is correctly called.");
if (request.IsClientCredentialsGrantType())
{
// Note: the client credentials are automatically validated by OpenIddict:
// if client_id or client_secret are invalid, this action won't be invoked.
var application = await _applicationManager.FindByClientIdAsync(request.ClientId, HttpContext.RequestAborted);
if (application == null)
{
return BadRequest(new OpenIdConnectResponse
{
Error = OpenIdConnectConstants.Errors.InvalidClient,
ErrorDescription = "The client application was not found in the database."
});
}
// Create a new authentication ticket.
var ticket = CreateTicket(request, application);
return SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme);
}
return BadRequest(new OpenIdConnectResponse
{
Error = OpenIdConnectConstants.Errors.UnsupportedGrantType,
ErrorDescription = "The specified grant type is not supported."
});
}
Я генерируюAuthenticationTicket и возвращениеthis.
Есть идеи о том, что может быть причиной такого рода плохого запроса, когда я пытаюсь отправить запрос на получение моего токена?