概览

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

最常见的交互是:

  • 浏览器与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. Nginx总结(二)基于ip的虚拟主机配置

    前面讲了如何安装配置Nginx,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 今天要说的 ...

  2. Liunx学习总结(六)--进程

    进程概述 简单来讲程序是一个包含可以执行代码的静态的文件.进程是一个开始执行但是还没有结束的程序的实例.当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作 ...

  3. 写博客没高质量配图?python爬虫教你绕过限制一键搜索下载图虫创意图片!

    目录 前言 分析 理想状态 爬虫实现 其他注意 效果与总结 @(文章目录) 前言 在我们写文章(博客.公众号.自媒体)的时候,常常觉得自己的文章有些老土,这很大程度是因为配图没有选好. 笔者也是遇到相 ...

  4. 你好spring-cloud-kubernetes

    关于spring-cloud-kubernetes spring-cloud-kubernetes是springcloud官方推出的开源项目,用于将Spring Cloud和Spring Boot应用 ...

  5. 【selenium】- selenium IDE的安装以及使用

    本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1. 自动化测试工程师的任务 一个合格的自动化测试工程师,需要把框架搭建起来.让不是自动化测试的人,一个普通功能化测试的人,可以完成自动化测试 ...

  6. 2019nc#6

    https://ac.nowcoder.com/acm/contest/886#question 题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Garbage Classificatio ...

  7. CodeForces - 445B - DZY Loves Chemistry-转化问题

    传送门:http://codeforces.com/problemset/problem/445/B 参考:https://blog.csdn.net/littlewhite520/article/d ...

  8. 牛客暑假多校 F RIKKA with Line Graph

    题意: 现在有一副完全图, 将他转化成线图. 线图就是 把原来的图上的边都变成点, 然后如果原来的任意2条边存在公共点, 他们就会有一条边, 边权为原来的2条边的和. 最后求出线图中的任意2点的最短路 ...

  9. CSS动效集锦,视觉魔法的碰撞与融合(二)

    引言 长久以来,我认识到.CSS,是存在极限的.正如曾经替你扛下一切的那个男人,也总有他眼含热泪地拼上一切,却也无法帮你做到的事情,他只能困窘地让你看到他的无能为力,怅然若失. 然后和曾经他成长的时代 ...

  10. SpringBoot发送邮箱验证码

    一.开启QQ邮箱服务 (1)登陆QQ找到设置,点击账户 (2)往下拉,开启POP3/SMTP服务和IMAP/SMTP服务 当开启IMAP/SMTP会有一串密文密码,保存起来后面要用到 二.spring ...