我创建了在_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;
}