【问题标题】:How to consume Facebook authentication in Web API如何在 Web API 中使用 Facebook 身份验证
【发布时间】:2016-09-18 03:15:53
【问题描述】:

我正在尝试在一个 Web API 项目中实现 Facebook 身份验证,该项目将被移动客户端用作后端。不会有本地登录。

我按照Microsoft's documentation 中说明的步骤使用 Visual Studio 的 Web API 模板创建项目。我已经有了 Facebook 应用程序 Id&secret,我在 Facebook 面板上相应地设置了 OAuth 重定向 URI,并在 Startup.Auth.cs 文件中设置了 Id&secret:

app.UseFacebookAuthentication(
appId: "***",
appSecret: "***");

然后我创建了一个 LocalDB 数据库并设置了 web.config DefaultConnection 字符串:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=webapidb;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient" />

当我运行项目时,我可以使用带有 GET 的 Account.GetExternalLogin (/api/Account/ExternalLogin/?provider=Facebook) 方法来启动登录。我被重定向到 Facebook 的审批页面,然后当我被重定向回 GetExternalLogin 时,我可以看到该方法的“error”参数为空。我还在 User.Identity.IsAuthenticated 上添加了一个手表,它在方法内部评估为 true。

到目前为止,一切都如预期的那样。

但是,一旦 GetExternalLogin 方法完成,我会尝试调用任何 [Authenticate] 修饰的方法(如 /api/values/3)并收到 HTTP401 Unauthorized 错误。

另一件事是,当我打开 AspNetUsers 表时没有记录,我希望看到我的 Facebook Id 和用户名保存在那里。

您能否解释一下客户端应该如何使用身份验证机制以及如何将用户 ID 和名称保存到数据库中?

谢谢!

【问题讨论】:

    标签: asp.net-web-api asp.net-web-api2 facebook-login social-authentication


    【解决方案1】:

    就在一个月前,我也有同样的疑问。

    您真的应该尝试将您的资源服务器 (API) 与您的授权/身份验证服务器分离。查看 OAuth2 流程以完全理解我在说什么。

    我正在使用this open source project,这些人为身份验证部分提供了具有开放 id 的授权服务器,您唯一需要做的就是根据您的需要对其进行配置。

    以下是我就该主题提出的一些问题

    https://security.stackexchange.com/questions/115799/what-to-do-for-my-web-api-authentication-scheme

    Rest API authentication mechanism, what to do

    Relation to users when these are stored in an external Identity provider service

    How to secure my API

    还可以查看 Kevin Dockx 的 Pluralsight 课程,它很好地解释了整个过程,从创建 api、配置身份服务器以及如何从 MVC 客户端使用服务

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 2018-03-21
      • 2018-01-28
      • 2019-09-03
      • 1970-01-01
      • 2023-04-03
      • 2015-09-18
      相关资源
      最近更新 更多