一、前言

上一篇中,我们IdentityServer4的说明,认识到是一个基于OpenID Connect协议标准的身份认证和授权程序,并简单的对基础知识的认识以及区别说明,从OAuth、OpenID、OpenID Connect以及JWT等进行对比区别说明。

而在这一篇中,我们主要对IdentityServer4中涉及使用的特定的相关术语进行说明。

二、术语

2.1 身份认证服务器(IdentityServer)

IdentityServer 是基于OpenID Connect协议标准的身份认证和授权程序,它实现了OpenID Connect 和 OAuth 2.0 协议。

同样的角色,不同的文档使用不同的术语。在有些文档中,它(IdentityServer)可能会被叫做安全令牌服务器(security token service)、身份提供者(identity provider)、授权服务器(authorization server)、 标识提供方((IP-STS,什么是IP-STS)等等。

但是它们都是一样的,都是向客户端发送安全令牌(security token),

IdentityServer有许多功能:

  • 保护你的资源
  • 使用本地帐户或通过外部身份提供程序对用户进行身份验证
  • 提供会话管理和单点登录
  • 管理和验证客户机
  • 向客户发出标识和访问令牌
  • 验证令牌

2.2 用户(User)

用户是使用已注册的客户端访问资源的人。

指在id4中已经注册的用户

2.3 客户端(Client)

客户端就是从identityserver请求令牌的软件,既可以通过身份认证令牌来验证识别用户身份,又可以通过授权令牌来访问服务端的资源。但是客户端首先必须在申请令牌前已经在identityserver服务中注册过。

实际客户端不仅可以是Web应用程序,app或桌面应用程序,SPA,服务器进程等。

客户端:web、app、桌面应用、SPA、服务器进程

2.4 资源(Resources)

资源就是你想用identityserver保护的东西,可以是用户的身份数据或者api资源。

每一个资源都有一个唯一的名称,客户端使用这个唯一的名称来确定想访问哪一个资源

在访问之前,实际identityserver服务端已经配置好了哪个客户端可以访问哪个资源,所以你不必理解为客户端只要指定名称他们就可以随便访问任何一个资源

用户的身份信息实际由一组claim组成,例如姓名或者邮件都会包含在身份信息中。

用户身份信息将来通过identityserver校验后都会返回给被调用的客户端

API资源就是客户端想要调用的功能——通常通过 Web API 来对 API 资源建模,但这不是必须的,如下说明:

通常以json或xml的格式返回给客户端,例如webapi,wcf,webservice,可以使其他类型的格式,这个要看具体的使用场景了。

2.5 身份令牌(Id Token)

OIDC对OAuth2最主要的扩展就是提供了ID Token。来解决第三方客户端标识用户身份认证的问题。

OIDC的核心在于在OAuth2的授权流程中,一并提供用户的身份认证信息(ID Token)给到第三方客户端,ID Token使用JWT格式来包装,得益于JWT(JSON Web Token)的自包含性,紧凑性以及防篡改机制,使得ID Token可以安全的传递给第三方客户端程序并且容易被验证。此外还提供了UserInfo的接口,用户获取用户的更完整的信息。

ID Token是一个安全令牌,表示的是认证过程的输出,是一个授权服务器提供的包含用户信息,还包含了用户的认证时间和认证方式。身份令牌可以包含额外的身份数据。

由一组Cliams构成以及其他辅助的Cliams的JWT格式的数据结构组成。

ID Token的主要构成部分如下(使用OAuth2流程的OIDC)。

  1. iss = Issuer Identifier:必须。提供认证信息者的唯一标识。一般是一个https的url(不包含querystring和fragment部分)。
  2. sub = Subject Identifier:必须。iss提供的EU的标识,在iss范围内唯一。它会被RP用来标识唯一的用户。最长为255个ASCII个字符。
  3. aud = Audience(s):必须。标识ID Token的受众。必须包含OAuth2的client_id。
  4. exp = Expiration time:必须。过期时间,超过此时间的ID Token会作废不再被验证通过。
  5. iat = Issued At Time:必须。JWT的构建的时间。
  6. auth_time = AuthenticationTime:EU完成认证的时间。如果RP发送AuthN请求的时候携带max_age的参数,则此Claim是必须的。
  7. nonce:RP发送请求的时候提供的随机字符串,用来减缓重放攻击,也可以来关联ID Token和RP本身的Session信息。
  8. acr = Authentication Context Class Reference:可选。表示一个认证上下文引用值,可以用来标识认证上下文类。
  9. amr = Authentication Methods References:可选。表示一组认证方法。
  10. azp = Authorized party:可选。结合aud使用。只有在被认证的一方和受众(aud)不一致时才使用此值,一般情况下很少使用。

ID Token通常情况下还会包含其他的Claims。

(毕竟上述claim中只有sub是和EU相关的,这在一般情况下是不够的,必须还需要EU的用户名,头像等其他的资料,OIDC提供了一组公共的cliams,请移步这里http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims)。另外ID Token必须使用JWS进行签名和JWE加密,从而提供认证的完整性、不可否认性以及可选的保密性。

简而言之ID Token就是JWT格式的数据,包含一个人类用户的身份认证的信息,一个ID Token的例子如下:

2.6 访问令牌(Access Token)

访问令牌允许客户端访问某个 API 资源。客户端请求到访问令牌,然后使用这个令牌来访问 API资源。访问令牌包含了客户端和用户(如果有的话,这取决于业务是否需要,但通常不必要)的相关信息,API通过这些令牌信息来授予客户端的数据访问权限。

OAuth2提供了Access Token来解决授权第三方客户端访问受保护资源的问题;

2.7 刷新令牌(Refresh Token)

Access Token 是客户端访问资源服务器的令牌。拥有这个令牌代表着得到用户的授权。然而,这个授权应该是临时的,有一定有效期。这是因为,Access Token 在使用的过程中可能会泄露。给 Access Token 限定一个较短的有效期可以降低因 Access Token 泄露而带来的风险。

然而引入了有效期之后,客户端使用起来就不那么方便了。每当 Access Token 过期,客户端就必须重新向用户索要授权。这样用户可能每隔几天,甚至每天都需要进行授权操作。这是一件非常影响用户体验的事情。希望有一种方法,可以避免这种情况。

于是 Oauth2.0 引入了 Refresh Token 机制。Refresh Token 的作用是用来刷新 Access Token。鉴权服务器提供一个刷新接口,例如:

http://xxx.xxx.com/refresh?refreshtoken=&client_id=

传入 refresh token 和 client_id,鉴权服务器验证通过后,返回一个新的 access token。为了安全,Oauth2.0 引入了两个措施:

1,Oauth2.0 要求,refresh token 一定是保存在客户端的服务器上的,而绝不能存放在狭义的客户端(例如移动 app、PC端软件) 上。调用 refresh 接口的时候,一定是从服务器到服务器的访问;

2,Oauth2.0 引入了 client_secret 机制。即每一个 client_id 都对应一个 client_secret。这个 client_secret 会在客户端申请 client_id 时,随 client_id 一起分配给客户端。客户端必须把 client_secret 妥善保管在服务器上,决不能泄露。刷新 access token 时,需要验证这个 client_secret。

于是,实际上的刷新接口应该是类似这样的:

http://xxx.xxx.com/refresh?refreshtoken=&client_id=&client_secret=

以上就是 Refresh Token 机制。 Refresh Token 的有效期非常长,会在用户授权时,随 Access Token 一起重定向到回调 url,传递给客户端。

三、总结

  1. 本篇主要是对IdentityServer4的说明,以及其中涉及常见的术语的表述说明。
  2. 从身份认证服务器、用户、客户端、资源以及各个令牌等进行对比区别说明。
  3. 在后续中会对多种授权模式,数据库持久化以及UI界面优化和常见问题,搭建一个完整可用的认证授权项目。
  4. 如果有不对的或不理解的地方,希望大家可以多多指正,提出问题,一起讨论,不断学习,共同进步。

四、参考

Terminology——常见术语

IdentityServer4系列 | 常见术语说明的更多相关文章

  1. IdentityServer4系列 | 快速搭建简易项目

    一 .前言 从上一篇关于 常见术语说明中,主要是对IdentityServer4的说明,以及其中涉及常见的术语的表述说明,包括对身份认证服务器.用户.客户端.资源以及各个令牌等进行对比区别说明. 而在 ...

  2. IdentityServer4系列之中文文档及实际项目经验分享

    0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来 ...

  3. MySQL死锁系列-常见加锁场景分析

    在上一篇文章<锁的类型以及加锁原理>主要总结了 MySQL 锁的类型和模式以及基本的加锁原理,今天我们就从原理走向实战,分析常见 SQL 语句的加锁场景.了解了这几种场景,相信小伙伴们也能 ...

  4. IdentityServer4系列 | 初识基础知识点

    前言 我们现在日常生活中,会使用各式各样的应用程序,层出不穷,其中有基于网页浏览方式的应用,有基于手机端的App,甚至有基于流行的公众号和小程序等等,这些应用,我们不仅要实现各个应用的功能之外,还要考 ...

  5. IdentityServer4系列 | 授权码模式

    一.前言 在上一篇关于简化模式中,通过客户端以浏览器的形式请求IdentityServer服务获取访问令牌,从而请求获取受保护的资源,但由于token携带在url中,安全性方面不能保证.因此,我们可以 ...

  6. istio之envoy常见术语及状态码

    基本术语 Downstream(下游):下游主机连接到 Envoy,发送请求并接收响应,即发送请求的主机. Upstream(上游):上游主机接收来自 Envoy 的连接和请求,并返回响应,即接受请求 ...

  7. Spark 学习笔记1 (常见术语 )

    本来没打算学Spark 的,不过时机很逗. 最膜拜的大神做spark分享,还是其中最好玩的notebook.这不就是另外一个 HUE吗,但感觉更好玩. 刚好新的Spark 2.x 要问世了,大神在组织 ...

  8. GPS导航仪常见术语解释

    摘自百度百科: 坐标(coordinate) 有2维.3维两种坐标表示,当GPS能够收到4颗及以上卫星的信号时,它能计算出本地的3维坐标:经度.纬度.高度,若只能收到3颗卫星的信号,它只能计算出2维坐 ...

  9. H264常见术语名称

    一.术语 帧(frame)和场(field):一帧包含一个亮度矩阵采样点和俩个对应的色度矩阵采样点,一帧包含俩个场:顶场和底场: 条带:特定条带组按光栅扫描顺序排列的整数个宏块或宏块对: 条带组:图像 ...

随机推荐

  1. Django之富文本(获取内容,设置内容)

    富文本 1.Rich Text Format(RTF) 微软开发的跨平台文档格式,大多数的文字处理软件都能读取和保存RTF文档,其实就是可以添加样式的文档,和HTML有很多相似的地方 图示 2.tin ...

  2. 如何使用捷映App制作朋友圈九宫格视频图片合集

    在刷朋友圈的过程中,看到九宫格的视频图片合集,带有酷炫的音效和动效,展现效果非常好,那么我们该如何制作呢?下面我为大家介绍. 第一步,我们需要在各大应用市场搜索[捷映视频制作]App,点击[安装]. ...

  3. 7. 组合你的UI

    1. UI布局关键概念 一个组合应用UI的根节点被称作Shell,一般只有一个Shell.Shell作为应用的主页,包含一个或者多个域.域是内容占位符,可以包含一个或者多个View.有很多控件可以作为 ...

  4. form表单ajax提交

    这里下面有两种  第一种是form表单里面添加了数据,并且含有上传的图片,第二种是from表单中不含有图片  只有普通数据 第一种form表单中包含有图片的类型: <form method=&q ...

  5. layuiu按钮

    1.关于layui图标 唯一要提的是这是一个矢量图标 因此可以像对待文字一样加上style = font-size  以及color属性 eg: <i class="layui-ico ...

  6. 从零开始实现ASP.NET Core MVC的插件式开发(九) - 升级.NET 5及启用预编译视图

    标题:从零开始实现ASP.NET Core MVC的插件式开发(九) - 如何启用预编译视图 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1399 ...

  7. OLTP与OLAP分析与比较

    (本文转载自Super_Mu的博客https://www.cnblogs.com/hhandbibi/p/7118740.html) 1.OLTP与OLAP的介绍 数据处理大致可以分成两大类:联机事务 ...

  8. 02 Filter过滤器

    Filter 一.Filter过滤器 Filter过滤器它是JavaWeb的三大组件之一.三大组件分别是:Servlet程序.Listener监听器.Filter过滤器 Filter过滤器是JavaE ...

  9. 验证rbd的缓存是否开启

    简单快速的在客户端验证rbd的cache是否开启 首先修改配置文件 在ceph.conf中添加: [client] rbd cache = true rbd cache writethrough un ...

  10. Python_Tips

    Python绝对路径与相对路径读写文件[上级目录: os.path.dirname(os.getcwd())] # coding:utf8 ''' 知识点:Python读写文件时候的相对路径与绝对路径 ...