概览

现代应用程序看上去大都是这样的:

最常见的交互是:

  • 浏览器与Web应用程序通信
  • Web应用程序与Web API通信(有时是独立的,有时是代表用户的)
  • 基于浏览器的应用程序与Web API通信
  • 本机应用程序与Web API通信
  • 基于服务器的应用程序与Web API通信
  • Web API与Web API通信(有时是独立的,有时是代表用户的)

通常,每一层(前端,中间层和后端)都必须保护资源并实施身份验证和/或授权-经常针对同一用户存储。

将这些基本安全功能外包给安全令牌服务可防止在那些应用程序和端点之间重复该功能。

重组应用程序以支持安全令牌服务将导致以下体系结构和协议:

这样的设计将安全问题分为两个部分:

身份认证

当应用程序需要知道当前用户的身份时,需要进行身份验证。通常,这些应用程序代表该用户管理数据,并且需要确保该用户只能访问允许其访问的数据。最常见的示例是(经典)Web应用程序,但是本机和基于JS的应用程序也需要身份验证。

最常见的身份验证协议是SAML2p,WS-Federation和OpenID Connect-SAML2p是最受欢迎和部署最广泛的协议。

OpenID Connect是三者中的最新者,但被认为是未来,因为它在现代应用程序中具有最大的潜力。它从一开始就针对移动应用程序场景而构建,并旨在实现API友好。

API访问

应用程序有两种与API通信的基本方式-使用应用程序身份或委派用户身份。有时两种方法需要结合。

OAuth2是一种协议,允许应用程序从安全令牌服务请求访问令牌并使用它们与API通信。由于可以集中身份验证和授权,因此这种委派降低了客户端应用程序和API的复杂性。

OpenID Connect和OAuth 2.0 –更好的结合在一起

OpenID Connect和OAuth 2.0非常相似-实际上,OpenID Connect是OAuth 2.0的扩展。身份验证和API访问这两个基本的安全问题被组合成一个协议-通常只需一次往返于安全令牌服务。

我们相信OpenID Connect和OAuth 2.0的结合是在可预见的将来保护现代应用程序的最佳方法。IdentityServer4是这两个协议的实现,并且经过高度优化,可以解决当今移动,本机和Web应用程序中的典型安全问题。

IdentityServer4如何提供帮助

IdentityServer是将符合规范的OpenID Connect和OAuth 2.0端点添加到任意ASP.NET Core应用程序的中间件。

通常,您构建(或重复使用)包含登录和注销页面(可能还需要您同意-取决于您的需要)的应用程序,IdentityServer中间件会向其中添加必要的协议头,以便客户端应用程序可以与之对话使用那些标准协议。

你可以根据你的需要使用尽可能复杂的宿主应用程序。但是,为了保持受攻击面尽可能小, 我们一般建议你只将认证相关的UI包含进来。

相关术语

IdentityServer

IdentityServer 是一个 OpenID Connect 提供程序 —— 它实现了OpenID Connect 和 OAuth2 协议。

对于相同的角色,不同的文献将使用不同的术语 —— 你可能也发现了安全令牌服务(Security Token Service),身份提供程序(Identity Provider),授权服务器(Authorization Server),IP-STS 等等。但是他们都具相同的含义:软件中用来向客户端发行安全令牌的部分。

IdentityServer 包含一些职责和功能:

  • 保护你的资源
  • 使用本地账户存储或外部的身份提供程序来进行用户身份认证
  • 提供会话管理和单点登录(Single Sign-on)
  • 客户端管理和认证
  • 给客户端发行身份令牌和访问令牌
  • 验证令牌

用户

用户是通过已注册客户端访问相关数据的人。

客户端

客户端是软件中从 IdentityServer 请求令牌(Token)的部分 —— 既可以是为了认证一个用户(即请求的是 身份令牌),也可以是为了访问一个资源(即请求的是 访问令牌)。一个客户端必须首先注册到 IdentityServer 才能请求相关的令牌。

客户端可以是Web应用程序、移动客户端或桌面应用程序、单页面应用程序(SPA,Single Page Application)、服务器进程等等。

资源

资源就是你想要通过 IdentityServer 保护的东西 —— 既可以是你的用户的 身份信息,也可以是 API。

每个资源都有唯一的名称 —— 客户端使用这些名称来指定他们想要访问的资源。

身份数据(Identity data) 是一个用户的身份信息(又称为 claims),比如 名字(name) 和 邮箱地址(email address)。

API 资源表示的是客户端想要调用的功能 —— 通常通过 Web API 来对 API 资源建模,但这不是必须的。

身份令牌

一个身份令牌表示的是认证过程的输出。它最低限度地标识了某个用户(这也可以称为主身份信息的子集,原文:Called the sub aka subject claim),还包含了用户的认证时间和认证方式。身份令牌可以包含额外的身份数据。

访问令牌

访问令牌用来授予访问某个 API 资源的权限。客户端请求访问令牌,然后被导向 API。访问令牌包含了客户端和用户(如果提供了的话)的相关信息,API通过这些信息来给它们授予数据访问权限。

参考:http://docs.identityserver.io/

asp.net core IdentityServer4 概述的更多相关文章

  1. ASP.NET Core MVC 概述

    https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-2.2 ASP.NET Core MVC 概述 20 ...

  2. Asp.Net Core IdentityServer4 中的基本概念

    一.前言 这篇文章可能大家会觉得很空洞,没有实际的实战东西,主要是自己整理出来的IdentityServer4 的一些概念性的东西:如果你对IdentityServer4有过一定的实战经验,可以跳过不 ...

  3. ASP.NET Core模块概述

    原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...

  4. Asp.net Core IdentityServer4 入门教程(一):概念解析

    目录 1.IdentityServer4 是什么 2.什么是OpenID和OAuth 2.0协议 3.IdentityServer4 可以用来做什么 其他 1.IdentityServer4 是什么 ...

  5. Asp.Net Core IdentityServer4 管理面板集成

    前言 IdentityServer4(以下简称 Id4) 是 Asp.Net Core 中一个非常流行的 OpenId Connect 和 OAuth 2.0 框架,可以轻松集成到 Asp.Net C ...

  6. ASP.NET Core原理概述

    ASP.NET Core 是一个控制台应用程序,在其 main 方法中创建一个Web服务器,以下是program.cs中的代码: using Microsoft.AspNetCore; using M ...

  7. ASP.NET Core DI概述

    众所周知,ASP.NET Core有一个DI框架,应用程序启动时初始化. 预定义依赖 1: IApplicationBuilder:提供了配置应用程序的请求管道机制 2:ILoggerFactory: ...

  8. Asp.net core IdentityServer4与传统基于角色的权限系统的集成

    写在前面 因为最近在忙别的,好久没水文了 今天来水一篇: 在学习或者做权限系统技术选型的过程中,经常有朋友有这样的疑问 : "IdentityServer4的能不能做到与传统基于角色的权限系 ...

  9. ASP.NET Core IdentityServer4 新手上路

    OAuth2.0资料 今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准(如果是按照参考文章复制粘贴,应该不会出现踩坑,但是我喜欢自己手动敲一遍),发现几个坑,因而总 ...

随机推荐

  1. mysql的优化策略

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  2. Python学习 之 Python入门

    第二章 Python入门 2.1 环境安装 2.1.1 下载解释器: py2.7.16 (2020年官方不再维护) py3.6.8 (推荐安装) 1.下载解释器一定去官网下载,https://www. ...

  3. 企查查app (二)

    企查查app sign算法破解 已删除!!!! 这次我们又找到设备id,现在就只差aXM这个了. 关注小白公众号,小白带你成长.

  4. HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】

    每篇一句 黄金的导电性最好,为什么电脑主板还是要用铜? 飞机最快,为什么还有人做火车? 清华大学最好,为什么还有人去普通学校? 因为资源都是有限的,我们现实生活中必须兼顾成本与产出的平衡 前言 上文 ...

  5. PythonI/O进阶学习笔记_3.1面向对象编程_python的多态和鸭子类型

    前言: 与第一篇的面向对象内容不同的是,第一篇中的面向对象更多的是与类.对象结合起来的概念粗浅理解,就是在编程历史中诞生的一种思想方法. 这篇的面向对象编程,更多落实到在语言设计实现中,是如何体现面向 ...

  6. Flink中Periodic水印和Punctuated水印实现原理(源码分析)

    在用户代码中,我们设置生成水印和事件时间的方法assignTimestampsAndWatermarks()中这里有个方法的重载 我们传入的对象分为两种 AssignerWithPunctuatedW ...

  7. Apache—dbutils开源JDBC工具类库简介

    Apache—dbutils开源JDBC工具类库简介 一.前言 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用 ...

  8. DOM操作(基础版)

    DOM操作(基础版) DOM是document Object Model的缩写,简称文档对象模型.只要记住这是操作文档的就行了. DOM基础选择器 1.getElementById(id); //获取 ...

  9. Python——常用模块(time/datetime, random, os, shutil, json/pickcle, collections, hashlib/hmac, contextlib)

    1.time/datetime 这两个模块是与时间相关的模块,Python中通常用三种方式表示时间: #时间戳(timestamp):表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. ...

  10. Python Web Flask源码解读(二)——路由原理

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...