The Big Picture

大多数现代应用看起来都像下面的样子:

大多数的交互是下面这样:

  • 浏览器与web应用之间的通信
  • web应用和web APIs之间的通信(这两者有时是独立的,有时是有用户参与的(openid connect))
  • 基于浏览器的应用和web APIs之间的通信
  • 原生应用(手机客户端等)与web APIs之间的通信
  • 基于服务端的应用和web APIs之间的通信
  • web APIs和web APIs之间的通信(这两者有时是独立的,有时是有用户参与的(openid connect))

通常每一层(前端的,中间层,后端的)都必须保护资源并实现认证和/或授权。而且都是针对同一个用户的存储来说。(实际上就是单点登录)

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

重组应用以支持安全令牌服务会引入以下架构和协议:

注意这张图解释了上面大部分提到的术语,web应用,web APIs,等等。如果对上面属于有疑问的可以看这张图。

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

认证

当一个应用需要知道当前用户的身份时,认证这个东西就派上用场了。通常这些应用代表用户管理数据并且需要确保只处理当前用户被允许的数据。(使用这个)最普遍的例子是web应用,但是原生app和基于js的应用(angular、vue等这些大前端)同样需要认证。

最常见的认证协议包括SAMS2p,WS-Federation和OpenID Connect,SAMS2p是目前最流行的,并且应用最广泛的。

OpenID Connect是这里面提到的最新的,并且也被各大厂商认为是代表了未来的协议,因为它赋予了现代的应用最大的潜能。他从开始就考虑了移动应用的场景,并且对于API来说也是友好的。

访问API

应用有两个基本的途径来访问APIs--将应用本身作为身份标识(没有用户参与)。或者通过用户的身份标识(有用户参与)。有时这两个途径需要结合使用。

OAuth2是一个允许应用从安全令牌服务中请求access token的协议。然后,应用使用这个access token来和APIs交互。它(指安全令牌服务)减少了客户端应用程序和apis之间通信的复杂性,因为身份验证和授权可以集中处理。

OpenID Connect和OAuth2.0--更好的集成

OPenID Connec和OAuth2.0很像,实际上前者是后者的一个顶层的扩展。认证和访问API这两个基本的安全关注点被集中到了一个协议中,经常在安全令牌服务中进行一次往返。

我们相信在可预知的未来OpenID Connect和OAuth2.0的结合是保护现代应用最好的方案。IdentityServer4是对这两个协议的一个实现,并且经过高度的优化,以解决当今的移动应用、原生和web应用中的安全问题。

IdentityServer4可以做些什么

IdentityServer是一个中间件,它将兼容OpenID Connect和OAuth2.0的端点添加到任意的一个Asp.net core上面去。

通常情况下,你会创建(或者重用)一个包含登陆、登出页面(或许还有确认consen页面,这依赖于你的需求)的应用,并且IdentityServer中间件将一些必要的协议头添加到这个应用的上面,所以客户端应用可以使用这些标准的协议来与之交互。

宿主应用可以如你所愿很复杂,但是我们通常会推荐你的宿主应用应该只包含认证相关的UI来使你的受攻击面尽可能的减小。

IdentityServer4【Introduction】之概括的更多相关文章

  1. 读论文系列:Object Detection ECCV2016 SSD

    转载请注明作者:梦里茶 Single Shot MultiBox Detector Introduction 一句话概括:SSD就是关于类别的多尺度RPN网络 基本思路: 基础网络后接多层featur ...

  2. IdentityServer4【Introduction】之包和项目构建

    包和项目构建 IdentityServer包含了以下的nuget包: IdentityServer4 nuget | github 这个包包含了IdentityServer核心的组成部分,有对象模型, ...

  3. IdentityServer4【Introduction】之支持的规范

    支持的规范 identityserver实现了下面的规范 OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery ...

  4. IdentityServer4【Introduction】之术语

    术语 在规范.文档和对象模型中使用了一些你应该了解的术语. IdentityServer IdentityServer是一个OpenID Connect的提供者,它实现了OpenID Connect和 ...

  5. IdentityServer4 实现 OpenID Connect 和 OAuth 2.0

    关于 OAuth 2.0 的相关内容,点击查看:ASP.NET WebApi OWIN 实现 OAuth 2.0 OpenID 是一个去中心化的网上身份认证系统.对于支持 OpenID 的网站,用户不 ...

  6. (原创)Stanford Machine Learning (by Andrew NG) --- (week 1) Introduction

    最近学习了coursera上面Andrew NG的Machine learning课程,课程地址为:https://www.coursera.org/course/ml 在Introduction部分 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试 代码工程地址: https://github.co ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照 代码工程地址: https://github.com/j ...

  9. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线 学习目标 了解几个用以表达真实场景的标志和2D图像 ...

随机推荐

  1. 在Eclipse中创建maven项目出现的环境警告 j2se-1.5

    Build path specifies execution environment J2SE-1.5. There are no JREs installed in the workspace th ...

  2. 洛谷P2845-Switching on the Lights 开关灯

    Problem 洛谷P2845-Switching on the Lights 开关灯 Accept: 154    Submit: 499Time Limit: 1000 mSec    Memor ...

  3. 机器学习算法总结(五)——聚类算法(K-means,密度聚类,层次聚类)

    本文介绍无监督学习算法,无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类,常见的无监督学习就是聚类算法. 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善 ...

  4. iptables 从一台机到另一台机端口转发

    启用网卡转发功能#echo 1 > /proc/sys/net/ipv4/ip_forward 举例:从192.168.0.132:21521(新端口)访问192.168.0.211:1521端 ...

  5. Python:Day29 信号量、条件变量

    信号量:semaphore 信号量是用来控制线程并发数的.(理解:虽然GIL任意时刻都只有一个线程被执行,但是所有线程都有资格去抢,semaphore就是用来控制抢的GIL的数量,只有获取了semap ...

  6. windows下使用svn命令行

    1.安装“Slik-Subversion-1.9.7-win32.zip”,将路径写入windows的path路径 2.在cmd下可以执行svn 3.应为tortoiseSVN的版本比1的版本低,导致 ...

  7. Spring Security(十四):5.4 Authorize Requests

    Our examples have only required users to be authenticated and have done so for every URL in our appl ...

  8. 给大家推荐一个C#下的Ribbon风格的Forms实现示例-含源码

    C#下的Ribbon风格的Forms实现示例:源码下载地址

  9. Python这么强大, 怎样才能快速入坑?

    作为一种年轻的编程语言,Python为何能在短短几年的时间内就以迅雷不及掩耳之势驰骋编程界?答案很简单,在人工智能时代,AlphaGo 都在使用的 Python语言,是最接近 AI 的编程语言. 随着 ...

  10. kafka+storm结合存在的一些问题与解决方法

    在配置kafka和storm的时候, 经常的会出现一些问题, 主要在以下几个: 1.  打jar包上去storm集群的时候会出现jar包冲突,类似于log4j或者sf4j的报错信息. 2. kafka ...