一、总体介绍

大多数现代应用或多或少是这样的:

通常,每个层(前端、中间层和后端)都必须保护资源并实现身份验证和/或授权——通常针对相同的用户存储。

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

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

这种设计将安全问题分为两部分:

身份认证

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

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

OpenID Connect是这三种类型中最新的一种,但被认为是未来的,因为它最有可能应用于现代应用。它从一开始就为移动应用程序场景构建,设计为API友好。

API访问

应用程序有两种与API进行通信的基本方式 - 使用应用程序标识或发放用户身份。 有时两种方法需要结合。

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

OpenID连接和OAuth 2.0 -更好地结合在一起

OpenID连接和OAuth 2.0非常相似——事实上,OpenID连接是OAuth 2.0之上的扩展。身份认证和API访问这两个基本的安全问题被合并为一个协议 - 往往只需一次往返安全令牌服务。

我们认为,OpenID Connect和OAuth 2.0的结合是在可预见的未来保护现代应用程序的最佳方法。IdentityServer4是这两个协议的一个实现,它高度优化以解决当今移动、本地和web应用程序的典型安全问题。

IdentityServer4如何提供帮助

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

通常情况下,您构建(或重新使用)包含登录和注销页面的应用程序(也可能取决于您的需要),IdentityServer中间件会添加必要的协议头,以便客户端应用程序可以使用这些标准协议与它进行对话。

托管应用程序可以像您想的那样复杂,但我们通常建议通过仅包含与身份验证相关的用户界面来尽可能缩小攻击面。

二、术语

IdentityServer

IdentityServer是一个OpenID连接提供程序——它实现了OpenID连接和OAuth 2.0协议。

不同的文献对相同的角色使用不同的术语——您可能还会发现安全令牌服务、身份提供程序、授权服务器、IP-STS等等。

但他们简而言之就是:一种向客户发放安全令牌的软件。

IdentityServer有许多任务和特性——包括:

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

User 

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

Client

客户端是一种软件,它从IdentityServer请求令牌——用于验证用户(请求身份令牌)或访问资源(请求访问令牌)。客户端必须首先在IdentityServer上注册,然后才能请求令牌。

客户端的示例包括web应用程序、本地移动或桌面应用程序、SPAs、服务器进程等。

Resources

资源是您希望使用IdentityServer(用户的标识数据或api)保护的内容。

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

关于用户的身份数据标识信息(又名claims),例如姓名或电子邮件地址。

api资源表示客户机希望调用的功能——通常建模为Web api,但不一定。

Identity Token

标识符表示身份验证过程的结果。它至少包含用户的标识符(称为sub - 又名 subject claim)和用户如何以及何时认证的信息。它可以包含其他标识数据。

Access Token

访问令牌允许访问API资源。客户端请求访问令牌并将它们转发到API。访问令牌包含关于客户端和用户的信息(如果存在)。api使用这些信息授权访问它们的数据。

三、包和创建

IdentityServer 由许多nuget包组成。

IdentityServer4

nuget | github

包含核心IdentityServer对象模型,服务和中间件。 只包含对内存配置和用户存储的支持 - 但是您可以通过配置为其他存储提供插件支持。 这就是其他repos和包的内容。

Quickstart UI

github

包含一个简单的starter UI,包括登录、注销和同意页面。

Access token validation handler

nuget | github

ASP.NET核心身份验证处理程序,用于在api中验证令牌。处理程序允许在相同的API中同时支持JWT和引用令牌。

ASP.NET Core Identity

nuget | github

用于IdentityServer的ASP.NET Core Identity集成包。 该软件包提供了一个简单的配置API来为您的IdentityServer用户使用ASP.NET身份管理库。

EntityFramework Core

nuget | github

EntityFramework用于IdentityServer的核心存储实现。这个包为IdentityServer中的配置和操作存储提供了EntityFramework实现。

四、演示服务和测试

https://demo.identityserver.io/

您可以使用您最喜欢的客户端库尝试IdentityServer4。我们在demo.identityserver.io中有一个测试实例。在主页上,您可以找到关于如何配置您的客户端以及如何调用API的说明。

https://github.com/IdentityServer/CrossVersionIntegrationTests/tree/master/src

此外,我们还有一个可以执行各种IdentityServer和Web API组合(IdentityServer 3和4,ASP.NET Core和Katana)的repo。 我们使用这个测试工具来确保所有的排列工作。 你可以通过克隆这个回购测试你自己。

IdentityServer4-介绍的更多相关文章

  1. ASP.NET Core身份认证服务框架IdentityServer4 介绍

    IdentityServer4是ASP.NET Core 2的OpenID Connect和OAuth 2.0框架.它可以在您的应用程序中提供以下功能: 它使你的应用程序具有如下特点: 认证即服务 适 ...

  2. .NET Core IdentityServer4实战-开篇介绍与规划

    一.开篇寄语 由于假期的无聊,我决定了一个非常有挑战性的活动,也就是在年假给大家带来一个基于OAuth 2.0的身份授权框架,它就是 IdentityServer4 ,如果没有意外的话,一定可以顺利的 ...

  3. asp.net core系列 53 IdentityServer4 (IS4)介绍

    一.概述 在物理层之间相互通信必须保护资源,需要实现身份验证和授权,通常针对同一个用户存储.对于资源安全设计包括二个部分,一个是认证,一个是API访问. 1 认证 认证是指:应用程序需要知道当前用户的 ...

  4. ABP从入门到精通(5):使用基于JWT标准的Token访问WebApi

    项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...

  5. 每周.NET前沿技术文章摘要(2017-06-21)

    汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容: .NET .NET Core Magic: Develop on one OS, run on another 链接:https: ...

  6. ABP从入门到精通(4):使用基于JWT标准的Token访问WebApi

    项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...

  7. 从Client应用场景介绍IdentityServer4(五)

    原文:从Client应用场景介绍IdentityServer4(五) 本节将在第四节基础上介绍如何实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置. 一.新建 ...

  8. 从Client应用场景介绍IdentityServer4(四)

    原文:从Client应用场景介绍IdentityServer4(四) 上节以对话形式,大概说了几种客户端授权模式的原理,这节重点介绍Hybrid模式在MVC下的使用.且为实现IdentityServe ...

  9. 从Client应用场景介绍IdentityServer4(三)

    原文:从Client应用场景介绍IdentityServer4(三) 在学习其他应用场景前,需要了解几个客户端的授权模式.首先了解下本节使用的几个名词 Resource Owner:资源拥有者,文中称 ...

  10. 从Client应用场景介绍IdentityServer4(一)

    原文:从Client应用场景介绍IdentityServer4(一) 一.背景 IdentityServer4的介绍将不再叙述,百度下可以找到,且官网的快速入门例子也有翻译的版本.这里主要从Clien ...

随机推荐

  1. SpringBoot整合日志

    Java日志 日志的接口层.抽象层 日志的实现 JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java) Jboss-Log ...

  2. Kernel 3.0.8 内存管理函数【转】

    转自:http://blog.csdn.net/myarrow/article/details/7208777 1. 内存分配函数 相关代码如下: #define alloc_pages(gfp_ma ...

  3. linux系统下安装tomcat及配置

    一.下载TOMCAT压缩包 apache-tomcat-6.0.44-client.zip 或 apache-tomcat-7.0.69.tar.gz 点击进入官网:http://tomcat.apa ...

  4. CentOS 6.5下的lamp环境rsyslog+MySQL+loganalyzer实现日志集中分析管理

    前言 rsyslog系统日志,在CentOS5上叫syslog,而在CentOS6上叫rsyslog,是增强版的syslog,CentOS5上的配置文件在/etc/syslog.conf下,而Cent ...

  5. spring上传文件

    在使用spring上传文件的时候,使用的文件接收参数类型为 org.springframework.web.multipart.MultipartFile 如果该参数没有指定@RequestParam ...

  6. PYTHON-有参装饰器,无参装饰器,语法糖

    装饰器 装饰器就是闭包函数的一种应用场景 一 为何要用装饰器 #开放封闭原则:对修改封闭,对扩展开放 二 什么是装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强 ...

  7. 教你构建好 SpringBoot + SSM 框架

    来源:Howie_Y https://juejin.im/post/5b53f677f265da0f8f203914 目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵 ...

  8. Reactor模型-多线程程版

    1.概述 在Reactor单线程版本的设计中,I/O任务乃至业务逻辑都由Reactor线程来完成,这无疑增加了Reactor线程的负担,高负载情况下必然会出现性能瓶颈.此外,对于多处理器的服务器来说, ...

  9. Java中加密算法介绍及其实现

    1.Base64编码算法 Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RF ...

  10. cf343c 二分答案+模拟

    /* 怎么判断能否在时间k内完成扫描 贪心:每次取出最靠左边的磁头去扫描最左边的,然后再往右扫描即可 如果当前点无法扫到最左侧点,那么后继点一样无法扫到 */ #include<bits/std ...