IdentityServer3中客户端保护了受权资源,不难看出在IdentityServer3中,有这样一个设置web
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设置更好的把资源分类保护起来了,而咱们要作的就是对资源分类,对不一样的客户端设置具体访问的资源分类,具体业务看具体需求,好比同一个客户端也能够同时具备多个资源访问权限api
访问令牌是根据客户端设置的Scope范围,颁发给客户端的一个资源访问的字符串令牌,这个令牌对客户端是保密不透明的,客户端经过资源拥有者提供的受权及受权范围去访问具体的受权资源,如现有不少微信、QQ 第三方登陆同样的,咱们用户做为一个资源拥有者,而咱们要访问网站做为一个客户端(这个客户端QQ、微信授予的Client),咱们的基本资料等做为咱们的资源,当咱们用微信访问的时候会转到微信登陆的一个客户端(提示是具体客户端名称-如某某网站),用户肆意受权后,经过此客户访问资源权限并携带微信提供的受权码回到 网站上,咱们在用这个受权码令牌去验证。微信
令牌用于检索受权信息的标识,经过自定义的一些可验证的方式、算法检索受权信息,可包含受权信息、证书信息,若是不符合相关要求,急须要客户端提供一个有效的令牌。app
IdentityServer3中提供了相关的接口注入方式async
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 这个类ide
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 ReferenceTokenui