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. python中的三种输入方式

    python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...

  2. stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h文件作用

    如上图,在STM32的Keil工程文件(Project)中一般都包含stm32f10x_it.c.stm32f10x_it.h和stm32f10x_conf.h这三个文件,但是在ST官方提供的标准库“ ...

  3. 从git远程仓库Checkout项目到本地

    一.登录coding  并且项目已创建好  已经是项目的组员 二.打开idea 1.弹出如下页面  复制远程项目上的SSH(URL)到下框URL 并且Test测试 成功就Clone即可 2.Clone ...

  4. Nginx 教程(2):性能

    tcp_nodelay, tcp_nopush 和 sendfile tcp_nodelay 在 TCP 发展早期,工程师需要面对流量冲突和堵塞的问题,其中涌现了大批的解决方案,其中之一是由 John ...

  5. web实验博客3.css-position

    css-position属性为块级元素的定位提供了可能,今天我将讲述我所了解的position属性. div.h.p元素都可以称为块级元素,display属性可以改变其框类型,其值可以对框进行设置,默 ...

  6. Android中屏幕保持唤醒

    1.锁的类型 PowerManager中各种锁的类型对CPU .屏幕.键盘的影响: PARTIAL_WAKE_LOCK : 保持CPU 运转,屏幕和键盘灯有可能是关闭的. SCREEN_DIM_WAK ...

  7. 数值计算 的bug:(理论)数学上等价,实际运行未必等价

    1. 计算表达式的值(lambda 表达式) fun1 和 fun2 理论上是等价的:同样的输入情形下,两种输出结果不一致. # fun1 定义 fun1=lambda x:sqrt(x+1)-sqr ...

  8. Linux(Centos平台)RabbitMQ消息中间件服务器搭建

    本篇结合接口测试平台部署来讲,不了解的请先查看我的另一篇文档,HttpRunnerManager接口测试平台部署在服务器上(Centos + python3.6 + Mysql5.7 + uwsgi ...

  9. onload事件与ready事件的区别,原生js与jquery的区别

    onload事件与ready事件分别是原生js与jquery的入口函数 原生js入口函数写法: window.onload=function(){ } jquery入口函数写法: $(document ...

  10. [转]MySQL 清空慢查询文件

    概述 本章主要写当慢查询文件很大的时候怎样在线生成一个新的慢查询文件. 测试环境:mysql 5.6.21 步骤 配置慢查询 默认的my.cnf文件在/etc/目录下 vim /etc/my.cnf ...