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, 角色授权和策略授权的更多相关文章

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

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

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

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

  3. Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例

    创建项目 dotnet new -i IdentityServer4.Templates 多出来的这些模板 adminUI用来测试,想要用再生产环境,需要交钱 结合core的 Identity来使用 ...

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

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

  5. Identity Server 4 原理和实战(完结)_Resource Owner Password Credentials 授权实例

    今天要讲的 用fiddler来监听,昨天的客户端的请求 这是一个post的请求 这是响应的数据 Expores_in超时时间, 今天的内容 在服务端再声明一个client端 wpf的应用的效果图 首先 ...

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

    Identity Procider:身份提供商

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

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

  8. Identity Server 4 原理和实战(完结)_Reference Token,撤销Tokens,Google和Github登录

    服务端设置为ReferenceToken accessToken的内容比原来的少了很多 断点继续回来就会发生异常 服务端设置 客户端设置,使用一个封装好的库 撤销Token 我们在点击退出按钮的时候撤 ...

  9. Identity Server 4 原理和实战(完结)_Implicit Flow 实例

    oidc-client.js貌似是IdentityServer4的团队开发的 服务端的设置 在服务端新增一个Client 之后需要在angular客户端页建两个页面,对应这两个url才行 登出之后要跳 ...

随机推荐

  1. Kristen Grauman

    http://www.cs.utexas.edu/~grauman/ CV         Publications         Code           Data        Short ...

  2. HDU 5384 Danganronpa (2015年多校比赛第8场)

    1.题目描写叙述:点击打开链接 2.解题思路:本题利用字典树解决.本题要求查找全部的B[j]在A[i]中出现的总次数.那么我们能够建立一颗字典树,将全部的B[j]插入字典树,因为一个串的全部字串相当于 ...

  3. 启动app-inspector报Internal Server Error

    前言 应用工具app-inspector可以协助定位IOS版App的控件元素,然鹅启动时报Internal Server Error! 解决办法 一.找到XCTestWD项目 目录: /usr/loc ...

  4. C# 操作World生成报告

    直接上代码 using System; using System.IO; using System.Data; using Word = Microsoft.Office.Interop.Word; ...

  5. iOS开发 如何检查内存泄漏

    本文转载至 http://mobile.51cto.com/iphone-423391.htm 在开发的时候内存泄漏是不可避免的,但是也是我们需要尽量减少的,因为内存泄漏可能会很大程度的影响程序的稳定 ...

  6. The Little Match Girl,摘自iOS应用Snow White and more stories

    Many years ago on a cold and snowy New Year's Eve, a poor little girl was wandering arround on the s ...

  7. 1 Maven简介

    一.构建(build)     清理.编译.测试.打包.部署等一系列操作. 二.maven介绍:     maven是一个强大的构建工具,能够帮助我们自动化构建过程:从清理(clean).编译(com ...

  8. guava cache与spring集成

    缓存的背景 缓存,在我们日常开发中是必不可少的一种解决性能问题的方法.简单的说,cache 就是为了提升系统性能而开辟的一块内存空间.在cpu进行计算的时候, 首先是读取寄存器,然后内存,再是硬盘.由 ...

  9. HDU5015 233 Matrix —— 矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-5015 233 Matrix Time Limit: 10000/5000 MS (Java/Others)    Memor ...

  10. 侧方位停车想一次过,掌握边线30cm很重要!

    侧方位停车要想一次过关,关键在于保持车身距离库边线30cm左右的距离.但是,往往有很多学员掌控不好这个距离,导致倒库时压线.那么,如何找准这个30cm呢?下面,小编就来教大家方法,赶紧学习吧! 侧方位 ...