0

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

我按照Microsoft 文档中解释的步骤使用 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时,我可以看到该方法的“错误”参数为空。我还在User.Identity.IsAuthenticated上添加了一个手表,它在方法内评估为 true。

到目前为止,一切都按预期进行。

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

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

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

谢谢!

4

1 回答 1

0

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

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

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

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

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

Rest API 认证机制,怎么办

当这些存储在外部身份提供者服务中时与用户的关系

如何保护我的 API

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

于 2016-05-21T05:23:30.213 回答