Identity Server 4 原理和实战(完结)_Hybrid Flow 实例, Claims, 角色授权和策略授权
4分50
建立客户端
不需要身份认证
客户端叫做HybirdClient
配置IdentityServer服务端,先把客户端添加上
把userClaims添加到token里面
然后运行服务端就可以了
客户端配置
和之前的配置差不多,先把代码贴上
和之前的区别可能是这里的相应类型有区别
启动地址端口改成 7000端口
HomeController需要处理,首先需要登陆
服务端的端口也需要改成7000
运行测试
一运行客户端就会跳转到授权服务器
登陆,请求权限
成功跳转
访问被保护资源
之前把之前的代码全部复制到HomeController和两个View页面内
claims
mvc的客户端有这么一句话
服务端把这里设置为true,表示把claims放到idToken里面
运行mvc客户端看到的结果,这些是直接从idToken里面获取出来的
客户端把claims的映射的clear方法这句话注释掉
可以看到Claims的key是这种样子的。这就是jwt的claimType。刚才比较简洁的方式是well-know的方式
复制这里的idToken
复制到jwt.io网站解析
把那句话注释的,客户端的 不再注释
左右对比这些值
例如这些都没有出现在我们客户端的Userclaims上
这是因为们我们使用的这个中间件,默认会过滤掉认为我们不需要的claims。例如:nbf、exp等等
那么怎么防止这些东西被过滤掉
在客户端,有个集合会把集合内的cliams给过滤掉,例如这里我们这里把nbf给从集合remove掉,就不会过滤这个nbf了
需要重新登陆一下,再次运行客户端就看到nbf这些都有了
sid和sub 设置被过滤掉
还是在客户端设置
这样就被过滤掉了
授权方式
以前比较流行的方式是基于角色来授权
基于角色的授权
角色具体在生产环境中怎么维护先不管,这里演示 先都写死
这是服务端的设置,这里是身份的认证信息
添加一个新的角色的Scope,这个scope的名字叫做roles,它里面有个claim就是role
然后设置让我们的客户端可以访问这个roles
然后配置客户端,客户只要在这里添加一个scope就可以了
登陆后我们看到出现了一个scope叫做角色
客户端,当前角色是管理员,可以看到了,
设置客户端的Action只能管理员访问
默认的首页管理和普通用户都可以访问
没有映射mvc客户端里面的角色
先把index的橘色设置这个注释掉,加断点进行调试。user.IsInRole判断用户时候包含这个管理员的角色
当前用户不是管理员。
看一下user的claims、确实有一个role但是这个role并没有成为我们mvc角色系统里面那个role。所以这里需要某种映射
客户端进行映射。nameClaimType和RoleClaimType分别取的是jwtClaimType里面的类型
再次运行结果是true。看一下user的identity的Name值是正确的
然后这里的controller就可以设置这个角色了
没有权限的时候访问的是一个Account/AccessDenied这么个路由
我们应该做这么个路由,当没有权限的时候去访问这个页面。
修改权限被角色的访问地址,客户端这里有一个选项
测试
基于策略的授权
可以把策略附加到action上,action也可以有多个策略。这种比较灵活,现在这种方式用的比较多
看服务器端的用户信息
我们来定义FamilyName为Smith并且lication也就是地址为someWhere的这么个策略
客户端设置,首先要求,用户必须是登陆的用户
然后是必须包含这么两个Claim。
1是FamilyName是Smith
2是location的claim的值是somwhere
当然这里也可以设置对应多个值,这里我们测试先设置为smith即可
服务端还需要设置用户返回的信息
访问api1资源的时候,这么设置就会带上这个location的claim
客户端配置
运行
客户端设置
修改为策略授权
再次测试只有满足策略的用户才能访问。
使用侧录的好处就是,直接可以改策略的代码不用,再修改controller这里的代码
策略的结构
自定义Requirement
这样这个类就写完了。然后就是写handler
新建类SmithInSomeWhereHandler
使用Alice用户测试
条件没有满足所以为Fail
改用Bob用户
条件都满足
可以正常访问
每个Requirement可以有多个handler,如果其中一个handler返回了成功其他的handler都没有返回失败
Identity Server 4 原理和实战(完结)_Hybrid Flow 实例, Claims, 角色授权和策略授权的更多相关文章
- Identity Server 4 原理和实战(完结)_汇总贴
视频地址:https://www.bilibili.com/video/av42364337 语雀地址:https://www.yuque.com/yuejiangliu/dotnet/solenov ...
- Identity Server 4 原理和实战(完结)_Authorization Code Flow 实例
Code在Oauth2.0和OpenId Connect里面分别叫做不同的名字 OAuth只介绍了如何授权.没有介绍如何身份认证. OpenId Connect:既规定了怎么授权,也规定了怎么身份认证 ...
- Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例
创建项目 dotnet new -i IdentityServer4.Templates 多出来的这些模板 adminUI用来测试,想要用再生产环境,需要交钱 结合core的 Identity来使用 ...
- Identity Server 4 原理和实战(完结)_----选看 OAuth 2.0 简介(上)
https://www.yuque.com/yuejiangliu/dotnet/cg95ni 代表资源所有者的凭据 授权 Authorization Grant 授权是一个代表着资源所有者权限的凭据 ...
- Identity Server 4 原理和实战(完结)_Resource Owner Password Credentials 授权实例
今天要讲的 用fiddler来监听,昨天的客户端的请求 这是一个post的请求 这是响应的数据 Expores_in超时时间, 今天的内容 在服务端再声明一个client端 wpf的应用的效果图 首先 ...
- 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 原理和实战(完结)_Reference Token,撤销Tokens,Google和Github登录
服务端设置为ReferenceToken accessToken的内容比原来的少了很多 断点继续回来就会发生异常 服务端设置 客户端设置,使用一个封装好的库 撤销Token 我们在点击退出按钮的时候撤 ...
- Identity Server 4 原理和实战(完结)_Implicit Flow 实例
oidc-client.js貌似是IdentityServer4的团队开发的 服务端的设置 在服务端新增一个Client 之后需要在angular客户端页建两个页面,对应这两个url才行 登出之后要跳 ...
随机推荐
- 用redis实现跨服务器session(转)
这个月我们新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡, 上面图上用户通过DNS的调度(一个域名对应多个ip)分别访问到VM2-VM5上,四台机器都访问VM1上的redis,两 ...
- Hadoop学习笔记(一)——Hadoop体系结构
HDFS和MapReduce是Hadoop的两大核心. 整个Hadoop体系结构主要是通过HDFS来实现分布式存储的底层支持的,而且通过MapReduce来实现分布式并行任务处理的程序支持. 一.HD ...
- CASIO fx-991es Plus科学计算器使用技巧
关于输出: 默认是按照自然书写格式显示的,计算结果是按照分数形式显示,如0.5x0.5,会显示=1/4.虽然很直观,但是在测量和估算上略有不便.此时用 SHIFT --> MODE (也就是se ...
- 01 json方式封装通信接口
新建一个json_api.php<?php class Response{ /** *按json方式输出通信 *@param integet $code 状态码 *@param string $ ...
- 超实用的 Nginx 极简教程,覆盖了常用场景(转)
概述 安装与使用 安装 使用 nginx 配置实战 http 反向代理配置 负载均衡配置 网站有多个 webapp 的配置 https 反向代理配置 静态站点配置 搭建文件服务器 跨域解决方案 参考 ...
- HttpURLConnection访问网络
HttpURLConnection是一个抽象类,获取HttpURLConnection对象HttpURLConnection urlConnection=new URL(http://www.baid ...
- 局域网如何通过SSH连接虚拟机装的centOS系统
首先,在一个局域网内的一台机器上装了虚拟机,虚拟机上装了centos系统: 但是,只有本机能连接centos,其他电脑都连不上: ping了一下发现不通,然后排查原因. 我发现局域网内的机器IP都是: ...
- 【LeetCode】Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- Visitor Pattern
1.Visitor模式:将更新(变更)封装到一个类中(访问操作),并由待更改类提供一个接收接口,则可在不破坏类的前提下,为类提供增加新的新操作. 2.Visitor模式结构图 Visitor模式的关键 ...
- 软件版本GA,RC,alpha,beta含义
软件版本GA,RC,alpha,beta含义 (1)RC:(Release Candidate) Candidate是候选人的意思,用在软件上就是候选版本.Release.Candidate.就是发行 ...