使用 ASP.NET Core Identity(身份)

IdentityServer 旨在提供灵活性,其中一部分允许您为用户及其数据(包括密码)使用您想要的任何数据库。如果您从一个新的用户数据库开始,那么 ASP.NET Identity 是您可以选择的一个选项。本快速入门展示了如何将 Identity Identity与IdentityServer一起使用。

本快速入门假设您已经完成了所有之前的快速入门。本快速入门使用 ASP.NET 标识的方法是从Visual Studio 中的ASP.NET 标识模板创建一个新项目。这个新项目将取代我们在之前的快速入门中从头开始构建的先前IdentityServer 项目。此解决方案中的所有其他项目(针对客户端和API)将保持不变。

新建 ASP.NET Identity 的项目

第一步是为您的解决方案添加 ASP.NET Identity 的新项目。鉴于ASP.NET Identity 需要大量代码,因此使用 Visual Studio 中的模板是有意义的。您最终将删除 IdentityServer 的旧项目(假设您正在关注其他快速入门),但是您需要迁移几个项目(或者按照之前的快速入门中的描述从头开始重写)。

首先创建一个新的“ASP.NET Core Web 应用程序”项目。

../_images/6_new_web_project.png

然后选择“Web应用程序模板(模型 - 视图 - 控制器)”选项。

../_images/6_web_app_template.png

然后单击“更改身份验证”按钮,并选择“个人用户帐户”(这意味着使用ASP.NET身份):

../_images/6_change_authentication.png

最后,您的新项目对话框应该如下所示。完成后,单击“确定”以创建项目。

../_images/6_web_app_template_with_aspnet_identity.png

修改主机

不要忘记修改托管(如此处所述)以在端口 5000 上运行。这很重要,因此现有客户端和api项目将继续工作。

添加 IdentityServer 包

添加IdentityServer4.AspNetIdentityNuGet包。这取决于IdentityServer4包,因此会自动添加为传递依赖项。

../_images/6_nuget.png

范围和客户端配置

尽管这是 IdentityServer 的新项目,但我们仍需要与之前的快速入门相同的范围和客户端配置。用于以前快速入门的配置类(在Config.cs中复制到此新项目中。

必要的配置更改(暂时)是禁用MVC客户端的同意。我们还没有复制先前IdentityServer项目的同意代码,所以现在对MVC客户端进行一次修改并设置RequireConsent=false

new Client
{
    ClientId = "mvc",
    ClientName = "MVC Client",
    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

    RequireConsent = false,

    ClientSecrets =
    {
        new Secret("secret".Sha256())
    },

    RedirectUris           = { "http://localhost:5002/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        "api1"
    },
    AllowOfflineAccess = true
}

配置IdentityServer 

和以前一样,IdentityServer需要Startup.cs中ConfigureServices和in Configure配置

ConfigureServices

这显示了为ASP.NET Identity生成的模板代码,以及IdentityServer所需的附加内容(最后)。在之前的快速入门中,AddTestUsers扩展方法用于注册用户,但在这种情况下,我们将该扩展方法替换AddAspNetIdentity为使用ASP.NET Identity用户。AddAspNetIdentity扩展方法需要一个通用的参数,它是你的ASP.NET身份用户类型(同一个在需要AddIdentity从模板方法)。

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    // Add application services.
    services.AddTransient<IEmailSender, EmailSender>();

    services.AddMvc();

    // configure identity server with in-memory stores, keys, clients and scopes
    services.AddIdentityServer()
        .AddDeveloperSigningCredential()
        .AddInMemoryPersistedGrants()
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddInMemoryApiResources(Config.GetApiResources())
        .AddInMemoryClients(Config.GetClients())
        .AddAspNetIdentity<ApplicationUser>();
}

注意

在使用ASP.NET标识时,在DI系统中 ASP.NET标识之后注册IdentityServer非常重要,因为IdentityServer会从ASP.NET标识覆盖某些配置。

配置

这显示了为ASP.NET Identity生成的模板代码,以及UseIdentityServer替换调用的调用UseIdentity

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    // app.UseAuthentication(); // not needed, since UseIdentityServer adds the authentication middleware
    app.UseIdentityServer();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

创建用户数据库

鉴于这是一个新的ASP.NET Identity项目,您将需要创建数据库。您可以通过从项目目录运行命令提示符并运行来执行此操作,如下所示:dotnet ef database update -c ApplicationDbContext

../_images/6_ef_database_update.png

创建用户

此时,您应该能够运行项目并在数据库中创建/注册用户。启动应用程序,然后从主页单击“注册”链接:

../_images/6_home_page.png

在注册页面上创建一个新的用户帐户:

../_images/6_register_page.png

现在您拥有了一个用户帐户,您应该能够登录,使用客户端并调用API。

使用MVC客户端登录

启动MVC客户端应用程序,您应该能够单击“安全”链接以登录。

../_images/6_mvc_client.png

您应该被重定向到ASP.NET Identity登录页面。使用新创建的用户登录:

../_images/6_login.png

登录后,您应该跳过同意页面(根据我们上面做出的更改),并立即重定向回MVC客户端应用程序,在该应用程序中应列出您的用户声明。

../_images/6_claims.png

您还应该能够单击“使用应用程序标识调用API”来代表用户调用API:

../_images/6_api_claims.png

现在,您已使用ASP.NET Identity中的用户登录。

下一步是什么?

IdentityServer的先前快速入门项目提供了同意页面,错误页面和注销页面。这些缺失部分的代码可以简单地从之前的快速入门项目复制到此项目中。完成后,您最终可以删除/删除旧的IdentityServer项目。此外,一旦完成此操作,请不要忘记RequireConsent=true在MVC客户端配置上重新启用该标志。

此快速入门示例代码已经为您完成了这些步骤,因此您可以快速开始使用所有这些功能。自己慢慢享受吧

nidie.com.cn - 用心与你沟通