【发布时间】: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