Note
对于任何先决条件(例如模板),请先查看概述。
接下来,我们将添加对外部身份验证的支持。 这真的很容易,因为您真正需要的只是一个与ASP.NET Core兼容的身份验证处理程序。
ASP.NET Core本身附带对Google,Facebook,Twitter,Microsoft帐户和OpenID Connect的支持。 另外,您可以在此处找到许多其他身份验证提供程序的实现。
添加Google支持
为了能够使用Google进行身份验证,您首先需要向他们注册。 这是在其开发人员控制台上https://www.ecshop.cx/article-519.html完成的
的。 创建一个新项目,启用Google+ API,并通过在基本地址中添加/signin-google路径(例如http://localhost:5000/signin-google)来配置本地IdentityServer的回调地址。
开发者控制台将向您显示由Google发布的(ClientID)客户端ID和(Secret)机密-下一步将需要使用该ID。
将Google身份验证处理程序添加到IdentityServer主机的DI中。 这是通过将以下代码段添加到Startup
中的ConfigureServices
来完成的:
services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.ClientId = "<insert here>";
options.ClientSecret = "<insert here>";
});
默认情况下,IdentityServer专门为外部身份验证的结果配置cookie处理程序(使用基于常量IdentityServerConstants.ExternalCookieAuthenticationScheme
的方案)。 然后,Google处理程序的配置将使用该Cookie处理程序。
现在运行MVC客户端并尝试进行身份验证-您将在登录页面上看到一个Google按钮:
通过MVC客户端进行身份验证后,您可以看到声明现在从Google数据中获取。
进一步的实验
您可以添加其他外部提供程序。 我们有IdentityServer4的云托管演示版,您可以使用OpenID Connect进行集成。
将OpenId Connect处理程序添加到DI:
services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.ClientId = "<insert here>";
options.ClientSecret = "<insert here>";
})
.AddOpenIdConnect("oidc", "OpenID Connect", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.SaveTokens = true;
options.Authority = "https://demo.identityserver.io/";
options.ClientId = "implicit";
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
});
现在,用户应该可以使用云托管的演示身份提供程序。
Note
快速入门UI自动设置外部用户。 当外部用户首次登录时,将创建一个新的本地用户,并且所有外部声明将被复制并与该新用户相关联。 但是,如何处理这种情况完全取决于您自己。 也许您想先显示某种注册UI。 默认快速入门的源代码可以在 这里找到。 可以在此处找到执行自动配置的控制器。