一. IDS4简介
1. 什么是IDS4
IdentityServer是基于OpenID Connect协议标准的身份认证和授权程序,它实现了OpenID 和 OAuth 2.0 协议。
2. 相关地址
(1).官网:https://identityserver4.readthedocs.io/en/3.1.0/
(2).GitHub地址:https://github.com/IdentityServer
(2).三方中文文档:http://www.identityserver.com.cn/Home/Detail/Zhengtizongshu
3. IDS4有哪些功能
(1).身份认证服务(官方认证的OpenID Connect实现)
(2).单点登录与注销(SSO)
(3).访问受控的Api
4. IDS4的内部概念
(1).用户-User
使用已注册的客户端(指在id4中已经注册)访问资源的人。
(2).客户端-Client (即第三方应用)
客户端就是从identityserver请求令牌的软件(你可以理解为一个app即可),既可以通过身份认证令牌来验证识别用户身份,又可以通过授权令牌来访问服务端的资源。但是客户端首先必须在申请令牌前已经在identityserver服务中注册过。实际客户端不仅可以是Web应用程序,app或桌面应用程序(你就理解为pc端的软件即可),SPA,服务器进程等。
(3).资源-Resources
资源就是你想用identityserver保护的东西,可以是用户的身份数据或者api资源。每一个资源都有一个唯一的名称,客户端使用这个唯一的名称来确定想访问哪一个资源(在访问之前,实际identityserver服务端已经配置好了哪个客户端可以访问哪个资源,所以你不必理解为客户端只要指定名称他们就可以随便访问任何一个资源)
(4).身份令牌(d_token jwt)
一个身份令牌指的就是对认证过程的描述。它至少要标识某个用户(Called the sub aka subject claim)的主身份信息,和该用户的认证时间和认证方式。但是身份令牌可以包含额外的身份数据,具体开发者可以自行设定,但是一般情况为了确保数据传输的效率,开发者一般不做过多额外的设置,大家也可以根据使用场景自行决定。
(5).访问令牌(access_token oauth 2.0)
访问令牌允许客户端访问某个 API 资源。客户端请求到访问令牌,然后使用这个令牌来访问 API资源。访问令牌包含了客户端和用户(如果有的话,这取决于业务是否需要,但通常不必要)的相关信息,API通过这些令牌信息来授予客户端的数据访问权限。
5. IDS4的几种模式
(1).客户端模式:ClientCredentials
(2).用户名密码模式:ResourceOwnerPassword
(3).隐式模式(简化模式):implicit
(4).授权码模式:Code
除此之外,还有多种模式共存,比如: 客户端+用户名密码模式 ResourceOwnerPasswordAndClientCredentials
二. 客户端模式
1. 模式深究
(1). 含义
指【客户端(也就是 第三方应用)】以自己的名义,而不是以用户的名义,向【服务提供商】的【认证服务器】进行认证。严格地说,客户端模式并不属于OAuth2.0 框架所要解决的问题。在这种模式中,【用户】直接向【客户端】注册,【客户端】以自己的名义要求【服务提供商】提供服务,其实不存在授权问题。
(2). 运行流程
步骤:
A. 客户端(第三方应用)向认证服务器发送请求进行身份认证,并要求得到一个访问令牌Token。
B. 认证服务器确认无误后(认证),向客户端颁发访问令牌Token(授权)。
C. 客户端拿到访问令牌(token),向资源服务器发送请求,获取需要的信息。(上图中没有画)
2. 基于IDS4代码实操
三. 用户名密码模式
1. 模式深究
(1). 含义:
用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。
在这种模式中,用户必须把自己的账号和密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。
(2). 运行流程:
步骤:
A. 用户向客户端提供用户名和密码。
B. 客户端将用户名和密码发给认证服务器,并要求得到一个访问令牌Token。
C. 认证服务器确认无误后(认证),向客户端颁发访问令牌Token(授权)。
D. 客户端拿到访问令牌(token),向资源服务器发送请求,获取需要的信息。(上图中没有画)
2. 基于IDS4代码实操
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 声 明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。