Я пытаюсь передать данные пользователя как ClaimsPrincipal
из одной службы API в другую.
[HttpPost("getexternal")]
public async Task<IActionResult> GetUserByExternalLogin(ExternalSignModel model, [FromServices]IEnumerable<IExternalAuthentication> providers, [FromServices]IUserClaimsPrincipalFactory<MembershipUser> claimsPrincipalFactory)
{
if (model == null) return BadRequest("Missing agrumets");
if (string.IsNullOrEmpty(model.Code)) return BadRequest($"{nameof(model.Code)} must not be empty");
if (string.IsNullOrEmpty(model.Provider)) return BadRequest($"{nameof(model.Provider)} must not be empty");
var provider = providers.FirstOrDefault(w => w.ProviderName == model.Provider);
if (provider == null) return BadRequest($"Provider for external login {model.Provider} is missing");
try
{
var externalLoginInfo = await provider.AuthenticateAsync(model.Code);
var user = await _userManager.FindByLoginAsync(externalLoginInfo.LoginProvider,
externalLoginInfo.ProviderKey);
user = user ?? await _membershipUserHandler.RegisterUser(externalLoginInfo);
var claimsPrincipal = await claimsPrincipalFactory.CreateAsync(user);
return Ok(claimsPrincipal);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
А вот служба вызова:
public async Task<ClaimsPrincipal> GetUserByExternalLogin(ExternalSignModel model)
{
var uri = $"{BaseServiceUri}/getexternal";
var response = await _client.PostAsync(uri, model, new JsonMediaTypeFormatter());
var user = await response.Content.ReadAsAsync<ClaimsPrincipal>();
return user;
}
_client
- этопросто HttpClient
, но когда я делаю return Ok(claimsPrincipal);
на звонящем, я получаю ошибку 400.
Что я делаю не так?Как я могу отправить ClaimsPrincipal?