有人可以解释两者之间的区别吗?我了解客户秘密,但范围秘密仍然不明确......以及范围秘密甚至需要存在的原因?
虽然我发现文档在某些方面很有用,但我没有发现它有助于解释两者之间的区别.
感谢Scott Brady,我能够回答我的问题.这是我发现的......
客户秘密
正如Scott Brady所说,客户端密钥在您的客户端应用程序调用令牌端点时使用.您的客户端应用程序必须具有有效的客户端ID和客户端密钥才能调用令牌端点.
范围秘密
但是,如果您的资源服务器需要调用IdentityServer,该怎么办?这发生在内省端点时由资源服务器调用.当您的应用程序使用引用令牌或使用JWT的服务器端验证时,会发生这种情况.因此,假设经过身份验证的客户端调用资源服务器上受保护的端点.然后,资源服务器必须使用IdentityServer验证该JWT承载令牌.但是,从资源服务器发送到IdentityServer的请求必须是受保护的调用.也就是说,资源服务器必须向IdentityServer提供JWT承载令牌才能使用内省端点.资源服务器无法使用它尝试验证的令牌,因为它属于客户端(受众不是资源服务器,而是客户端应用程序).此外,资源服务器不确定承载令牌是否有效.它不会' 有意义的是资源服务器使用所讨论的承载令牌来验证验证所述承载令牌的请求.所以现在有一个问题......资源服务器如何向IdentityServer发送经过身份验证的请求?
这就是Scope Secrets的用武之地.IdentityServer解决这个问题的方法是允许你创建一个包含Scope Secret的Scope.此范围已添加到资源服务器身份验证选项中.例如:
app.UseIdentityServerBearerTokenAuthentication( new IdentityServerBearerTokenAuthenticationOptions { Authority = "http://localhost:5000", ClientId = "api", //The Scope name ClientSecret = "api-secret", //This is the non hashed/encrypted Scope Secret RequiredScopes = new[] { "api" } //Must add the Scope name here });
通过使此Scope成为必需,我们可以确保任何经过身份验证的客户端应用程序都具有此Scope.然后在IdentityServer中添加Scope,如下所示:
new Scope { Name = "api", DisplayName = "Scope DisplayName", Description = "This will grant you access to the API", //The secret here must be Sha256-ed in order for the /introspection end point to work. //If the API's IdentityServerBearerTokenAuthenticationOptions field is set as so ValidationMode = ValidationMode.ValidationEndpoint, //then the API will call the /introspection end point to validate the token on each request (instead of ValidationModel.ValidationLocal. //The ClientSecret must be the NON Sha256-ed string (for example Api = "api-secret" then scope secret must = "api-secret".Sha256()) //for the token to be validated. There must be a Scope that has the same name as the ClientId field in IdentityServerBearerTokenAuthenticationOptions. //This is an API authenticates with IdentityServer ScopeSecrets = new List{ new Secret("api-secret".Sha256()) }, Type = ScopeType.Resource }
因此,当资源服务器调用内省终点时,它将简单地使用Scope Secret作为Client Secret,将Scope作为Client ID.
客户端密钥用于授权访问令牌端点.此端点使用客户端ID和客户端密钥,并允许您请求访问令牌.
Scope Secrets用于授权访问内省端点.此端点使用范围标识和范围标识,因为只允许访问标记中包含的范围内省它.