IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity


原文:http://docs.identityserver.io/en/release/quickstarts/6_aspnet_identity.html

目 录

上一篇:IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问

下一篇:IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端

IdentityServer 是为灵活性而设计的,其中的表现之一就是,它允许你使用任何你想要用的数据库来存储你的用户以及他们的数据(包括账户密码)。如果你正在从一个全新的用户数据库开始,那么 ASP.NET Identity 是你的选项之一。这个快速入门显示了如何以 IdentityServer 的方式使用 ASP.NET identity。

当前快速入门假设你已经通过了所有之前的快速入门。该快速入门使用 ASP.NET Identity 的方法是从 Visual Studio 中的 ASP.NET Identity 模板创建一个新的项目。新项目将替代之前的快速入门中我们从零开始构建的 IdentityServer 项目。解决方案中的其他所有项目(客户端和API)都将保持不变。

用于 ASP.NET Identity 的新项目

第一步是为 ASP.NET Identity 添加一个新项目到你的解决方案中。

考虑到 ASP.NET Identity 需要大量代码,使用 Visual Studio 中的模板会非常有意义。你最终将会删除掉之前旧的 IdentityServer 项目(假设你之前是严格按照快速入门做的),但是你需要将一些项迁移过来(或者跟之前的快速入门一样从零开始重写)。

从创建一个新的 “ASP.NET Core Web 应用程序”项目开始:

然后选择 “Web 应用程序” 选项:

然后点击“更改身份验证”按钮,选择“个人用户账户”(这意味着使用的是 ASP.NET Identity):

最后是点击确定以创建项目。

修改宿主

别忘了修改宿主(像之前描述的一样)以让应用程序运行在 5000 端口上。这对于让已有的客户端和 api 项目能继续工作很重要。

添加 IdentityServer 程序包

添加 IdentityServer4.AspNetIdentity NuGet 程序包(目前的最新版本是“1.0.1”)。该程序包依赖于 IdentityServer4 程序包,所以这些会作为传递依赖被自动添加:

Scopes 和 客户端 配置

尽管这是一个 IdentityServer 新项目,但是我们仍然需要与之前快速入门中一样的 Scope 和 客户端 配置。将之前快速入门中的配置类(Config.cs 文件)复制到现在这个新项目中。

(现在)需要对配置文件做的变更之一是禁用 MVC 客户端的授权确认页。我们还没有将之前 IdentityServer 项目中的授权确认代码拷贝过来,所以现在要对 MVC 客户端进行修改,将 RequireConsent 设置为 false:

new Client
{
ClientId = "mvc",
ClientName = "MVC 客户端",
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 的 ConfigureServicesConfigure 中进行配置。

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(); services.AddMvc(); services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>(); services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddAspNetIdentity<ApplicationUser>();
}

Configure

这里也同时展示了 ASP.NET Identity 模板生成的代码以及 IdentityServer 需要的额外功能代码(紧跟在 UseIdentity 之后)。当使用 ASP.NET Identity 时候,IdentityServer 放在 ASP.NET Identity 之后注册到管道是很重要的,因为 IdentityServer 依赖于 ASP.NET Identity 创建和管理的认证Cookie。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug(); if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseStaticFiles(); app.UseIdentity(); app.UseIdentityServer(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

创建用户数据库

因为这是一个新的 ASP.NET Identity 项目,所以你需要创建数据库。你可以在项目目录下运行命令提示符,并运行命令 dotnet ef database update,像这样:

创建用户

现在,你应该能够运行项目并创建/注册用户到数据库了。启动应用程序,然后点击 Home 页面的 “Register” 链接:

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

那么现在你就有了一个用户账户了,你应该能够登录,使用客户端以及调用 API。

登录 MVC 客户端

启动 MVC 客户端应用程序,你应该能够点击 “Secure” 链接来进入登录页:

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

登录后,你应该已经直接跳过了授权确认页面(想一下我们之前所做的变更),然后马上就重定向回 MVC 客户端应用程序,随之你的用户身份信息也应该被展示出来:

点击 “Call Api using application identity”,你应该还能够以用户的身份调用 API:

那么现在你已经是通过 ASP.NET Identity 的用户进行登录的了。

接下来做什么?

之前快速入门中的 IdentityServer 项目提供了一个授权确认页面,一个错误页面,以及一个注销页面,现在这些丢失的代码片段可以简单地从先前的快速入门项目中拷贝过来。做完这一步,你就可以将旧的 IdentityServer 项目删掉/清除了。还有,做完这一步后别忘了重新启用 MVC 客户端配置的授权确认页(RequireConsent=true 标记)。

当前快速入门的样例代码已经为你完成了这些步骤,所以你可以快速地开始使用所有这些特性。祝你愉快!

目 录

上一篇:IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问

下一篇:IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端

IdentityServer4 中文文档 -14- (快速入门)使用 ASP.NET Core Identity的更多相关文章

  1. IdentityServer4 中文文档 -16- (快速入门)使用 EntityFramework Core 存储配置数据

    IdentityServer4 中文文档 -16- (快速入门)使用 EntityFramework Core 存储配置数据 原文:http://docs.identityserver.io/en/r ...

  2. IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端

    IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端 原文:http://docs.identityserver.io/en/release/quicks ...

  3. IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问

    IdentityServer4 中文文档 -13- (快速入门)切换到混合流并添加 API 访问 原文:http://docs.identityserver.io/en/release/quickst ...

  4. IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持

    IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持 原文:http://docs.identityserver.io/en/release/quickstarts/4_e ...

  5. IdentityServer4 中文文档 -11- (快速入门)添加基于 OpenID Connect 的用户认证

    IdentityServer4 中文文档 -11- (快速入门)添加基于 OpenID Connect 的用户认证 原文:http://docs.identityserver.io/en/releas ...

  6. IdentityServer4 中文文档 -8- (快速入门)设置和概览

    IdentityServer4 中文文档 -8- (快速入门)设置和概览 原文:http://docs.identityserver.io/en/release/quickstarts/0_overv ...

  7. IdentityServer4 中文文档 -9- (快速入门)使用客户端凭证保护API

    IdentityServer4 中文文档 -9- (快速入门)使用客户端凭证保护API 原文:http://docs.identityserver.io/en/release/quickstarts/ ...

  8. IdentityServer4 中文文档 -10- (快速入门)使用密码保护API

    IdentityServer4 中文文档 -10- (快速入门)使用密码保护API 原文:http://docs.identityserver.io/en/release/quickstarts/2_ ...

  9. IdentityServer4 中文文档 -7- (简介)贡献

    IdentityServer4 中文文档 -7- (简介)贡献 原文:http://docs.identityserver.io/en/release/intro/contributing.html ...

随机推荐

  1. pair在vector和map中的使用

    #include <iostream> #include <cstdio> #include <cstring> #include <stack> #i ...

  2. Shell文本操作-5

  3. matplotlib&numpy画图

    import numpy as np import matplotlib.pyplot as plt x=np.linspace(0,6,100) y=np.cos(2*np.pi*x)*np.exp ...

  4. InetAddress and InetSocketAddress

    1.InetAddress(包含IP地址及主机名) InetAddress is = InetAddress.getLocalHost(); /* 通过静态方法获得本机的对象 */ System.ou ...

  5. kafka中zookeeper的操作

    bin/zookeeper-shell.sh localhost:2181 <<< "get /brokers/ids/4" ./zkCli.sh -server ...

  6. 为什么我们要使用int类型来保存时间类型的数据。

    1.如果数据保存的是timestamp类型那么,如果某个服务器系统时区配置错误,那么悲剧的是通过该服务器写入的时间都是有偏差的.  如果使用int类型保存unix时间戳的话,那么就是在前端展示的时候转 ...

  7. Java基础知识提要

    1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等   2. 简单写出Java特 ...

  8. 在ASP.NET Core MVC中构建简单 Web Api

    Getting Started 在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 ...

  9. 探秘JS的异步单线程

    对于通常的developer(特别是那些具备并行计算/多线程背景知识的developer)来讲,js的异步处理着实称得上诡异.而这个诡异从结果上讲,是由js的“单线程”这个特性所导致的. 我曾尝试用“ ...

  10. 《http权威指南》读书笔记14

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...