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 的 ConfigureServices 和 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(); 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. Mac下git配置

    1.下载git 2.配置key macdeMacBook-Pro:~ mac$ cd ~/.ssh macdeMacBook-Pro:.ssh mac$ ssh-keygen -t rsa -C &q ...

  2. 2019/3/7 Java学习之多线程(基础)

    Java学习之多线程 讲到线程,就必须要懂得进程,进程是相当于一个程序的开始到结束,而线程是依赖于进程的,没有进程,就没有线程.线程也分主线程和子线程,当在主线程开启子线程时,主线程结束,而子线程还可 ...

  3. 2018年2月19日我的java学习(——)

    在学完了类和对象的时候,开始对面向对象的思想有了一点认识,不过也不是完全的理解了. 就现在的学习状态来说,是非常的不错的,但是在学习的内容来说,我学的好像只是跟随这 站长的思路而已,也许是经验不足吧. ...

  4. lightoj 1074

    这题怎么说呢,负环上的点都不行 网上也有很多解法 我用dfs的spfa解的 我发现网上别人的代码都是用bfs的spfa写的,我就用的dfs的,快了好多 代码还看的别人的,只有中间的spfa是自己写的 ...

  5. 虚拟机找不到/mnt/hgfs挂载目录——debian与 vmware

    如果在安装好 VMware Tools 并在设置里面设定好共享目录之后仍然找不到 /mnt/hgfs 默认挂载目录,那么尝试以下步骤: 1. 确认VMware Tools 和共享目录设定已经完成: 2 ...

  6. PHP+XML写注册登录

    2018/12/06  今天尝试了下PHP   使用PHP+XML写注册登录   具体保存于上传的文件中 从此山水不相逢  莫问他人长与短

  7. job定时任务

    1,定时任务依赖的执行类 2.引入job 3.执行时间 4.管理job

  8. SpringBoot 通过 Exploded Archives 的方式部署

    之前部署 SpringBoot 一直是用可执行 jar 的方式. java -jar codergroup-1.0.0.jar 就可以启动项目,为了能在后台运行,通常我们会使用这行命令 nohup j ...

  9. 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8

    原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...

  10. Javascript高级编程学习笔记(77)—— 表单(5)过滤输入

    在日常实践中,我们常常会需要用户按照某种规则输入数据 但是文本框在默认情况下缺少验证数据的手段,因此需要使用JS来完成此类过滤输入的操作 通过事件和DOM的结合手段就能够将普通的文本框转换为功能型控件 ...