创建项目

  1. 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. UVA 1541 - To Bet or Not To Bet(概率递推)

    UVA 1541 - To Bet or Not To Bet 题目链接 题意:这题题意真是神了- -.看半天,大概是玩一个游戏,開始在位置0.终点在位置m + 1,每次扔一个硬币,正面走一步,反面走 ...

  2. git+jenkins

    开发写代码的演变 一个开发单打独斗,撸代码,开发网站,自由自在 多个开发同时开发一个网站,同时改一份代码.但是同时改一个文件会导致冲突 分支结构,每天上班第一件事克隆代码,下班前最后一件事合并代码 好 ...

  3. pandas-数据分析

    pandas是一个强大的python数据分析的工具包 pandas是基于numpy构建的 pandas的主要功能: 具备对其功能的数据结构DataFrame.Series 集成世间序列功能 提供丰富的 ...

  4. MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)

    Linux下安装初始化完MySQL数据库之后,使用mysqld_safe启动mysql数据库,如下发现,启动失败 [root@SVNServer bin]# ./mysqld_safe –user=m ...

  5. php把时间存入数据库为年月日时分秒类型

    时间用now() $sql1 = "insert into registerip (name,logintime,ip,url) values ('1211121',now(),'127.0 ...

  6. 使用 fcntl 函数 获取,设置文件的状态标志

    前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1. ...

  7. CentOS 安装和配置 Mantis

    Mantis是一个基于PHP技术的轻量级的开源缺陷跟踪系统,以Web操作的形式提供项目管理及缺陷跟踪服务.在功能上.实用性上足以满足中小型项目的管理及跟踪.更重要的是其开源,不需要负担任何费用. 1. ...

  8. python网络爬虫之使用scrapy下载文件

    前面介绍了ImagesPipeline用于下载图片,Scrapy还提供了FilesPipeline用与文件下载.和之前的ImagesPipeline一样,FilesPipeline使用时只需要通过it ...

  9. pdf文件的作成

    Dim Report As New crProgressList Report.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.P ...

  10. win7和win2008 r2下配置IIS7(ASP.net运行环境)

    win7和win2008 r2下配置IIS7(ASP.net运行环境) 1.先要设置应用程序池(ApplicationPool)为Classic.NETAppPool,而不是默认的DefaultApp ...