IdentityServer3中客户端保护了授权资源,不难看出在IdentityServer3中,有这样一个设置

  AllowedScopes = new List<string>
{
"clientservices"
}

通过上面的客户端,拿到了四个授权范围,比如我有一个WebApi的资源授权服务站点,如下面的设置

 app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{ Authority = LYM.Unity.AppSetting.AppSettingsHelper.GetString("Authority"),
ValidationMode = ValidationMode.ValidationEndpoint,
RequiredScopes = new[] {
"clientservices"
}
});

比较可以看出 通过客户端拿到的授权范围是可以访问Webapi的资源服务,通过其他不包含clientservices的客户端拿到的令牌是不具有这个webapi资源授权权限,所以客户端中的Scope设置更好的把资源分类保护起来了,而我们要做的就是对资源分类,对不同的客户端设置具体访问的资源分类,具体业务看具体需求,比如同一个客户端也可以同时具有多个资源访问权限

访问令牌是根据客户端设置的Scope范围,颁发给客户端的一个资源访问的字符串令牌,这个令牌对客户端是保密不透明的,客户端通过资源拥有者提供的授权及授权范围去访问具体的授权资源,如现有很多微信、QQ 第三方登录一样的,我们用户作为一个资源拥有者,而我们要访问网站作为一个客户端(这个客户端QQ、微信授予的Client),我们的基本资料等作为我们的资源,当我们用微信访问的时候会转到微信登录的一个客户端(提示是具体客户端名称-如某某网站),用户肆意授权后,通过此客户访问资源权限并携带微信提供的授权码回到 网站上,我们在用这个授权码令牌去验证。

令牌用于检索授权信息的标识,通过自定义的一些可验证的方式、算法检索授权信息,可包含授权信息、证书信息,如果不符合相关要求,急需要客户端提供一个有效的令牌。

IdentityServer3中提供了相关的接口注入方式

 factory.CustomTokenValidator = new Registration<ICustomTokenValidator, CustomTokenValidator>();
 public class CustomTokenValidator : ICustomTokenValidator
{ public async Task<TokenValidationResult> ValidateAccessTokenAsync(TokenValidationResult result)
{ return await Task.FromResult(result);
} public async Task<TokenValidationResult> ValidateIdentityTokenAsync(TokenValidationResult result)
{ return await Task.FromResult(result);
}
}

接口实现中  ,在这个接口中看下 TokenValidationResult 这个类

public class TokenValidationResult : ValidationResult
{
public TokenValidationResult(); //
// 摘要:
// Gets or sets the claims.
public IEnumerable<Claim> Claims { get; set; }
//
// 摘要:
// Gets or sets the client.
public Client Client { get; set; }
//
// 摘要:
// Gets or sets the JWT.
public string Jwt { get; set; }
//
// 摘要:
// Gets or sets the reference token.
public Token ReferenceToken { get; set; }
//
// 摘要:
// Gets or sets the reference token identifier.
public string ReferenceTokenId { get; set; }
}

ValidateAccessTokenAsync这个验证方法 是验证Token, 这里包含了Client信息,Claim信息 还有 Jwt (Json Web Token)Token的信息 以及  ReferenceToken 引用相关的信息

ValidateIdentityTokenAsync  登出的时候会调用这个方法,在可以做处理比如清除相关Jwt  ReferenceToken

一步一步学习IdentityServer3 (13) 令牌的更多相关文章

  1. 一步一步学习IdentityServer3 (1)

    学习之初: IdentityServer3我自己最开始了解到的就是做一个SSO单点登录,后面发现还有单独的认证服务功能,其实它还可以做APIs的访问控制,资源授权,另外还可以为提供第三方登录,其他的自 ...

  2. 一步一步学习IdentityServer3 (2)

    下面就来做一个例子:IdentityServer3服务端的配置 VS2015创建一个MVC项目 IdrOAuth 用来授权的认证的站点

  3. 一步一步学习IdentityServer3 (4)

    其实上述例子 很多都很找到 但是在实际生态环境中给例子有很多不一样的地方 比如自定已登录界面怎么做? 怎么访问自己的用户数据库实现登录? 怎么在接口中使用,在接口中又怎么实现与Idr3结合授权? 等等 ...

  4. 12.Linux软件安装 (一步一步学习大数据系列之 Linux)

    1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...

  5. (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...

  6. (转) 一步一步学习ASP.NET 5 (二)- 通过命令行和sublime创建项目

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 注:昨天转发之后很多朋友指出了vNext的命名问题,原文作者已经做出了修改,后面的标题都适用 asp.net 5这个名称. 编者语 : 昨天发了第 ...

  7. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  8. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...

  9. 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

    原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...

随机推荐

  1. 彻底理解 Python 生成器

    1. 生成器定义 在Python中,一边循环一边计算的机制,称为生成器:generator. 2. 为什么要有生成器 列表所有数据都在内存中,如果有海量数据的话将会非常耗内存. 如:仅仅需要访问前面几 ...

  2. python与pycharm

    什么叫自动化测试? 通俗来说,自动化测试就是通过写代码来帮我们测试软件.用来做自动化测试的语言很多,python,Java,php,Go,ruby等.而且软件系统开发语言与自动化测试语言可以不一致.例 ...

  3. 转:iOS绘制一个UIView

    绘制一个UIView 绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时 ...

  4. 项目Header组件的开发注意事项

    npm install stylus --save npm install stylus-loader --save 移动端一般采用rem布局方式 Header组件里iconfont的使用和代码优化: ...

  5. MySQL报错】ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 39.

    之前在centos6.4系统安装的是自带的mysql 5.1版本,后来升级到了5.6版本,执行以下命令报错 在网上查找原因说说因为升级不当导致,执行以下命令即可正常执行命令 mysql_upgrade ...

  6. Java并发编程原理与实战四十三:CAS ---- ABA问题

    CAS(Compare And Swap)导致的ABA问题 问题描述 多线程情况下,每个线程使用CAS操作欲将数据A修改成B,当然我们只希望只有一个线程能够正确的修改数据,并且只修改一次.当并发的时候 ...

  7. [转载]Javascript 同步异步加载详解

    http://handyxuefeng.blog.163.com/blog/static/4545217220131125022640/ 本文总结一下浏览器在 javascript 的加载方式. 关键 ...

  8. ArcGis10.1 Feature Class Properties无法编辑

    被这个问题困扰了很久,最后从官网帮助中查询到资料解决了 先看一下截图: 这种问题一般是FratureClass被锁,被mxd引用,并且发布服务有实例在运行,但我新创建一个FeatureClass也无法 ...

  9. R6—单变量正态性检验

    方法不唯一 单变量正态检验主要的话包括以下这些 shapiro.test();#Shapiro-Wilk检验 library("nortest"); lillie.test() # ...

  10. Tomcat与Spring中的事件机制详解

    最近在看tomcat源码,源码中出现了大量事件消息,可以说整个tomcat的启动流程都可以通过事件派发机制串起来,研究透了tomcat的各种事件消息,基本上对tomcat的启动流程也就有了一个整体的认 ...