Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例
创建项目
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 授权实例的更多相关文章
- Identity Server 4 原理和实战(完结)_汇总贴
视频地址:https://www.bilibili.com/video/av42364337 语雀地址:https://www.yuque.com/yuejiangliu/dotnet/solenov ...
- Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(上)
https://www.yuque.com/yuejiangliu/dotnet/cg95ni 代表资源所有者的凭据 授权 Authorization Grant 授权是一个代表着资源所有者权限的凭据 ...
- Identity Server 4 原理和实战(完结)_----选看 OpenId Connect 简介
Identity Procider:身份提供商
- Identity Server 4 原理和实战(完结)_单点登录实例(添加Flask客户端,Express.js的API)
idp授权资源的添加 如果下面哪个客户端想访问api2这个资源的话 就把它写上scope里面就可以了 nodeJS的客户端 python的库 MVC客户端分别访问API和API2 python客户端演 ...
- Identity Server 4 原理和实战(完结)_建立Angular 客户端
https://material.angular.io/ 第一部是安装angular cli --prefix=ac:前缀 --routing:默认使用路由 style=scss:样式使用scss - ...
- Identity Server 4 原理和实战(完结)_为 MVC 客户端刷新 Token
服务端修改token的过期使劲为60秒 过期了 仍然还能获取到api1的资源 api1,设置每隔一分钟就验证token 并且要求token必须要有超时时间这个参数, 1分钟后提示超时,两边都是一分钟, ...
- Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(下)
https://www.yuque.com/yuejiangliu/dotnet/asu0b9 端点 Endpoint Authorization Endpoint,授权端点 在浏览器里面和用户交互 ...
- Identity Server 4 原理和实战(完结)_Authorization Code Flow 实例
Code在Oauth2.0和OpenId Connect里面分别叫做不同的名字 OAuth只介绍了如何授权.没有介绍如何身份认证. OpenId Connect:既规定了怎么授权,也规定了怎么身份认证 ...
- Identity Server 4 原理和实战(完结)_Hybrid Flow 实例, Claims, 角色授权和策略授权
4分50 建立客户端 不需要身份认证 客户端叫做HybirdClient 配置IdentityServer服务端,先把客户端添加上 把userClaims添加到token里面 然后运行服务端就可以了 ...
随机推荐
- laravel 配置了自己的域名以后, localhost 无法访问 404 not found 的解决方法
这是后盾网视频教程的方法,应该是配置虚拟主机,此方法要改动,apache服务器里的conf文件夹里的httpd.conf文件 和conf/extral里面的httpd-vhost文件 具体改动为,co ...
- AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机)
AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机) 特别感谢google官方文档及AOSP源代码开放 參考链接: https://source.a ...
- 基于bootstrap+MySQL搭建动态网站
这个只是在上个练习项目中的后台管理项目加入了MySQL,数据不是写死的,而是从数据库中获取到的,获取到数据执行增删改查操作,没什么 计数难度,不做介绍
- MongoDB 征途
到目前为止,对数据库这块仍然捉襟见肘,仅限于懂一些MySQL,就更谈不上什么优化了. 细想来,还是没有项目驱动造成的...既然跟关系型数据库缘分未到,干脆直接go to NoSQL - MongoDB ...
- Java链接MySql数据库(转)
import java.sql.*; public class JDBCTest { public static void main(String[] args){ // 驱动程序名 String d ...
- ajax 实现三级联动下拉菜单
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里我用了数据库中的chinastates表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...
- easyui datagrid 加载静态文件中的json数据
本文主要介绍easyui datagrid 怎么加载静态文件里的json数据,开发环境vs2012, 一.json文件所处的位置 二.json文件内容 {"total":28,&q ...
- UIButton的selected设为TRUE时在按下时显示自己定义的背景图
在UIButton的selected设为TRUE后.须要在按钮高亮时,显示自己定义的背景图. 经研究hightLighted和selected这两个状态是能够重叠的,就是button能够同一时候处于s ...
- 搭建iis本地测试服务器
在“开始”选择 “控制面板”,默认是以“类别”显示, 改成“小图标”显示 选择“程序和功能” 进入界面后,点击“启动或关闭Windows功能” 然后勾选图中的两个选框,注意一定要显示为 ...
- jquery特效(5)—轮播图③(鼠标悬浮停止轮播)
今天很无聊,就接着写轮播图了,需要说明一下,这次的轮播图是在上次随笔中jquery特效(3)—轮播图①(手动点击轮播)和jquery特效(4)—轮播图②(定时自动轮播)的基础上写出来的,也就是本次随笔 ...