asp.net core IdentityServer4 概述
概览
现代应用程序看上去大都是这样的:
最常见的交互是:
- 浏览器与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 概述的更多相关文章
- ASP.NET Core MVC 概述
https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-2.2 ASP.NET Core MVC 概述 20 ...
- Asp.Net Core IdentityServer4 中的基本概念
一.前言 这篇文章可能大家会觉得很空洞,没有实际的实战东西,主要是自己整理出来的IdentityServer4 的一些概念性的东西:如果你对IdentityServer4有过一定的实战经验,可以跳过不 ...
- ASP.NET Core模块概述
原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...
- Asp.net Core IdentityServer4 入门教程(一):概念解析
目录 1.IdentityServer4 是什么 2.什么是OpenID和OAuth 2.0协议 3.IdentityServer4 可以用来做什么 其他 1.IdentityServer4 是什么 ...
- Asp.Net Core IdentityServer4 管理面板集成
前言 IdentityServer4(以下简称 Id4) 是 Asp.Net Core 中一个非常流行的 OpenId Connect 和 OAuth 2.0 框架,可以轻松集成到 Asp.Net C ...
- ASP.NET Core原理概述
ASP.NET Core 是一个控制台应用程序,在其 main 方法中创建一个Web服务器,以下是program.cs中的代码: using Microsoft.AspNetCore; using M ...
- ASP.NET Core DI概述
众所周知,ASP.NET Core有一个DI框架,应用程序启动时初始化. 预定义依赖 1: IApplicationBuilder:提供了配置应用程序的请求管道机制 2:ILoggerFactory: ...
- Asp.net core IdentityServer4与传统基于角色的权限系统的集成
写在前面 因为最近在忙别的,好久没水文了 今天来水一篇: 在学习或者做权限系统技术选型的过程中,经常有朋友有这样的疑问 : "IdentityServer4的能不能做到与传统基于角色的权限系 ...
- ASP.NET Core IdentityServer4 新手上路
OAuth2.0资料 今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准(如果是按照参考文章复制粘贴,应该不会出现踩坑,但是我喜欢自己手动敲一遍),发现几个坑,因而总 ...
随机推荐
- springboot 项目的https的发布
1.生成密钥证书 生成命令: keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize -keystore keysto ...
- N个tomcat之间实现Session共享(写的不错,转来的)
以下文章写的比较不错,转来的. tomcat的session共享设置如此简单为什么很少人去用.这个我说的重点. 1.自身的session如果服务器不在同一个网段会有session失效(本人使用的是阿里 ...
- vue父子组件通信高级用法
vue项目的一大亮点就是组件化.使用组件可以极大地提高项目中代码的复用率,减少代码量.但是使用组件最大的难点就是父子组件之间的通信. 子通信父 父组件 <template> <div ...
- C++中 #ifdef的妙用详解
本文主要介绍c语言中条件编译相关的预编译指令,包括 #define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. #define ...
- Spring MVC内容协商实现原理及自定义配置【享学Spring MVC】
每篇一句 在绝对力量面前,一切技巧都是浮云 前言 上文 介绍了Http内容协商的一些概念,以及Spring MVC内置的4种协商方式使用介绍.本文主要针对Spring MVC内容协商方式:从步骤.原理 ...
- Cat应用告警实战
1. Cat应用告警实战 1.1. 前言 好像是中间件设计者的通病,文档写的都是面向有一定使用各种中间件经验的人,告警模块中每个参数其实都可以详细解释一下,要不然我们理解起来真的很吃力还容易采坑 1. ...
- HDU 6319
题意略. 思路:倒着使用单调队列,大的放在前,小的放在后. 详见代码: #include<bits/stdc++.h> using namespace std; typedef long ...
- Django + JQuery + ajax实时显示数据
1 创建django项目 :Visualization and APP :Demo >>django-admin startproject Visualization >>p ...
- 知识图谱推理与实践 (2) -- 基于jena实现规则推理
本章,介绍 基于jena的规则引擎实现推理,并通过两个例子介绍如何coding实现. 规则引擎概述 jena包含了一个通用的规则推理机,可以在RDFS和OWL推理机使用,也可以单独使用. 推理机支持在 ...
- cogs 313. [POI2001] 和平委员会(2-SAT
http://cogs.pro:8080/cogs/problem/problem.php?pid=pyzQimjkj 题意:有n个集合,每个集合有俩元素,要从n个中各选一个放一堆,但是有的俩不能同时 ...