Identity Server 4 原理和实战(完结)_创建Identity Server 4项目,Client Credentials 受权实例






建立项目

 

dotnet new -i IdentityServer4.Templates



多出来的这些模板

adminUI用来测试,想要用再生产环境,须要交钱

结合core的 Identity来使用

使用EF core把一些数据持久化到数据库里了

内存来存储信息
html

建立项目

建立一个内存里的项目叫作 Idp

VS打开项目



直接运行:


这里看起来有点乱,这里显示注释掉

把上面这三被注释的代码放开注释:

这里添加用户,添加了一个测试用户

查看TestUser的源码



他是在代码里写死了两个用户;

往内存里添加 客户端应用:

查看GetClients()这个方法的源码
数据库

credential 凭证









受权类型是简化模式

再看这两行代码:

进去看源码:


表示的是Identity资源


Identity provider这个服务器上,它有一些用户的身份认证信息,这些信息能够看作一种被保护的资源。只不过这个资源和Identity Server是在一块儿的
其余的APi资源没有和Identity在一块儿。

至关于这里的Identity data 也至关因而一种资源,也是被保护的

目前这些都是写死在代码里 ,加载到内存里的。若是使用EFCode的模板,这些东西均可以存到数据库里。
比较大的应用一般都是存到数据库里

OAth的受权方式,前面四个能够用代码来实验


先从简单的开始讲,讲第四个 Client Credentials:客户端凭证,。而后再讲Password的例子


把一些没用的代码删除掉,。只保留一个Client而后进行修改


这里的api1先去掉,。不让它访问这个资源

把这个程序运行起来就能够不用管了。而后建立一个控制台应用
它做为Identity的客户端应用,

须要安装一个库
https://identityserver4.readthedocs.io/en/latest/quickstarts/1_client_credentials.html



包含了一个Client libiary,可使用discovery endpoint.

discovery endpoint里面有什么东西呢?点击这个运行起来的Identity4的例子页面




Task.Run的写法 须要手动捕获异常


C#7.1之后还有一种简便的方法:
这么写报错,而后查看错误

项目文件添加这句话


这个时候错误就没有了。

若是报错就输出异常


由于使用的是ClientCrenditals客户端凭据的方式,就须要提供这个凭据。就是加密用的这个字符串

这俩都是扩展方法,是刚才装的Identity Model库里面提供的

方法里面须要一个参数ClientCrdentialsTokenRequest,这里面须要设置一些值



加断点进行调试



错误类型

修改成正确的Secret

此次的错误信息是 invalid_scope

这是由于服务端的Scope是空的

把服务端的Scope修改成api1

客户端也改为api1。这样就成功访问到了。


这是AccessToken
api

访问API


有了Access Token 就能够Call APi了。可是咱们还有API资源。Identity Server 4上有一部分身份认证的资源。咱们就先访问这一部分资源
服务端须要配置一下,目前只容许访问了api1资源,可是api1还不存在


IdentityResource里面分红了几块。点一下出来这些这5个

这里定义资源,只定义了两个

设置容许访问OpenId,这里就设置了容许访问的两个资源,一个是api1 一个是身份证资源里面的openId这个Scope

而后运行服务端

客户端的修改:这里也加上openid都是小写?Scope之间用空格分开

为何都是小写的呢 咱们能够在服务端的代码里面F12进去看源码



服务器

测试

首先服务端这么设置

客户端这么设置

 
测试;请求失败了


从新。服务端加上openid

客户端也加上openid,运行后仍是错误的,这是为何呢

clientCrdentails不表明任何用户,而我这里却想访问身份认证的资源,身份认证资源就是对应着用户了。因此说这种访问是合理的mvc

创建APi1资源

使用VScode创建的一个新项目


返回用户的Claims

官方文档的代码直接贴进来

这里必定要写对了api1


须要身份证,而后须要使用mvc

端口改为5001

VSCode运行程序


设置控制台的地址


而后再运行控制台应用
断点就走到了 VScode的程序





控制台访问成功打印 输出的结果。从api获取的数据






 ide

相关文章
相关标签/搜索