eShopOnContainers 看微服务③:Identity Service

通常,服务所公开的资源和 API 必须仅限受信任的特定用户和客户端访问。那进行 API 级别信任决策的第一步就是身份认证——确定用户身份是否可靠。

微服务场景中,身份认证通常统一处理。一般有两种实现形式:

基于API 网关中心化认证:要求客户端必须都通过网关访问微服务。(这就要求提供一种安全机制来认证请求是来自于网关。)

eShopOnContainers 看微服务③:Identity Service

 

基于安全令牌服务(STS)认证:所有的客户端先从STS获取令牌,然后请求时携带令牌完成认证。

eShopOnContainers 看微服务③:Identity Service

 

Identity Service就是使用第二种身份认证方式。

Identity microservice 主要用于统一的身份认证和授权,为其他服务提供支撑。

提到认证,大家最熟悉不过的当属Cookie认证了,它也是目前使用最多的认证方式。但Cookie认证也有其局限性:不支持跨域、移动端不友好等。而从当前的架构来看,需要支持移动端、Web端、微服务间的交叉认证授权,所以传统的基于Cookie的本地认证方案就行不通了。我们就需要使用远程认证的方式来提供统一的认证授权机制。
而远程认证方式当属:OAuth2.0和OpenID Connect了。借助OAuth2.0和OpenID Connect即可实现类似下图的认证体系:

eShopOnContainers 看微服务③:Identity Service

而如何实现呢,借助:

ASP.NET Core Identity

IdentityServer4

基于Cookie的认证和基于Token的认证的差别如下所示:

eShopOnContainers 看微服务③:Identity Service

 

 

从目录结构可以看出它是一套MVC单层架构的网站。我们可以单独进行运行和调试,也可以把它放进自己的项目中。

 

eShopOnContainers 看微服务③:Identity Service

主要依赖:

1、HealthCheck 健康检查

2、WebHost

3、Entity Framework

4、Autofac

5、IdentityServer4

6、其中IdentityServer4.AspNetIdentity又用到了ASP.NET Core Identity

 

 

Program.cs

   Main函数:

eShopOnContainers 看微服务③:Identity Service

eShopOnContainers 看微服务③:Identity Service

1 public static void Main(string[] args) 2 { 3 BuildWebHost(args) 4 .MigrateDbContext<PersistedGrantDbContext>((_, __) => { }) 5 .MigrateDbContext<ApplicationDbContext>((context, services) => 6 { 7 var env = services.GetService<IHostingEnvironment>(); 8 var logger = services.GetService<ILogger<ApplicationDbContextSeed>>(); 9 var settings = services.GetService<IOptions<AppSettings>>(); 10 11 new ApplicationDbContextSeed() 12 .SeedAsync(context, env, logger, settings)//初始化默认登录用户种子数据 13 .Wait(); 14 }) 15 .MigrateDbContext<ConfigurationDbContext>((context, services) => 16 { 17 var configuration = services.GetService<IConfiguration>(); 18 19 new ConfigurationDbContextSeed() 20 .SeedAsync(context, configuration)//初始化identity server种子数据 21 .Wait(); 22 }).Run(); 23 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywdxy.html