【发布时间】:2018-01-28 22:13:03
【问题描述】:
我正在尝试在 asp.net 核心 Web Api 中实现基于 Facebook 的身份验证。我进行了很多搜索并阅读了大部分与使用 JWT 在 asp.net 核心中进行身份验证相关的博客,但我没有找到任何使用 facebook 进行身份验证和生成 JWT 的文章。一些文章使用 ASP.NET Core MVC 使用 facebook 登录。我尝试在 Web API 中添加它,但是在向 facebook 提交用户名和密码而不是重定向到 ExternalLoginCallback 后,它给出了错误 404。
[HttpPost]
[AllowAnonymous]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
// Request a redirect to the external login provider.
var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { returnUrl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return Challenge(properties, provider);
}
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
if (remoteError != null)
{
ErrorMessage = $"Error from external provider: {remoteError}";
return BadRequest();
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
return BadRequest();
}
var claims = info.Principal.Claims;
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("TokenKeys"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken("myapi",
"myapi",
claims,
expires: DateTime.Now.AddDays(30),
signingCredentials: creds);
return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });
}
【问题讨论】:
-
您是否有将
/signin-facebook路由到ExternalLoginCallback的路由? -
不,我没有,我应该在哪里配置该路由?
-
@BipnPaul 嗨,我也会这样做,这种方法行得通吗?
-
@peymangilmour ,是的,这种方法有效。
标签: c# facebook asp.net-core jwt asp.net-core-webapi