整体概况

大多数现代应用程序看起来或多或少像这样:

最常见的交互是:

  • 浏览器与 Web 应用程序进行通信
  • Web 应用程序与 Web API 进行通信(有时是Web应用程序自己发起,有时代表用户发起)
  • 基于浏览器的应用程序与 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 来尽可能减小攻击面。

备注:原文地址:https://github.com/ganqiyin/IdentityServer4/blob/dev/docs_cn/intro/big_picture.rst

【IdentityServer4文档】- 整体情况的更多相关文章

  1. 【IdentityServer4文档】- 使用客户端凭据保护 API

    使用客户端凭据保护 API quickstart 介绍了使用 IdentityServer 保护 API 的最基本场景. 接下来的场景,我们将定义一个 API 和一个想要访问它的客户端. 客户端将在 ...

  2. 【IdentityServer4文档】- 术语&演示服务器和测试

    术语 你需要了解一下,规范.文档和对象模型使用的术语有哪些. IdentityServer IdentityServer 是一个 OpenID Connect 提供程序 - 它实现了 OpenID C ...

  3. 【IdentityServer4文档】- 贡献

    贡献 我们非常乐于接受社区贡献,但您应遵循一些指导原则,以便我们可以很方便的解决这个问题. 如何贡献? 最简单的方法是打开一个问题并开始讨论.然后,我们可以决定如何实现一个特性或一个变更.如果您即将提 ...

  4. 【IdentityServer4文档】- 使用密码保护 API

    使用密码保护 API OAuth 2.0 协议允许资源拥有者给客户端密码授权:客户端向令牌服务发送用户密码,以获取代表该用户的访问令牌. 该规范建议仅将“资源所有者密码授予”用于“可信”(或旧版)应用 ...

  5. 【IdentityServer4文档】- 启动和概览

    启动和概览 有两种基本的方式来启动一个新的 IdentityServer 项目: 从空项目开始(从头开始) 从 Visual Studio 的 ASP.NET Identity 模板开始 假如您从头开 ...

  6. 【IdentityServer4文档】- 支持和咨询选项

    支持和咨询选项 我们为 IdentityServer 提供多个免费和商业支持及咨询选项. 免费支持 免费支持是基于社区的,而且使用的是公共论坛 StackOverflow 有越来越多的使用 Ident ...

  7. 【IdentityServer4文档】- 支持协议

    IdentityServer 实现了以下协议: OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 ( ...

  8. 【IdentityServer4文档】- 打包和构建

    打包和构建 IdentityServer 由多个 nuget 软件包组成的. IdentityServer4 nuget | github 包含 IdentityServer 核心对象模型,服务和中间 ...

  9. 【IdentityServer4文档】- 欢迎来到 IdentityServer4

    欢迎来到 IdentityServer4 IdentityServer4 是一款包含和实现了 OpenID Connect 和 OAuth 2.0 协议的,适用于 ASP.NET Core 的框架 . ...

随机推荐

  1. CentOS6.5 虚拟机 磁盘扩容

    1. 关闭虚拟机 2. 编辑虚拟机设置:增加硬盘的置备大小,或者添加新的硬盘 3. 启动虚拟机,查看可用磁盘大小 : # df -Th Filesystem Type Size Used Avail ...

  2. 浅谈HashMap与线程安全 (JDK1.8)

    HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.HashMap 继承自 AbstractMap 是基于哈希表的 Map 接口的实现,以 Key-Value 的形式存在,即 ...

  3. Spring的绿草丛

    Spring 轻量级框架,JavaEE的春天,当前主流框架 “站立式”的企业应用开发框架 目标 实现有的技术更加易用,推进编码最佳实践 内容:loC容器,AOP实现,数据访问支持:简化JDBC/ORM ...

  4. linux操作之软件安装(一)

    rpm 包安装 RedHat Package Manager的缩写 , linux 的软件包可能存在依赖关系,比如某某依赖某某才能使用. 挂载一个光盘 mount -t auto /dev/cdrom ...

  5. python教程(二)·数据结构初探

    这一节,我来简单讲讲python自带的数据结构. 列表(list) 列表是常用的python数据结构,类似于C语言的数组,用来存储多个元素,与之不同的是,C语言的数组中的元素的类型是相同的,而列表可以 ...

  6. 传说是小米家的一道面试题难倒了某Java程序员。扑克牌排序问题。

    网上说的是有位网友在面试小米Java岗三次后,终于挺进了第三轮面试,结果还是败在了两道算法题上面. 1.写个读方法和写方法,实现读写锁 2.一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆 ...

  7. HCA数据下载

    HCA data downloads HCA data downloads PeRl` 还记得去年看的时候还是什么都没有,今年已经有数据可以下载了.

  8. [WebService] 使用httpWebrequest 调用并调试WebService

    使用httpWebrequest 调用并调试WebService. 首先  使用httpWebrequest 调用WebService 代码: using System.Net;            ...

  9. Java线程和多线程(十二)——线程池基础

    Java 线程池管理多个工作线程,其中包含了一个队列,包含着所有等待被执行的任务.开发者可以通过使用ThreadPoolExecutor来在Java中创建线程池. 线程池是Java中多线程的一个重要概 ...

  10. jsp内置的对象【jsp可用数据容器】

    jsp的内置对象用法:可以存放数据进去,本身页面可以调用,发生页面请求时,请求目标可以调用 理解:jsp就是一个大容器,有请求,响应等内置对象,会话需要从请求容器中提取 请求中内置session,发出 ...