创建项目

dotnet new -i IdentityServer4.Templates


多出来的这些模板

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

结合core的 Identity来使用

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

内存来存储信息

创建项目

创建一个内存里的项目叫做 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

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

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

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

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

然后运行服务端

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

为什么都是小写的呢 我们可以在服务端的代码里面F12进去看源码

测试

首先服务端这么设置

客户端这么设置

 
测试;请求失败了

重新。服务端加上openid

客户端也加上openid,运行后还是错误的,这是为什么呢

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

建立APi1资源

使用VScode建立的一个新项目

返回用户的Claims

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

这里一定要写对了api1


需要身份证,然后需要使用mvc

端口改成5001

VSCode运行程序

设置控制台的地址

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

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

Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例的更多相关文章

  1. Identity Server 4 原理和实战(完结)_汇总贴

    视频地址:https://www.bilibili.com/video/av42364337 语雀地址:https://www.yuque.com/yuejiangliu/dotnet/solenov ...

  2. Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(上)

    https://www.yuque.com/yuejiangliu/dotnet/cg95ni 代表资源所有者的凭据 授权 Authorization Grant 授权是一个代表着资源所有者权限的凭据 ...

  3. Identity Server 4 原理和实战(完结)_----选看 OpenId Connect 简介

    Identity Procider:身份提供商

  4. Identity Server 4 原理和实战(完结)_单点登录实例(添加Flask客户端,Express.js的API)

    idp授权资源的添加 如果下面哪个客户端想访问api2这个资源的话 就把它写上scope里面就可以了 nodeJS的客户端 python的库 MVC客户端分别访问API和API2 python客户端演 ...

  5. Identity Server 4 原理和实战(完结)_建立Angular 客户端

    https://material.angular.io/ 第一部是安装angular cli --prefix=ac:前缀 --routing:默认使用路由 style=scss:样式使用scss - ...

  6. Identity Server 4 原理和实战(完结)_为 MVC 客户端刷新 Token

    服务端修改token的过期使劲为60秒 过期了 仍然还能获取到api1的资源 api1,设置每隔一分钟就验证token 并且要求token必须要有超时时间这个参数, 1分钟后提示超时,两边都是一分钟, ...

  7. Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(下)

    https://www.yuque.com/yuejiangliu/dotnet/asu0b9 端点 Endpoint Authorization Endpoint,授权端点 在浏览器里面和用户交互 ...

  8. Identity Server 4 原理和实战(完结)_Authorization Code Flow 实例

    Code在Oauth2.0和OpenId Connect里面分别叫做不同的名字 OAuth只介绍了如何授权.没有介绍如何身份认证. OpenId Connect:既规定了怎么授权,也规定了怎么身份认证 ...

  9. Identity Server 4 原理和实战(完结)_Hybrid Flow 实例, Claims, 角色授权和策略授权

    4分50 建立客户端 不需要身份认证 客户端叫做HybirdClient 配置IdentityServer服务端,先把客户端添加上 把userClaims添加到token里面 然后运行服务端就可以了 ...

随机推荐

  1. openwrt spi flash 分区适配过程

    openwrt spi flash 分区适配过程 这里基于 openwrt mt7620a 平台来跟踪,主要是想理清 dts 里的分区描述是如何一步步转化成内核分区行为. 先来看看 dts 中关于分区 ...

  2. 实记处理mongodb的NUMA问题

    一次在启动mongodb的过程中,出现过NUMA这个问题, mongodb日志显示如下: WARNING: You are running on a NUMA machine. We suggest ...

  3. JavaScript通过正则随机生成电话号码

    没有接口,就只能自己模拟Json数据了 恰好需要模拟一些电话号码,我又懒得自己随便写, 不如写一个小功能就用来实现随机生成电话号码 <!DOCTYPE html> <html lan ...

  4. EasyDarwin开源流媒体服务器进行RTSP转发过程中将sdp由文件存储改成内存索引

    -本篇由团队成员Fantasy供稿! 原始版本 在Darwin Streaming Server版本中,推送端DoAnnounce的时候后服务器会根据easydarwin.xml中配置的movies_ ...

  5. java之异常的捕获及处理

    在java中程序的错误主要是语法错误和语义错误(也就是逻辑错误). java中异常处理语句的格式: try{ //有可能出现异常的语句 }catch(异常类 异常对象){ //编写异常的处理语句 }c ...

  6. appium(6)-parts of appium api

    parts of appium api Lock Lock the screen.//锁屏. // java driver.lockScreen(3); // objective c [driver ...

  7. 剑指Offer:旋转数组的最小数字【11】

    剑指Offer:旋转数组的最小数字[11] 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4 ...

  8. 使用官方Android-support-v7在低版本上使用ActionBarActivity

    昨天晚上更新了下Android SDK Manager,发现Extras下的Android Support Library已经更新到19.1了,上网一查原来是sdk\extras\android\su ...

  9. java后台判断发布的图片是否存在

    x现在已知一个固定格式的图片,判断图片是否存在例如,http://127.0.0.1/image/201709091300.jpg import java.net.URL;import java.ne ...

  10. ckplayer 中的style.swf 中的 style.xml 中的修改方法

    style.swf ---- > style.zip ---- > 解压成文件夹 ---- > 打开style.xml ---- > 修改 最重要的是修改保存style.xml ...