ASP.NET core 系列 53 IdentityServer4 (IS4)介绍 一. 概述
在物理层之间相互通信必须保护资源, 需要实现身份验证和授权, 通常针对同一个用户存储. 对于资源安全设计包括二个部分, 一个是认证, 一个是 API 访问.
1 认证
认证是指: 应用程序需要知道当前用户的身份时, 需要进行身份验证, 确定用户是否有效. 最常见的身份验证协议是 SAML2p,WS-Federation,OpenID Connect.SAML2p 是最受欢迎和最广泛部署的. OpenID Connect 是三者中的最新产品, 被认为有最大潜力..
2API 访问
对 API 访问是: 用户对资源的访问, 以 API 的形式来访问资源, 涉及到资源授权.
3 OAuth2 介绍
OAuth2 是一种协议, 全称(Open Authorization), 是为用户资源的授权提供了一个安全的, 开放而又简易的标准. 互联网很多服务如 Open API 都提供了 OAuth 认证服务. 为桌面程序, 手机端或 web 应用提供了一种简单的, 标准的方式去访问需要用户授权的 API 服务. OAuth2 协议特定:
(1)简单: 不管是 OAuth 服务提供者还是应用开发者, 都很易于理解与使用.
(2)安全: 没有涉及到用户密钥等信息, 更安全更灵活.
(3)开放: 任何服务提供商都可以实现 OAuth, 任何软件开发商都可以使用 OAuth.
4 OIDC 介绍
OIDC 是指 OpenID Connect, 是基于 OAuth 2.0 规范的可互操作的身份验证协议. 是用 API 进行身份交互的框架. 它使用简单的 REST / JSON 消息流来实现. OIDC 实现了用户验证跨越物理层, 无需管理密码文件(密钥).
OpenID 是 Authentication, 即认证. 对用户的身份进行认证, 判断其身份是否有效.
OAuth 是 Authorization, 即授权. 对用户允许访问哪些资源的授权. 授权要在认证之后进行, 只有确定用户身份才能授权.
OpenID Connect 是 "认证" 和 "授权" 的结合. 是对 OAuth 2.0 之上的扩展. 这样对于两个基本的安全问题, 即身份验证和 API 访问, 被合并为一个协议, 通常只需一次往返安全令牌服务.
5 IdentityServer4 介绍
IdentityServer4 是适用于 ASP.NET Core, 集成了 OpenID Connect 和 OAuth 2.0 的框架. 在现实开发中, 项目涉及到多种物理层架构, 它们是多进程的方式部署到不同的服务器上. 比如 Web, 移动, 桌面, 服务等物理层架构. 也有可能是第三方的程序. 这些物理层之间的通信需要涉及到授权和身份认证. 最常见的互动包括:
(1) 浏览器与 Web 应用程序通信.
(2) Web 应用程序与 Web API 进行通信(可能都是自己的, 也有可能是第三方提供).
(3) 服务器的应用程序与 Web API 通信(比如 Windows 服务与 Web API).
(4) Web API 与 Web API 进行通信(可能都是自己的, 也有可能是第三方提供).
在没有使用安全令牌服务时, 多物理层之间通信, 看起来像下面这样:
加了 IdentityServer4 重构应用程序后, 使用了安全令牌服务, 产生的体系结构和协议如下所示:<喎"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyAgc3JjPQ=="https://www.2cto.com/uploadfile/Collfiles/20190412/2019041214040657.png" alt=""/os/" target="_blank" class="keylink">系统管理员等.
客户端是指: 向 IdentityServer 请求令牌的程序, 用于验证用户 (请求身份令牌) 或访问资源(请求访问令牌). 如 Web 应用程序, 本机移动或桌面应用程序, SPA, 服务器进程等.
资源: 使用 IdentityServer 保护资源, 比如用户的身份数据或 API. 身份数据是关于用户的信息也称 Claim 声明, 例如姓名或电子邮件地址. API 表示客户端要调用的功能如 Web API.
身份令牌: 是指身份验证过程, 确实用户是否有效. 即 Authentication 认证.
访问令牌: 是指允许访问 API 资源. 即 Authorization 授权.
8nuget 包安装
安装版本网址: https://www.nuget.org/packages/IdentityServer4/3.0.0-preview3.4
安装: Install-Package IdentityServer4
9 关于 IdentityServer4 的一些开源示例
https://identityserver4.readthedocs.io/en/latest/intro/packaging.html
下面是关于 IdentityServer 的源码和示例, 其中 IdentityServer4.Samples 中有大量示例, 学习从这里开始.
https://github.com/IdentityServer/
10 学习 IdentityServer 步骤
(1) 将 IdentityServer 添加到 ASP.NET Core 应用程序
(2) 配置 IdentityServer
(3) 为各种客户发放令牌
(4) 保护 Web 应用程序和 API
(5) 添加对基于 EntityFramework 的配置的支持
(6) 添加对 ASP.NET 身份的支持
(7) 添加 AdminUI 社区版以管理用户和配置
参考文献
IdentityServer4 官方文档介绍
来源: https://www.2cto.com/kf/201904/802529.html