在 ASP.NET Core Facebook 外部登录安装程序Facebook external login setup in ASP.NET Core

本文内容

作者:Valeriy NovytskyyRick Anderson

本教程中的代码示例演示如何使用户能够使用在前一页上创建的示例 ASP.NET Core 3.0 项目登录其 Facebook 帐户。首先,我们要按照官方步骤创建 FACEBOOK 应用 ID。

在 Facebook 中创建应用Create the app in Facebook

  • AspNetCore NuGet 包添加到项目。

  • 导航到Facebook 开发人员应用页面并登录。如果还没有 Facebook 帐户,请使用登录页上的 "注册 Facebook " 链接创建一个。获得 Facebook 帐户后,请按照说明注册为 Facebook 开发人员。

  • 从 "我的应用" 菜单中,选择 "创建应用" 以创建新的应用 ID。

Microsoft Edge 中打开的 Facebook 开发人员门户

  • 填写表单,然后点击 "创建应用 ID " 按钮。

创建新的应用 ID 窗体

  • 在 "新建应用" 卡中,选择 "添加产品"。在Facebook 登录卡上,单击 "设置"

产品安装程序页

  • 快速入门向导会启动,并选择一个平台作为第一页。现在,通过单击左下方菜单中的 " FaceBook 登录**设置**" 链接,绕过向导:

跳过快速入门

  • 将显示 "客户端 OAuth 设置" 页:

客户端 OAuth 设置页

  • 输入包含 /signin-facebook的开发 URI,并将其追加到 "有效的 OAuth 重定向 uri " 字段中(例如: https://localhost:44320/signin-facebook)。稍后在本教程中配置的 Facebook 身份验证将自动处理 /signin-facebook路由中的请求以实现 OAuth 流。

备注

URI /signin-facebook设置为 facebook 身份验证提供程序的默认回调。通过FacebookOptions类的继承的RemoteAuthenticationOptions. CallbackPath属性配置 Facebook 身份验证中间件时,可以更改默认的回叫 URI。

  • 单击“保存更改”。

  • 单击左侧导航栏中的 "设置" > 基本"链接。

在此页上,记下你的 App IDApp Secret。你将添加到 ASP.NET Core 应用程序下一节中:

  • 部署站点时,需要重新访问Facebook 登录设置页面并注册新的公共 URI。

存储 Facebook 应用 ID 和机密Store the Facebook app ID and secret

机密管理器存储敏感设置,如 FACEBOOK 应用 ID 和机密值。对于本示例,请使用以下步骤:

  • 按照启用密钥存储中的说明初始化密钥存储的项目。

  • 将敏感设置存储在本地密钥存储中,并将机密密钥 Authentication:Facebook:AppIdAuthentication:Facebook:AppSecret

  1. dotnet user-secrets set "Authentication:Facebook:AppId" "<app-id>"
  2. dotnet user-secrets set "Authentication:Facebook:AppSecret" "<app-secret>"

所有平台上的环境变量分层键都不支持 : 分隔符。__(双下划线):

  • 受所有平台支持。例如,Bash 不支持 : 分隔符,但支持 __
  • 自动替换为 :

配置 Facebook 身份验证Configure Facebook Authentication

Startup.cs文件的 ConfigureServices 方法中添加 Facebook 服务:

  1. services.AddAuthentication().AddFacebook(facebookOptions =>
  2. {
  3. facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
  4. facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
  5. });

AddAuthentication (字符串)重载设置DefaultScheme属性。AddAuthentication (Action<AuthenticationOptions>)重载允许配置身份验证选项,这些选项可用于为不同目的设置默认的身份验证方案。对的后续调用 AddAuthentication 重写以前配置的AuthenticationOptions属性。

对于注册身份验证处理程序的AuthenticationBuilder扩展方法,每个身份验证方案只能调用一次。存在允许配置方案属性、方案名称和显示名称的重载。

多个身份验证提供程序Multiple authentication providers

如果应用需要多个提供程序,请在 AddAuthentication 后面链接提供程序扩展方法:

  1. services.AddAuthentication()
  2. .AddMicrosoftAccount(microsoftOptions => { ... })
  3. .AddGoogle(googleOptions => { ... })
  4. .AddTwitter(twitterOptions => { ... })
  5. .AddFacebook(facebookOptions => { ... });

有关 Facebook 身份验证支持的配置选项的详细信息,请参阅FacebookOptions API 参考。配置选项可用于:

  • 请求有关用户的不同信息。
  • 添加查询字符串参数以自定义登录体验。

使用 Facebook 登录Sign in with Facebook

运行应用程序,并单击 "登录"请参阅使用 Facebook 登录的选项。

Web 应用程序: 用户未经过身份验证

单击facebook时,会重定向到 facebook 进行身份验证:

Facebook 身份验证页面

Facebook 身份验证请求的默认公共配置文件和电子邮件地址:

Facebook 身份验证页许可屏幕

输入你的 Facebook 凭据后你重定向回你的站点,你可以设置你的电子邮件。

现在已在使用 Facebook 凭据登录:

Web 应用程序: 用户通过身份验证

使用代理或负载均衡器转发请求信息Forward request information with a proxy or load balancer

如果应用部署在代理服务器或负载均衡器后面,则可能会将某些原始请求信息转发到请求标头中的应用。此信息通常包括安全请求方案 (https)、主机和客户端 IP 地址。应用不会自动读取这些请求标头以发现和使用原始请求信息。

方案用于通过外部提供程序影响身份验证流的链接生成。丢失安全方案 (https) 会导致应用生成不正确且不安全的重定向 URL。

使用转发标头中间件以使应用可以使用原始请求信息来进行请求处理。

有关详细信息,请参阅 配置 ASP.NET Core 以使用代理服务器和负载均衡器

故障排除Troubleshooting

  • 仅 ASP.NET Core 2.x: 如果未通过在 ConfigureServices中调用 services.AddIdentity 来配置标识,则尝试进行身份验证将导致ArgumentException:必须提供 "SignInScheme" 选项。在本教程中使用的项目模板可确保,此操作。
  • 如果尚未通过应用初始迁移来创建站点数据库,则在处理请求错误时,将会出现数据库操作失败的情况。点击 "应用迁移" 以创建数据库,然后单击 "刷新" 以继续出现错误。

后续步骤Next steps

  • 本文介绍了您如何可以使用 Facebook 进行验证。您可以遵循类似的方法向前一页上列出的其他提供程序进行身份验证。

  • 将网站发布到 Azure web 应用后,应重置 Facebook 开发人员门户中的 AppSecret

  • Authentication:Facebook:AppIdAuthentication:Facebook:AppSecret 设置为 Azure 门户中的应用程序设置。配置系统设置以从环境变量读取密钥。