Я создал генератор jwt, который мы получили jwt на _loginService.LoginFacebookAsync
, этот метод будет возвращать мой jwt, соответствующий информации о пользователе, которую я получаю с параметром токена доступа facebook.
Я использовал services.AddFacebook()
для входа в Facebook.
Теперь я хочу, чтобы веб-клиент (который я кодирую с помощью Angular) звонил на маршрут /account/login/external?provider=Facebook
(нажав кнопку в браузере), а затем метод ExternalLogin
перенаправит браузер в режим конфиденциальности, необходимый для получения токена доступа к Facebook. И тогда браузер направит на маршрут /account/login/external-facebook
, который вызовет метод ExternalLoginFacebook
. Я могу легко взять токен доступа к Facebook из HttpContext и использовать его для генерации своего веб-токена JSON (jwt) и возврата клиенту. И в том-то и дело: запрос клиента к маршруту, но данные вернутся в другой маршрут. Я не могу придумать, каким образом клиент может получить мой токен Web API. Буду очень признателен, если вы дадите мне идею решить эту проблему.
[HttpGet]
[Route("login/external")]
public IActionResult ExternalLogin (string provider, string returnUrl = null) {
provider = provider.ToLower();
return Challenge(new AuthenticationProperties { RedirectUri = returnUrl ?? "/account/login/external-" + provider }, "Facebook");
}
[HttpGet]
[Route("login/external-facebook")]
public async Task<IActionResult> ExternalLoginFacebook () {
var fbAccessToken = await HttpContext.GetTokenAsync("access_token");
var accessToken = await _loginService.LoginFacebookAsync(fbAccessToken);
IActionResult response = Unauthorized();
if (accessToken != null) {
response = Ok(accessToken);
}
return response;
}