概览
现代应用程序看上去大都是这样的:
最常见的交互是:
浏览器与 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 资源建模, 但这不是必须的.
身份令牌
来源: https://www.cnblogs.com/yyfh/p/11590383.html