.Net Core使用IdentityServer4(未完待续)

IdentityServer4是一个框架,IdentityServer4是为ASP.NET CORE量身定制的实现了OpenId Connect和OAuth2.0协议的认证授权中间件。OpenId用于身份认证(Authentication) OAuth2.0 用于授权(Authorization)  OpenId Connect = OIDC = (Identity, Authentication) + OAuth2.0

OAuth 整体流程图:

.Net Core使用IdentityServer4(未完待续)

OIDC使用OAuth2的授权服务器来为第三方客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端,且可以适用于各种类型的客户端(比如服务端应用,移动APP,JS应用),且完全兼容OAuth2,也就是说你搭建了一个OIDC的服务后,也可以当作一个OAuth2的服务来用。应用场景如图:

.Net Core使用IdentityServer4(未完待续)

IdentityServer4功能特性

  • Authentication as a Service:可以为你的应用(如网站、本地应用、移动端、服务)做集中式的登录逻辑和工作流控制。IdentityServer是完全实现了OpenID Connect协议标准
  • Single Sign-on / Sign-out:在多个应用程序类型上进行单点登录(和单点退出)。
  • Access Control for APIs:为不同类型的客户端,例如服务器到服务器、web应用程序、SPAs和本地/移动应用程序,发出api的访问令牌。
  • Federation Gateway:支持来自Azure Active Directory, Google, Facebook这些知名应用的身份认证,可以不必关心连接到这些应用的细节就可以保护你的应用。
  • Focus on Customization:最重要的是identityserver可以根据需求自行开发来适应应用程序的变化。identityserver不是一个框架、也不是一个盒装产品或一个saas系统,您可以编写代码来适应各种场景。

IdentityServer是将规范兼容的OpenID Connect和OAuth 2.0端点添加到任意ASP.NET Core应用程序的中间件。通常,您构建(或重新使用)包含登录和注销页面的应用程序,IdentityServer中间件会向其添加必要的协议头,以便客户端应用程序可以与其对话 使用这些标准协议。

 

IdentityServer4 默认支持两种类型的 Token,一种是 Reference Token,一种是 JWT Token 。前者的特点是 Token 的有效与否是由 Token 颁发服务集中化控制的,颁发的时候会持久化 Token,然后每次验证都需要将 Token 传递到颁发服务进行验证,是一种中心化的比较传统的验证方式。JWT Token 的特点与前者相反,每个资源服务不需要每次都要都去颁发服务进行验证 Token 的有效性验证,该 Token 由三部分组成,其中最后一部分包含了一个签名,是在颁发的时候采用非对称加密算法(最新的JWT Token)进行数据签名的,保证了 Token 的不可篡改性,保证了安全,与颁发服务的交互,仅仅是获取公钥用于验证签名,且该公钥获取以后可以自己缓存,持续使用,不用再去交互获得,除非Token包含的 keyid 对应的 公钥没被缓存(新的),就会再次向颁发服务获取。流程图:

.Net Core使用IdentityServer4(未完待续)

1、创建ASP.NET Core Web应用程序,选择空模板。

2、添加nuget包:IdentityServer4。

.Net Core使用IdentityServer4(未完待续)

 

 

 3、添加Config.cs文件作为IdentityServer配置文件,用于定义IdentityServer资源和客户端等。

.Net Core使用IdentityServer4(未完待续)

 

 

 4、Startup配置IdentityServer。

//使用IdentityServer中间件,必须放到 UseRouting 与 UseEndpoints 之间。
            app.UseIdentityServer();
 //注册IdentityServer中间件
            var builder = services.AddIdentityServer(options =>
            {
                options.Events.RaiseErrorEvents = true;
                options.Events.RaiseInformationEvents = true;
                options.Events.RaiseFailureEvents = true;
                options.Events.RaiseSuccessEvents = true;
            });
            //配置测试用户
            builder.AddTestUsers(TestUsers.Users);

            // in-memory, code config
            //预置身份资源
            builder.AddInMemoryIdentityResources(Config.Ids);
            //配置API资源
            builder.AddInMemoryApiResources(Config.Apis);
            //预置允许验证的Client
            builder.AddInMemoryClients(Config.Clients);

 

.Net Core使用IdentityServer4(未完待续)

上一篇:com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server


下一篇:WebFlux- WebClient(二)