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. 如何成为一个Linux内核开发者

    你想知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动.“这篇文档的目的,就是通过描述你需要 经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所 ...

  2. Active Directory虚拟机搭建域控服务器环境

    前言 还是和上一章一样,痛苦过后还是记录下给后来人提供便利为妙. 虚拟机选择:建议Hyper-V或者VMware 系统选择:建议WIindows Server 2003及以上 我这里是使用VMware ...

  3. java stoi

    package string.string1_4; import java.util.Scanner; public class StrToInt { /** * 将str转换为int整数 * 1. ...

  4. h5的复制功能

    js+html5实现复制文字按钮 <div> <input type="text" name="guanfangaddress" id=&qu ...

  5. JavaScript中批量设置Css样式

    设置 input 元素的  属性: document.getElementsByTagName("INPUT")[0].setAttribute("属性",&q ...

  6. 实例具体解释:反编译Android APK,改动字节码后再回编译成APK

    本文具体介绍了怎样反编译一个未被混淆过的Android APK,改动smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk不管输入什么样的username和password都能 ...

  7. 发送get和post请求时常用的content-type

    常见的媒体格式类型如下: text/html : HTML格式 text/plain :纯文本格式 text/xml :  XML格式 image/gif :gif图片格式 image/jpeg :j ...

  8. ElasticSearch(四)kibana实现CURD

    一. kibana安装 1.到官网或是用brew下载kibana 安装包,这边我们选择在官网下载对应的安装包 https://www.elastic.co/cn/downloads/kibana 2. ...

  9. 如何设置Tomcat的JVM虚拟机内存大小

    我的是解压版的tomcat: 首先找到tomcat中bin目录下: catalina.bat 文件,打开这个文件,在 @echo off 下面一行,加上一行代码: set JAVA_OPTS=-ser ...

  10. [自动化平台系列] - 初次使用 Macaca-前端自动化测试(2)

    接一下来讲一讲api的使用   http://macacajs.github.io/macaca-wd/api/ var _config = { //本程序的host host: 'http://te ...