原创 | Authentication & Authorization | SSO Analyze in ASP.NET Core

以下思路参考于 IdentityServer4 源码,流程。阅读文章请 先 熟悉 OAuth 2.0, Open ID ,Open ID Connect 。本文章已申请授权骑士处理,转载请注明出处。
存储于 本机 Markdown文档。 | 待更新。

IdentityServer4是一个针对 ASP.NET Core 2.0 的OpenID Connect 和 OAuth 2.0框架。

在你的应用中,它支持以下特性:

Authentication as a Service

所有应用程序的集中登录逻辑和工作流(web,native,mobile,services),IdentityServer 是一个官方认证的OpenID Connect的实现。

Single Sign-on / Sign-out

在多个应用程序类型的登入和登出

Access Control for APIs

为不同的客户端提供api的访问令牌,e.g. server to server, web 应用,SPAs和 native .mobile apps

Federation Gateway(联合网关)

支持如Azure AD,Google,Facebook等外部的身份验证提供者,这将保护你的应用程序从如何连接到这些外部提供程序的细节。

Focus on Customization(专注于定制)

最重要的一部分--IdentityServer 的很多方面都可以定制,以满足你的需求,由于IdentityServer 是一个框架,而不是一个boxed product或者一个SaaS,所以你可以编写代码来对系统进行调整,以适应您的场景。

Mature Open Source(成熟的开源)

IdentityServer 使用了Apache 2的开源许可,允许在它上面构建商业产品,它也是.NET Foundation的一部分,提供了法律支持和治理。

Free and Commercial Support(免费和商业支持)

如果你需要帮助构建或运行您的身份平台,请让我们知道,我们有几种方法可以帮组你。

let us know

The Big Picture

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

../_images/appArch.png

最常见的互动是:

  • 浏览器与Web 应用程序的通信

  • Web应用程序与Web api进行通信(有时是自己的,也有代表用户的)

  • 基于浏览器的应用程序与web apis通信

  • Native applications 与 web APIs通信

  • 基于服务器的应用程序与Web api通信

  • web api 与web api 进行通信(有时是自己的,有时代表用户)

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

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

对应用程序进行重构以支持安全令牌服务,这将导致以下体系和协议:

image

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

Authentication

当应用程序需要了解当前用户的身份时,需要进行身份验证。通常,这些应用程序为了去管理数据和需要去确保这个用户能被与允许连接这些数据。最常见的例子就是web 应用程序,但是是基于native和JS的应用程序也需要去进行身份验证。

OpenID Connect是最新的三个,但它被认为是未来,因为它对现代应用最有潜力。它是为移动应用场景而建的,从开始和设计也是友好的和API。

API Access

应用程序有两种基本的方式与API进行通信。使用application identity,或者委托user’s identity。有时这两种方法需要结合使用。

OAurh2 是一种协议,允许应用程序从安全令牌服务请求访问令牌,并使用它们与api进行通信,这个委托减少了客户端应用程序和身份验证和身份验证之后的api复杂性。

OpenID Connect and OAuth 2.0 – better together

OpenID Connect 和OAuth 2.o非常相似--实际上,OpenID Connect 是OAuth2.0的一个扩展,两个基本的安全问题,身份验证和API访问,被组合成一个单一的协议--通常是对安全令牌服务进行一次单独的访问。

我们相信,在可预见的未来,OpenID Connect和OAuth2.0的结合是确保现代应用程序安全的最佳方式。身份识别是这两种协议的一种实现,它对解决当前mobile,native和web 应用程序的典型安全问题进行了高度优化。

How IdentityServer4 can help

IdentityServer 是一个中间件 ,符合规范的OpenID Connect和OAuth 2.0端点应用带任何ASP.NET Core应用程序。

通常,您构建(或重用)一个包含登录和注销页面的应用程序(取决于你的需求),把IdentityServer middleware添加到必要的协议头,因此客户端应用程序可以使用这些标准协议与之进行通信。

image

托管应用程序可以像您希望的那样复杂,但是我们通常建议通过只包含与身份验证相关的UI来尽可能小地被攻击。

Terminology(术语)

规范,文档和object model 使用了一些您应该知道的术语。

../_images/terminology.png

IdentityServer

IdentityServer是一个OpenID Connect 提供者 - 它实现了OpenID Connect 和 OAuth 2.0协议。

不同的文献使用不同的术语来表示相同的角色 - 你可能还会发现安全令牌服务security token service,身份提供者identity provider,授权服务器authorization server, IP-STS 等等

但是,它们都是一样的:一款向客户端提供安全令牌的软件。

IdentityServer有许多工作和特性 - 包含:

  • 保护你的资源

  • 通过外部扩展的identity provider或本地账户对用户进行身份验证。

  • 提供session 管理和单点登录

  • 管理和认证用户

  • 向clients发出标识issue identity和访问令牌。

  • 验证tokens

User

用户是一个使用注册客户端client访问资源的人,

Client

Client是一个软件,它从IdentityServer 请求token - 要么是访问资源(请求身份令牌identity token),要么是访问资源(请求访问令牌access token)。Client必须在请求tokens之前首先注册在IdentityServer 。

Clients的例子是web applications ,native mobile,desktop applications,SPAs,服务器进程等。

Resources

Resources是您想要用IdentityServer 保护的东西 - 你的用户身份数据或者APIs.

每个resource都有唯一的名称 - 并且 clients 使用这个名称来指定他们想要访问的资源。

Identity data 关于用户的身份信息(aka claims) ,例如姓名或电子邮件地址。

APIs APIs resources表示电子client 想要调用的功能 - 典型的模型是web api ,但也不一定。

Identity Token

identity token(身份token)允许连接 API resource。Clients请求access tokens和将他们转发到 API.

Access tokens包含了client 的信息 和用户的(如果存在)。APIS使用这些信息来授权访问他们的数据。

Supported Specifications

IdentityServer implements the following specifications:

OpenID Connect

OpenID Connect Core 1.0 (spec)OpenID Connect Discovery 1.0 (spec)OpenID Connect Session Management 1.0 - draft 28 (spec)OpenID Connect Front-Channel Logout 1.0 - draft 02 (spec)OpenID Connect Back-Channel Logout 1.0 - draft 04 (spec)

OAuth 2.0

OAuth 2.0OAuth 2.0 (RFC 6749)OAuth 2.0 Bearer Token Usage (RFC 6750)OAuth 2.0 Multiple Response Types (spec)OAuth 2.0 Form Post Response Mode (spec)OAuth 2.0 Token Revocation (RFC 7009)OAuth 2.0 Token Introspection (RFC 7662)Proof Key for Code Exchange (RFC 7636)JSON Web Tokens for Client Authentication (RFC 7523)

Packaging and Builds(包装和构建)

IdentityServer 由很多nuget包组成。

IdentityServer4

nuget | github

包含了核心的IdentityServer object model,services和middleware。只包含对内存配置和用户存储的支持,但是你可以通过配置对其他的存储进行插件支持。这是其它的 repos 和它的packages的内容。

Quickstart UI

github

包含了一个简单的用户界面启动,包括登录,注销和同意页面。

Access token validation handler

nuget | github

ASP.NET Core 身份验证handler 用于验证tokens 在APIs. handler允许在相同的API中支持JWT 和引用tokens

ASP.NET Core Identity

nuget | github

ASP.NET Core Identity 集成了 package 对于 IdentityServer。package提供了一个简单的配置API来使用ASP.NET Identity 为你的IdentityServer users提供管理程序库。

EntityFramework Core

nuget | github

EntityFramework Core 存储实现对于EntityFramework Core。这个package提供了EntityFramework的实现对于配置和在IdentityServer操作存储。

Dev builds(开发构建)

此外,我们还向MyGet发布了 dev/interim构建版本。如果你想试一试,把下面的内容添加到你的Visual Studio中。

https://www.myget.org/F/identity/

Support and Consulting Options

We have several free and commercial support and consulting options for IdentityServer.

Free support

Free support is community-based and uses public forums

StackOverflow

There’s an ever growing community of people using IdentityServer that monitor questions on StackOverflow. If time permits, we also try to answer as many questions as possible

You can subscribe to all IdentityServer4 related questions using this feed:

https://stackoverflow.com/questions/tagged/?tagnames=identityserver4&sort=newest

Please use the IdentityServer4 tag when asking new questions

Gitter

You can chat with other IdentityServer4 users in our Gitter chat room:

https://gitter.im/IdentityServer/IdentityServer4

Reporting a bug

If you think you have found a bug or unexpected behavior, please open an issue on the Github issue tracker. We try to get back to you ASAP. Please understand that we also have day jobs, and might be too busy to reply immediately.

Also check the contribution guidelines before posting.

还有 63% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
支付 ¥2.99 继续阅读
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342