具有 ASP.NET Core 的 Twitter 外部登录设置Twitter external sign-in setup with ASP.NET Core

本文内容

作者:Valeriy NovytskyyRick Anderson

此示例演示如何使用户能够使用在前一页上创建的示例 ASP.NET Core 3.0 项目登录其 Twitter 帐户

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

  • AspNetCore NuGet 包添加到项目。

  • 导航到https://apps.twitter.com/并登录。如果还没有 Twitter 帐户,请使用 " 立即注册 " 链接创建一个。

  • 选择“创建应用”。填写应用程序名称应用程序说明和公共网站URI (在注册域名之前,这可能是暂时的):

  • 选中 "启用使用 Twitter 登录" 旁边的框

  • AspNetCore 要求用户在默认情况下具有电子邮件地址。中转到 "权限" 选项卡,单击 "编辑" 按钮,然后选中 "请求用户的电子邮件地址" 旁边的框。

  • 输入 /signin-twitter 追加到 "回调 url " 字段中的开发 URI (例如: https://webapp128.azurewebsites.net/signin-twitter)。稍后在本示例中配置的 Twitter 身份验证方案将自动处理 /signin-twitter 路由中的请求以实现 OAuth 流。

备注

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

  • 填写表单的其余部分,然后选择 "创建"。显示新应用程序详细信息:

存储 Twitter 使用者 API 密钥和机密Store the Twitter consumer API key and secret

使用机密管理器存储敏感设置,如 Twitter 使用者 API 密钥和机密。对于本示例,请使用以下步骤:

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

  • 将敏感设置存储在本地密钥存储中,其中包含机密密钥 Authentication:Twitter:ConsumerKeyAuthentication:Twitter:ConsumerSecret

  1. dotnet user-secrets set "Authentication:Twitter:ConsumerAPIKey" "<consumer-api-key>"
  2. dotnet user-secrets set "Authentication:Twitter:ConsumerSecret" "<consumer-secret>"

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

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

创建新的 Twitter 应用程序后,可以在 "密钥和访问令牌" 选项卡上找到这些令牌:

配置 Twitter 身份验证Configure Twitter Authentication

将 Twitter 服务添加到Startup.cs文件的 ConfigureServices 方法中:

  1. {
  2. services.AddDbContext<ApplicationDbContext>(options =>
  3. options.UseSqlServer(
  4. Configuration.GetConnectionString("DefaultConnection")));
  5. services.AddDefaultIdentity<IdentityUser>(options =>
  6. options.SignIn.RequireConfirmedAccount = true)
  7. .AddEntityFrameworkStores<ApplicationDbContext>();
  8. services.AddRazorPages();
  9. services.AddAuthentication().AddTwitter(twitterOptions =>
  10. {
  11. twitterOptions.ConsumerKey = Configuration["Authentication:Twitter:ConsumerAPIKey"];
  12. twitterOptions.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"];
  13. twitterOptions.RetrieveUserDetails = true;
  14. });
  15. }

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 => { ... });

有关 Twitter 身份验证支持的配置选项的详细信息,请参阅TwitterOptions API 参考。这可以用于请求有关用户的不同信息。

通过 Twitter 登录Sign in with Twitter

运行应用并选择 "登录"将显示使用 Twitter 登录的选项:

单击twitter重定向到 twitter 进行身份验证:

输入 Twitter 凭据后,会重定向回到网站,你可以在其中设置电子邮件。

你现在已使用 Twitter 凭据登录:

使用代理或负载均衡器转发请求信息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

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

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

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