我正在尝试在一个 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 和名称保存到数据库中?
谢谢!