接上一篇,众所周知一个网站的用户登录是非常重要,一站式的登录(SSO)也成了大家讨论的热点。微软在这个Demo中,把登录单独拉了出来,形成了一个Service,用户的注册、登录、找回密码等都在其中进行。
这套service是基于IdentityServer4开发的, 它是一套基于 .Net Core的OAuth2和OpenID框架,这套框架目前已经很完善了,我们可以把它使用到任何项目中。
我们先看下目录结构:
frameborder="0" scrolling="no" style="border-width: medium; width: 470px; height: 421px;">
从目录结构可以看出它是一套MVC架构的网站,我们可以单独进行运行和调试,当然,我们也可以把它放进自己的项目中。
从.Net Core开始,我们看代码的顺序从Web.config转到了Program.cs中,我们来看下IdentityService的Program:
public class Program { public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseHealthChecks("/hc") //多了一个健康检查 .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); } }
跟普通的.Net Core项目类似,不过多了一个UseHealthChecks,从名字上也能看出,这是一个对项目健康的检查,有兴趣的话到时候我们另外开篇介绍。看完Program我们看下Startup
在初始化的时候,我们看到的代码基本与系统相同,多了一个加入builder.AddUserSecrets(), 这是一个用户信息加密方法,避免我们在提交共享项目的时候,会把自己一些重要信息泄露,有兴趣的朋友可以看下Secret Manager Tools。
在ConfigureServices中,我们看到有一段代码:
services.AddDataProtection(opts => { opts.ApplicationDiscriminator = "eshop.identity"; });
这段代码意思是加了一个唯一标示符给应用程序,这在集群环境中是非常必要的,我们可以通过这个唯一标识来判断是否是同一个应用(我们的同一应用可能会分布在不同server上),具体可以看园内大神的专题:Asp.Net Core 数据保护
Going Down:
services.AddHealthChecks(checks => { var minutes = 1;
if (int.TryParse(Configuration["HealthCheck:Timeout"], out v