区块链这么火热 看看这篇区块链初学者指南

发布时间:2018-11-14  栏目:法律  评论:0 Comments

自身连无知道为什么人们见面当要理解区片链会有接触难,而自我哉想明白怎么自己连不曾。那是于
2013
年,我第一次于听说来于特币这个事物(是的,知道的无限晚啦)。我压根儿得并一个且请不起,看到这儿你也许就指向这个文管爱了。后来,我思要错过探听一下其所倚的脚技术,也就区块链。
不过因为太忙碌了,所以迟迟没有起来(那就算连无有什么 开始不起了)。

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

这就是说是 “区块链”到底是什么吗?

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

实质上是片只东西:一个是回一个凡是链。说玄虚一点,就是如出一辙链子的章节。因为她是在于电脑被的事物,所以我们得厘定它的一个大体形态是甚样子的,就是数字信息被分为一个一个回然后将这些区块链接起来。举个例子,下图备受之方,每一个还意味一个国,而且每一个都含了针对性承诺国家的城名称。

当您的使被,它支持以下特点:

等等,其实还有更多东西来在。这里的各级一个方都一个称为哈希的事物。一个哈希就是一律失误字符
(比如 “1hi515AHA5H” )。哈希是因方块里面所包含的信来获取的。 U.S.A
的正方拥有 New York, Los Angeles, 还有 Chicago
这几乎独都,所以其的哈希就是比如说 “NYLAC”
的东西了 (技术及其实远非如此,但你理会精要就尽了)。

Authentication as a Service

每一个蝉联的方框都见面包含前一个方的哈希,所以这就是(强制性的)将她绑到一起的枢纽。如果有人随意篡改了第一个方块,加入了城 Boston,那么新的哈希就见面是
“NYLACB”,然而后面接续的 India 这个方块已经存着的哈希还是
“NYLAC”,这种不般配就见面将链条打断。所以哈希的目的就是确保没有人得篡改区畈。

具应用程序的汇总登录逻辑与工作流(web,native,mobile,services),IdentityServer
是一个官说明的OpenID Connect的落实。

那使有人改了一个方的始末,然后把后面的继续方块的哈希为一路更新会如何也?这也是发或的,不过起相同码业务本身还无报你。区块链的数量并无特是存在为只一台电脑中。一台微机中的区块链数据并无能够骗到丁,因为她会于复制到网被列一个用户的电脑中去。如果您在了一个区块链网络,那么你的微处理器就会失掉下载这些回数据,如果有人歪曲了外具有的版,整个网络为会见设想占大部分的丁之微机达所怀有的本才是不易的。

Single Sign-on / Sign-out

再有雷同项事,在一个区块链网络被,不仅是数,就连整个体系的程序还深受复制到了颇具的处理器被。大多数互联网应用还是集中话的,比如
Facebook,她底数码和次序还为在了她底服务器上,你的精打细算机会从 Facebook
的服务器上赢得到你一个丁需要明白的信。但当区块链的世界理,就无是被中心的事物,它借助之是用户之处理器来包容自己的次序。是的,这就象征,如果周区块链网络被的各国一样高微机都关机了,那么这个区块链系统就是死翘翘了。

于多独应用程序类型的登入和刊登

公共区块链

Access Control for APIs

立即是未是就是代表区块链系统实际就是是由同样群心怀善意自愿被他俩的微机保持运行的人头来成的吗?
还有这些防篡改之区块是为此来涉及嘛的吧?

否歧之客户端提供api的看令牌,e.g. server to server, web 应用,SPAs和
native .mobile apps

区块链网络的机能不胜枚举。比特币是平种多少货币以及一个开系统。它有的防篡改区块被所保存的即是漫天市的归类账。那些奉献了他们协调的微处理器的人头叫叫作矿工。系统会让他俩提供于特币作为奖励。

Federation Gateway(联合网关)

Ethereum
有意为附加功能。它可承接你的代码,从头开始发展有一个区块链系统,而设构建一个属于您自己之网可能会非常地艰难(记住这得看有人为您牺牲他们的微机运行能力才行哦)。Ethereum
就保护着这些耗损巨大的运算能力,而若尽管需呢这些计算消耗买只。

支持如Azure
AD,Google,Facebook等标的身份验证提供者,这将保障你的应用程序从什么连接至这些外部提供次的细节。

区块链应用并无非得是支付体系或者加密货币。它好另外事物,像是一个交道网络,一个像 LiveEdu 这样的念平台,等等。

Focus on Customization(专注于定制)

私有区块链

最为要害之等同有–IdentityServer
的群面还可以定制,以满足你的需求,由于IdentityServer
是一个框架,而非是一个boxed
product或者一个SaaS,所以你得编写代码来针对系开展调整,以适应您的景。

Bitcoin, Ethereum
等等这些都是公共区块链的例子,任何人都好改为中的一分子。那要我们怀念如果来一个私的区块链网络该如何为?有些人纪念使一个私有的区块链是想念干嘛呢?那即便来见下面的故事吧。

Mature Open Source(成熟的开源)

Mark 和 Sara

IdentityServer 使用了Apache
2的开源许可,允许以她点构建商业产品,它呢是.NET
Foundation的同一有,提供了法支撑和治理。

Mark 都五个月没交房租了,当 Sara
找他而之早晚,他即说过会让其。她付不起律师费,而法院强制执行诉讼就是需要8单月竟然同年,所以唯一的抉择虽是错过说服 Mark。

Free and Commercial Support(免费及商支持)

Joe 的生意

假如您要救助构建或运行而的身价平台,请吃我们知道,我们出几乎种方法好帮组你。

Joe
是一个经纪人,他经常要与不同的店堂做事情。几个月之前他和平等家零售商签了同份合同,尽管合同条款都早已履约了,可零售商确拒绝付款。这帮助人以法律制度被之纰漏来游说
Joe,想为这个达成少付钱的目的。Joe
在即时先便是起及时上头经验的,在少数情况下,他会见寻找法院求助,但如此做所消耗的流年及金也只要损失外协调的净收入。

let us
know

我们该怎么扶持 Sara 和 Joe 呢?

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复杂性。

咱俩是匪是会当其余地方解决这题目呢? 在 Sara
遇到的这种情景中,我们要吃 Mark
 按月出房租,这实质上就是是一个冲时间之触发机制。你的日历程序行使这样的触发器来叫你提供预设事件的通告。

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来尽可能小地被攻击。

每当 Joe
遇到的气象被,一旦合约中的条规都满足了,当事人就得会,这实际上就是一个冲条件的点机制。你思考上次从
Amazon 买电子书的时光,是匪是得事先认可会了,Amazon 才会把电子书发给你?

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使用这些信来授权访问他们的数据。

主要是,计算机程序会始终如一的实行诸如此类的通令。当您点击着这首文章,向下滚动,诸如这好像的操作,它也会见按照在执行不误。为了能帮助及
Sara ,我们需要以合同的条款转变成代码。

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)

Sara 和 Mark 之间所立的智能合同的伪代码

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/

If today’s date is 30th and rent is not paid thenTransfer $500 from Mark’s account to Sara’s account

Support and Consulting Options

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

但我们在哪里部署这些代码呢? 它便应当叫部署到拥有参与者的微处理器上。Sara
的还有 Mark 的银行还见面是马上一个私有区块链网络的一模一样片段。Joe 和 Sara
会签署一份编码的商谈(也便是智能合同),然后马上卖协议会被分发至网络中失,Mark
的与 Sara 的银行还见面发相同客拷贝。在每个月的 30 号,当时钟跳到 12
点收拾,协议好的金额就见面从 Mark 的账户转移至 Sara 的账户上。Joe
也开始利用智能合同来强制让他的客户开发协议好的货款。

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.

Sara 高兴了,因为其重新为无用去烦 Mark 会不会见如横付房租了。Joe
也高兴,因为他也非用找法院要说法了,省下这些精力,他好持续发展大团结的生意了。

Commercial support

We are doing consulting, mentoring and custom software development
around identity & access control architecture in general, and
IdentityServer in particular. Please get in
touchwith
us to discuss possible options.

Training

We are regularly doing workshops around identity & acess control for
modern applications. Check the agenda and upcoming public dates
here.
We can also perform the training privately at your company. Contact
us
to request the training on-site.

Admin UI, Identity Express and SAML2p support

There are a couple of commercial add-on products available from our
partners, check
https://www.identityserver.com/products/.

私有区块链只限于业务遭干到的相关各方,因此 Joe 不会见是 Sara 和 Mark
所属区块链网络的如出一辙有的。

Demo Server and Tests 演示服务器和测试

公可行使你最好欣赏的client library
来品尝IdentityServer4。我们发出一个测试实例,在demo.identityserver.io.
在主页上,您可以找到有关什么布置client
和安布置客户端以及哪些调用API的征。

进化的路

Contributing

We are very open to community contributions, but there are a couple of
guidelines you should follow so we can handle this without too much
effort.

本而针对斯都略概念了,也许应该尝试一下 edX
上的教程(免费之哦),它会使得而怎么在区块链上构建利用。

How to contribute?

The easiest way to contribute is to open an issue and start a
discussion. Then we can decide if and how a feature or a change could be
implemented. If you should submit a pull request with code changes,
start with a description, only make the minimal changes to start with
and provide tests that cover those changes.

Also read this first: Being a good open source
citizen

General feedback and discussions?

Please start a discussion on the core repo issue
tracker.

Platform

IdentityServer is built against ASP.NET Core 2 and runs on .NET
Framework 4.6.1 (and higher) and .NET Core 2 (and higher).

Bugs and feature requests?

Please log a new issue in the appropriate GitHub repo:

  • Core

  • Samples

  • AccessTokenValidation

Other discussions

https://gitter.im/IdentityServer/IdentityServer4

Contributing code and content

You will need to sign a Contributor License Agreement before you can
contribute any code or content. This is an automated process that will
start after you opened a pull request.

Note

We only accept PRs to the dev branch.

Contribution projects

We very much appreciate if you start a contribution project (e.g.
support for Database X or Configuration Store Y). Tell us about it so we
can tweet and link it in our docs.

We generally don’t want to take ownership of those contribution
libraries, we are already really busy supporting the core projects.

Naming conventions

As of October 2017, the IdentityServer4.* nuget namespace is reserved
for our packages. Please use the following naming conventions:

YourProjectName.IdentityServer4

or

IdentityServer4.Contrib.YourProjectName

Setup and Overview(设置以及概述)

启航了一个初的IdentityServer 项目产生星星点点种基本措施:

  • 从头开始

  • 于vs中的 ASP.NET Identity 模板开始

假如你从头开始,我们提供了几乎个帮助器和内存中之存储库,因此而不用从同开始即想不开持久性。

若是你于ASP.NET Identity开始,我们也供了平栽简单的章程来做它。

quickstarts为各种大规模的IdentityServer提供步骤说明,它们从绝对基础开始,变得进一步错综复杂,建议乃照顺序来举行。

各一个便捷启动quickstart都出一个参考的缓解方案
–你可以当IdentityServer4.Samples
repo张找到代码在quickstarts文件夹着。

Basic setup

屏幕截图显示的是Visual Studio-但是就不是一个需。

Creating the quickstart IdentityServer

Start by creating a new ASP.NET Core project.

image

Then select the “Empty” option.

image

Next, add the IdentityServer4 nuget package:

image

要,您可使用Package Manager控制台通过运行以下命令来补充c加依项:

“Install-Package IdentityServer4”

Note

IdentityServer build numbers 1.x target ASP.NET Core 1.1, and
IdentityServer build numbers 2.x targets ASP.NET Core 2.0 .

IdentityServer使用大的模式来布局以及向ASP.NET Core
host添加服务,在部署服务被,所需要的服务让布置并上加到DI中
ConfigureServices,在布置胡总,中间件被填补加至HTTP管道Configure中。

Modify your Startup.cs file to look like this:

<pre class=”md-fences md-end-block” lang=”c#”
contenteditable=”false” cid=”n472″ mdtype=”fences” style=”box-sizing:
border-box; overflow: visible; font-family: Consolas, “Liberation Mono”,
Courier, monospace; font-size: 0.9em; white-space: pre; display: block;
break-inside: avoid; text-align: left; background-image: ;
background-position: var(–code-block-bg-color); background-size: ;
background-repeat: var(–code-block-bg-color); background-attachment: ;
background-origin: ; background-clip: ; background-color: rgb(248, 248,
248); position: relative !important; border: 1px solid rgb(221, 221,
221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px;
margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style:
normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal; orphans: 2; text-indent:
0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration-style: initial;
text-decoration-color: initial;”>
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
.AddDeveloperSigningCredential();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment
env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseIdentityServer();
}
}</pre>

AddIdentityServer 在DI中注册IdentityServer
services,它还当运作时登记了一个内存存储库,这对开发状况十分有因此,对于生场景,你得一个持久化或共享的存储库,如数据库或者缓存,有关重新多之音讯,请参见
EntityFramework
quickstart。

The AddDeveloperSigningCredential
扩展为签字tokens创建临时密钥,这可能对始发工作发生因此,但是需要呢生产条件替换持久性的重要材料,更多系想你请参见密码学文档
cryptography
docs

Note

IdentityServer
还从未备选好启动,我们拿当接入下去的quickstarts中上加所要的劳务。

Modify hosting(修改主机)

默认情况下,vs 使用IIS
Express来托管你的web项目,这是了没问题之,除非您无法见到实际的时空日志输出到控制台。

IdentityServer
广泛运用日志记录,而UI中之可见错误信息还是返回给客户端则故意含糊不清,

咱建议在支配高主机中运行IdentityServer ,你得透过以vs中切换启动
launch profile,你吗不需要在历次你启动IdentityServer时开行浏览器 –
你吧足以关闭它。

image

另外,对于这些quickstarts的如出一辙URL运行IdentityServer是有帮扶的,你可以配备这些URL在起步配置文件对话框launch
profile dialog above,and use http://localhost:5000/.
以地方的截图中,你可以见到此URL已经给布置。

Note

咱建议呢IIS Express 和
self-hosting(自托管)配置相同之端口,通过这种艺术,你可当两者之间切换,而随便需修改客户机的其他配置。

如于启动时选控制高主机,您必须于Visual Studio的启航菜单中选择它:

image

How to run the quickstart

碰巧使上面所关联的,每一个飞启动都起一个参考解决方案—您可在以下代码中找到代码IdentityServer4.Samples
repo 于 quickstarts 文件夹着

运转quickstart解决方案的逐一部分的无限简易的法是用启动模式选择呢 “Set
Startup Projects”:

image

普通,您首先启动标识服务器,然后是API,然后是客户端client。如果您想只要调节之讲话,只需要在调试器中运作。否则,Ctrl+F5凡运作品种的特级艺术。

Protecting an API using Client Credentials (使用Client 凭证保护API)

quickstart提供了运用IdentityServer保护API的卓绝基本状况

当此状况中,我们以定义一个API 和一个我们纪念要失去做客的Client
,Client将当IdentityServer请求access token(访问令牌)
并使它们来聘API.

Defining the API

Scopes定义了您想要保障的体系被的资源,例如 APIs。

哎偶遭遇我们采取的是内存配置进行现身说法
–你得举行的虽是添加一个API,就是创立一个API类型的靶子ApiResource
,并设置适当的性能。

将一个文本(例如config.cs)添加到你的型被,并上加以下代码:

<pre class=”md-fences md-end-block” lang=”c#”
contenteditable=”false” cid=”n549″ mdtype=”fences” style=”box-sizing:
border-box; overflow: visible; font-family: Consolas, “Liberation Mono”,
Courier, monospace; font-size: 0.9em; white-space: pre; display: block;
break-inside: avoid; text-align: left; background-image: ;
background-position: var(–code-block-bg-color); background-size: ;
background-repeat: var(–code-block-bg-color); background-attachment: ;
background-origin: ; background-clip: ; background-color: rgb(248, 248,
248); position: relative !important; border: 1px solid rgb(221, 221,
221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px;
margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style:
normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal; orphans: 2; text-indent:
0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration-style: initial;
text-decoration-color: initial;”>
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource(“api1”, “My API”)
};
}</pre>

Defining the client

产一致步是概念一个Client可以看这API。

对这个现象,client 将无见面有一个互的用户,并将应用IdentityServer的
client secret 进行身份验证,在你的部署中补充加以下代码:

<pre class=”md-fences md-end-block” lang=”c#”
contenteditable=”false” cid=”n559″ mdtype=”fences” style=”box-sizing:
border-box; overflow: visible; font-family: Consolas, “Liberation Mono”,
Courier, monospace; font-size: 0.9em; white-space: pre; display: block;
break-inside: avoid; text-align: left; background-image: ;
background-position: var(–code-block-bg-color); background-size: ;
background-repeat: var(–code-block-bg-color); background-attachment: ;
background-origin: ; background-clip: ; background-color: rgb(248, 248,
248); position: relative !important; border: 1px solid rgb(221, 221,
221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px;
margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style:
normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal; orphans: 2; text-indent:
0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration-style: initial;
text-decoration-color: initial;”>
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = “client”,

// no interactive user, use the clientid/secret for authentication
AllowedGrantTypes = GrantTypes.ClientCredentials,

// secret for authentication
ClientSecrets =
{
new Secret(“secret”.Sha256())
},

// scopes that client has access to
AllowedScopes = { “api1” }
}
};
}</pre>

Configure IdentityServer

设部署 IdentityServer 去采用你的 scopes 和 client
定义,你用往ConfigureServices 方法添加代码。你可以采用好之恢宏方法
—在这些方法的脚,将有关的仓储和数码增长到DI中。

<pre class=”md-fences md-end-block” lang=”c#”
contenteditable=”false” cid=”n567″ mdtype=”fences” style=”box-sizing:
border-box; overflow: visible; font-family: Consolas, “Liberation Mono”,
Courier, monospace; font-size: 0.9em; white-space: pre; display: block;
break-inside: avoid; text-align: left; background-image: ;
background-position: var(–code-block-bg-color); background-size: ;
background-repeat: var(–code-block-bg-color); background-attachment: ;
background-origin: ; background-clip: ; background-color: rgb(248, 248,
248); position: relative !important; border: 1px solid rgb(221, 221,
221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px;
margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style:
normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal; orphans: 2; text-indent:
0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration-style: initial;
text-decoration-color: initial;”>
public void ConfigureServices(IServiceCollection services)
{
// configure identity server with in-memory stores, keys, clients and
resources
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients());
}</pre>

就是是这般,如果你运行服务器并浏览浏览器http://localhost:5000/.well-known/openid-configuration,你战胜好看来
所谓的 “discovery document” 发现文档,它以让下在你的clients
和APIs去下载必要的配置数据。

image

Adding an API

接通下,向你的化解方案添加一个API。

你得用 ASP.NET Core API
模板,同样,我们建议乃说了算端口,使用和原先启动配置文件去安排
Kestrel。这个演示假要你曾安排了公的API来运转。http://localhost:5001.

The controller

Add a new controller to your API project:

<pre class=”md-fences md-end-block” lang=”c#”
contenteditable=”false” cid=”n591″ mdtype=”fences” style=”box-sizing:
border-box; overflow: visible; font-family: Consolas, “Liberation Mono”,
Courier, monospace; font-size: 0.9em; white-space: pre; display: block;
break-inside: avoid; text-align: left; background-image: ;
background-position: var(–code-block-bg-color); background-size: ;
background-repeat: var(–code-block-bg-color); background-attachment: ;
background-origin: ; background-clip: ; background-color: rgb(248, 248,
248); position: relative !important; border: 1px solid rgb(221, 221,
221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px;
margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style:
normal; font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal; orphans: 2; text-indent:
0px; text-transform: none; widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration-style: initial;
text-decoration-color: initial;”>
[Route(“identity”)]
[Authorize]
public class IdentityController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return new JsonResult(from c in User.Claims select new { c.Type, c.Value
});
}
}</pre>

稍后您谈话用该 controller 来测试授权需求,并经API对 claims
identity进行可视化。

Configuration

最终一步,是用 authentication services 添加到 DI 和身份验证中间件到
管道,这些以:

  • 说明传入的token以管教它出自于信赖的发行方。

  • 证明这个token是实用的会为用来这api(既scope)。

留下评论