【问题标题】:ASP.NET Core Web API Facebook JWT AuthenticationASP.NET Core Web API Facebook JWT 身份验证
【发布时间】: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


【解决方案1】:

问题是我没有在 asp.net 管道中添加身份验证。在Configure 方法中添加app.UseAuthentication(); 后,它起作用了。

之前

     public void Configure(IApplicationBuilder app, IHostingEnvironment env)
      {

                if (env.IsDevelopment())
                {
                    app.UseBrowserLink();
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                }

                app.UseStaticFiles();

             app.UseMvc(routes =>
                {
                    routes.MapRoute(
                   name: "default",
                   template: "{controller=Home}/{action=Index}/{id?}");                 
                });        
}

之后

      public void Configure(IApplicationBuilder app, IHostingEnvironment env)
      {

                if (env.IsDevelopment())
                {
                    app.UseBrowserLink();
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                }

                app.UseStaticFiles();

                app.UseAuthentication();

             app.UseMvc(routes =>
                {
                    routes.MapRoute(
                   name: "default",
                   template: "{controller=Home}/{action=Index}/{id?}");                 
                });        
}

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 2017-07-30
    • 2017-03-09
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    相关资源
    最近更新 更多