- 在 ASP.NET Core Facebook 外部登录安装程序Facebook external login setup in ASP.NET Core
- 在 Facebook 中创建应用Create the app in Facebook
- 存储 Facebook 应用 ID 和机密Store the Facebook app ID and secret
- 配置 Facebook 身份验证Configure Facebook Authentication
- 多个身份验证提供程序Multiple authentication providers
- 使用 Facebook 登录Sign in with Facebook
- 使用代理或负载均衡器转发请求信息Forward request information with a proxy or load balancer
- 故障排除Troubleshooting
- 后续步骤Next steps
在 ASP.NET Core Facebook 外部登录安装程序Facebook external login setup in ASP.NET Core
本文内容
作者:Valeriy Novytskyy 和 Rick Anderson
本教程中的代码示例演示如何使用户能够使用在前一页上创建的示例 ASP.NET Core 3.0 项目登录其 Facebook 帐户。首先,我们要按照官方步骤创建 FACEBOOK 应用 ID。
在 Facebook 中创建应用Create the app in Facebook
将AspNetCore NuGet 包添加到项目。
导航到Facebook 开发人员应用页面并登录。如果还没有 Facebook 帐户,请使用登录页上的 "注册 Facebook " 链接创建一个。获得 Facebook 帐户后,请按照说明注册为 Facebook 开发人员。
从 "我的应用" 菜单中,选择 "创建应用" 以创建新的应用 ID。
- 填写表单,然后点击 "创建应用 ID " 按钮。
- 在 "新建应用" 卡中,选择 "添加产品"。在Facebook 登录卡上,单击 "设置"
- 快速入门向导会启动,并选择一个平台作为第一页。现在,通过单击左下方菜单中的 " FaceBook 登录**设置**" 链接,绕过向导:
- 将显示 "客户端 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 ID
和 App Secret
。你将添加到 ASP.NET Core 应用程序下一节中:
- 部署站点时,需要重新访问Facebook 登录设置页面并注册新的公共 URI。
存储 Facebook 应用 ID 和机密Store the Facebook app ID and secret
用机密管理器存储敏感设置,如 FACEBOOK 应用 ID 和机密值。对于本示例,请使用以下步骤:
按照启用密钥存储中的说明初始化密钥存储的项目。
将敏感设置存储在本地密钥存储中,并将机密密钥
Authentication:Facebook:AppId
和Authentication:Facebook:AppSecret
:
dotnet user-secrets set "Authentication:Facebook:AppId" "<app-id>"
dotnet user-secrets set "Authentication:Facebook:AppSecret" "<app-secret>"
所有平台上的环境变量分层键都不支持 :
分隔符。__
(双下划线):
- 受所有平台支持。例如,Bash 不支持
:
分隔符,但支持__
。 - 自动替换为
:
配置 Facebook 身份验证Configure Facebook Authentication
在Startup.cs文件的 ConfigureServices
方法中添加 Facebook 服务:
services.AddAuthentication().AddFacebook(facebookOptions =>
{
facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});
AddAuthentication (字符串)重载设置DefaultScheme属性。AddAuthentication (Action<AuthenticationOptions>)重载允许配置身份验证选项,这些选项可用于为不同目的设置默认的身份验证方案。对的后续调用 AddAuthentication
重写以前配置的AuthenticationOptions属性。
对于注册身份验证处理程序的AuthenticationBuilder扩展方法,每个身份验证方案只能调用一次。存在允许配置方案属性、方案名称和显示名称的重载。
多个身份验证提供程序Multiple authentication providers
如果应用需要多个提供程序,请在 AddAuthentication 后面链接提供程序扩展方法:
services.AddAuthentication()
.AddMicrosoftAccount(microsoftOptions => { ... })
.AddGoogle(googleOptions => { ... })
.AddTwitter(twitterOptions => { ... })
.AddFacebook(facebookOptions => { ... });
有关 Facebook 身份验证支持的配置选项的详细信息,请参阅FacebookOptions API 参考。配置选项可用于:
- 请求有关用户的不同信息。
- 添加查询字符串参数以自定义登录体验。
使用 Facebook 登录Sign in with Facebook
运行应用程序,并单击 "登录" 。请参阅使用 Facebook 登录的选项。
单击facebook时,会重定向到 facebook 进行身份验证:
Facebook 身份验证请求的默认公共配置文件和电子邮件地址:
输入你的 Facebook 凭据后你重定向回你的站点,你可以设置你的电子邮件。
现在已在使用 Facebook 凭据登录:
使用代理或负载均衡器转发请求信息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:AppId
和Authentication:Facebook:AppSecret
设置为 Azure 门户中的应用程序设置。配置系统设置以从环境变量读取密钥。