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


















4分50




api

创建客户端


不须要身份认证

客户端叫作HybirdClient


配置IdentityServer服务端,先把客户端添加上






把userClaims添加到token里面


而后运行服务端就能够了服务器

客户端配置


和以前的配置差很少,先把代码贴上



和以前的区别多是这里的相应类型有区别




启动地址端口改为 7000端口
HomeController须要处理,首先须要登录


服务端的端口也须要改为7000
mvc

运行测试


一运行客户端就会跳转到受权服务器

登录,请求权限

成功跳转
ide

访问被保护资源

以前把以前的代码所有复制到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 设置被过滤掉

仍是在客户端设置

这样就被过滤掉了

网站

受权方式



之前比较流行的方式是基于角色来受权ui

基于角色的受权

角色具体在生产环境中怎么维护先无论,这里演示 先都写死
这是服务端的设置,这里是身份的认证信息

添加一个新的角色的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这里的代码jwt

策略的结构


自定义Requirement



这样这个类就写完了。而后就是写handler

新建类SmithInSomeWhereHandler




使用Alice用户测试




条件没有知足因此为Fail

改用Bob用户

条件都知足

能够正常访问


每一个Requirement能够有多个handler,若是其中一个handler返回了成功其余的handler都没有返回失败




 中间件

相关文章
相关标签/搜索