Identity Server 4 从入门到落地(九)—— 客户端User和Role的解析
前面的部分:
Identity Server 4 从入门到落地(一)—— 从IdentityServer4.Admin开始
Identity Server 4 从入门到落地(二)—— 理解授权码模式
Identity Server 4 从入门到落地(三)—— 创建Web客户端
Identity Server 4 从入门到落地(四)—— 创建Web Api
Identity Server 4 从入门到落地(五)—— 使用Ajax 访问 Web Api
Identity Server 4 从入门到落地(六)—— 简单的单页面客户端
Identity Server 4 从入门到落地(七)—— 控制台客户端
Identity Server 4 从入门到落地(八)—— .Net Framework 客户端
认证服务和管理的github地址: https://github.com/zhenl/IDS4Admin
客户端及web api示例代码的github地址:https://github.com/zhenl/IDS4ClientDemo
前面我们试验了认证服务的各种客户端,到现在似乎一切正常,下一步需要为进一步开发做准备。我们要改造现有的应用,将现有的本地验证改为认证服务,同时确保现有功能不受影响。现在,我们要模拟现有的应用功能,看在使用认证服务的情况下是否还能正常工作。在现有的应用中,使用基于ClaimsPrincipal的User对象获取用户数据并判断权限,比如在RazorPage中,使用User.Identity.Name获取登录用户名,使用User.IsInRole来判断用户是否在某个角色中,我们希望这些代码不需要改动。我们在最初的Web客户端程序中增加一些代码来模拟这些功能。
在Index页面中增加一些代码,显示用户的名称并判断用户是否属于某个角色:
<span>@User.Identity.Name</span>
@if(User.IsInRole("AdminRole"))
{
<span>AdminUser</span>
}else
{
<span>NoAdmin</span>
}
运行客户端,结果发现,没有如我们想象中那样工作:用户名称没有显示出来,角色判断也不正确。我们在上面的代码中设一下断点,看一下User内部的变量:

这里可以看到两个属性:NameClaimType和RoleClaimType,这两个属性说明Identity的Name和Role对应的Claim,我们Name对应的Claim Type是name,不是缺省设置中的“http://schemas/xmlsoap.org/ws/2005/05/identity/claims/name”,我们需要修改一下这个设置,在program.cs中增加下面代码:
options.TokenValidationParameters.RoleClaimType = "role";
options.TokenValidationParameters.NameClaimType = "name";
再次运行,用户名称可以显示了,但角色判断仍然不正确。我们回头看一下返回的claims,发现没有角色,这就有两种可能,一种是角色没有发送过来,还有一种可能就是没有解析。我们先排除第一种可能,登录到认证服务管理进行检查。首先检查一下client的scope中是否包含了role,我们在profile中发现已经设置了role:

然后检查一下用户是否设置了角色:

这一项也正常,那么问题应该出在客户端。在网上搜了一下,发现需要在代码中增加映射,代码如下:
options.ClaimActions.MapJsonKey("role", "role");
再次运行程序,这次工作正常了。
需要说明一下,对于其它需要增加到Claim中的自定义项,也需要使用MapJsonKey或者MapUniqueJsonKey进行映射,比如,我们增加一个用户自定义的属性nickname,可以作为claim增加到名称为profile的scope中,如果在客户端获取这个属性,需要增加映射如下:
options.ClaimActions.MapUniqueJsonKey("nickname", "nickname");
MapJsonKey和MapUniqueJsonKey两者的区别是,MapUniqueJsonKey会把多个相同的Claim合并为数组。比如,如果把上面的options.ClaimActions.MapJsonKey("role", "role");改为options.ClaimActions.MapUniqueJsonKey("role", "role");返回的claim 如下:

这种情况下多个role被合并到一起,作为一个数组存在,这种情况下IsInRole将不起作用。
到此,为客户端开发做的准备差不多了,下一步我们需要把代码中写死的配置项移动到配置文件中去。
Identity Server 4 从入门到落地(九)—— 客户端User和Role的解析的更多相关文章
- Identity Server 4 从入门到落地(十)—— 编写可配置的客户端和Web Api
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Identity Server 4 从入门到落地(十一)—— Docker部署
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Identity Server 4 从入门到落地(十二)—— 使用Nginx集成认证服务
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Identity Server 4 从入门到落地(五)—— 使用Ajax访问Web Api
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Identity Server 4 从入门到落地(四)—— 创建Web Api
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Identity Server 4 从入门到落地(六)—— 简单的单页面客户端
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Identity Server 4 从入门到落地(七)—— 控制台客户端
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Identity Server 4 从入门到落地(八)—— .Net Framework 客户端
前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...
- Identity Server 4 从入门到落地(三)—— 创建Web客户端
书接上回,我们已经搭建好了基于Identity Server 4的认证服务和管理应用(如果还没有搭建,参看本系列前两部分,相关代码可以从github下载:https://github.com/zhen ...
随机推荐
- <互联网时代>观感
<互联网时代>这部纪录片描绘了互联网从上世纪70年代到现在的整个发展过程,讲述了互联网带给我们生活的方方面面的变化,互联网技术在短短二,三十年的商业化浪潮中,以前所未有的速度谱写着改变世界 ...
- python实现直方图的应用
目录: (一)调节图片对比度(均衡化) (1)全局直方图均衡化------equalizeHist (2)自适应的局部的直方图均衡化------createCLAHE (二)图片的相似度比较 (三)直 ...
- 论文解读(node2vec)《node2vec Scalable Feature Learning for Networks》
论文题目:<node2vec Scalable Feature Learning for Network>发表时间: KDD 2016 论文作者: Aditya Grover;Adit ...
- appdata 文件夹
appdata file AppData 的位置在 c:\Users\{UserName}\Appdata ,它是从 Windows Vista 开始引入的,直至今天的 Windows 7, 8, 1 ...
- myeclipse激活教程
1.安装,解压,下一步一下一步,一直到finish..结束 2.汉化破解激活:下载破解压缩包:解压
- [NOIP2017 提高组] 逛公园
考虑先做一个\(dp\),考虑正反建图,然后按0边拓扑,然后按1到这里的最小距离排序,然后扩展这个\(f_{i,j}\),即多了\(j\)的代价的方案数.
- BZOJ 3453 - tyvj 1858 XLkxc(插值+推式子)
题面传送门 首先根据我们刚学插值时学的理论知识,\(f(i)\) 是关于 \(i\) 的 \(k+1\) 次多项式.而 \(g(x)\) 是 \(f(x)\) 的前缀和,根据有限微积分那一套理论,\( ...
- Linux 安装和使用 RAR工具
RAR 安装 方法一.通过apt命令安装 rar 和 unrar 未安装 unrar 的情况下,提取 RAR 文件会报出"未能提取"错误 Ubuntu 安装 rar和 unrar( ...
- Linux终端命令行的快捷键列表
tab键:命令.文件名等自动补全功能. Ctrl+a:光标回到命令行首.Ctrl+e:光标回到命令行尾.Ctrl+k:删除光标处到行尾的字符.Ctrl+u:删除整个命令行文本字符.ctrl+y: 粘贴 ...
- confluence——实现
基于CentOS6.9 [root@localhost ~]# yum install mysql mysql-server -y [root@localhost ~]#yum install -y ...