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. Git bare repo with multiple branches

    http://stackoverflow.com/questions/9324762/git-bare-repo-with-multiple-branches Q: I want to make a ...

  2. lockfile - conditional semaphore-file creator

    LOCKFILE(1) LOCKFILE(1) NAME lockfile - conditional semaphore-file creator SYNOPSIS lockfile -sleept ...

  3. CUGBACM_Summer_Tranning1 二进制枚举+模拟+离散化

    整体感觉:这个组队赛收获还挺多的.自从期末考试以后已经有一个多月没有 做过组队赛了吧,可是这暑假第一次组队赛就找回了曾经的感觉.还挺不错的!继续努力!! 改进的地方:这次组队赛開始的时候题目比較难读懂 ...

  4. 小printf的故事:什么是真正的程序员?

    http://kb.cnblogs.com/page/570194/ 作者: 削微寒  来源: 博客园  发布时间: 2017-06-06 10:03  阅读: 33004 次  推荐: 98   原 ...

  5. 在Fedora25上轻松安装Cuda8

    http://blog.csdn.net/u010158659/article/details/53592891 Cuda 8对于Pacal架构的英伟达新一代显卡(GTX 1070/1080/Tita ...

  6. xpath 节点1

    XPath 含有超过 100 个内建的函数.这些函数用于字符串值.数值.日期和时间比较.节点和 QName 处理.序列处理.逻辑值等等. 节点(Node) 在 XPath 中,有七种类型的节点:元素. ...

  7. objective-c中#import和@class的差别

    在Objective-C中,能够使用#import和@class来引用别的类型, 可是你知道两者有什么差别吗? @class叫做forward-class,  你常常会在头文件的定义中看到通过@cla ...

  8. lateral inhibition

    http://www.indiana.edu/~p1013447/dictionary/lat_i.htm [This means that neighboring visual neurons re ...

  9. ActiveMQ的消息的(含附件)发送和接收使用

    首先介绍一下ActiveMQ的版本:apache-activemq-5.10.2 启动MQ:activemq.bat 下面来编写MQ的发送类: 里面的发送ip和模式名称可以根据具体的实际情况填写. S ...

  10. react-native填坑--react-navigation

    Navigator已经被React Native废弃了.也许你可以在另外的一个依赖库里react-native-deprecated-custom-components里找到.不过既然官方推荐的是re ...