当我在服务器中获取Facebook访问令牌时,客户端如何接收我的令牌?

时间:2019-07-01 17:56:52

标签: asp.net-core facebook-login asp.net-core-webapi restful-authentication

我创建了在_loginService.LoginFacebookAsync上获得jwt的jwt生成器,该方法将返回与我通过facebook访问令牌参数获得的用户信息相对应的jwt。 我已使用services.AddFacebook()进行Facebook登录。 现在,我希望Web客户端(使用Angular进行编码)调用路由/account/login/external?provider=Facebook(通过单击浏览器中的按钮),然后方法ExternalLogin将浏览器重定向到获取Facebook所需的隐私访问令牌。然后浏览器将定向到路由/account/login/external-facebook,该路由将调用方法ExternalLoginFacebook。我可以轻松地从HttpContext获取Facebook访问令牌,并使用它来生成我的Web API JSON Web令牌(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;
}

0 个答案:

没有答案