Как клиент получает мой токен, когда я получил токен доступа к Facebook на сервере? - PullRequest
0 голосов
/ 01 июля 2019

Я создал генератор 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;
}
...