0

我正在使用JS应用程序遍历代码示例,并试图了解如何确保系统安全。 AFIK,身份服务器上的范围提供的秘密必须在令牌传递给资源API服务器以允许访问之后进行验证。Thinktecture Identity Server 3:防止未经授权访问WEB API的客户机密

因此,身份服务器上我们制定了一个秘密就像我们的“API”资源范围:

 new Scope 
      { 
       Name = "api", 
       DisplayName = "Access to API", 
       Description = "This will grant you access to the API", 
       ScopeSecrets = new List<Secret> 
       { 
        new Secret("api-secret".Sha256()) 
       }, 
       Type = ScopeType.Resource 
      }, 

虽然在我们验证此令牌是由受信任的发行人授予的资源的API:

// Wire token validation 
     app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions 
     { 
      Authority = "https://localhost:44300", 

      ClientId = "api", 
      //ClientSecret = "api-secret", 
      ClientSecret = "api-secret-changed", 

      RequiredScopes = new[] { "api" } 
     }); 

但是,我已经更改了ClientSecret,因为在代码中,但用户仍然通过身份验证,我可以访问所有声明。

那么,令牌验证的秘密机制是如何工作的?

除了提供给范围API之外,我们是否还需要在客户端提供一个秘密?

回答

1

作用域上的秘密用于与自检端点进行通信。

如果令牌是参考令牌,或者验证模式在令牌验证中间件上显式设置为ValidationEndpoint,则使用自省。

+0

AFAIK秘密不需要验证令牌是可信的,所以可以避免使用它并保持系统安全。如果我需要使用引用令牌,为什么我应该添加密钥,这对整个系统的安全性有什么影响,是否因为web API会再次与发布者进行通信以验证此令牌? – Coding

+1

仅供参考 - API需要与颁发者通信以验证令牌是。 https://leastprivilege.com/2015/11/25/reference-tokens-and-introspection/ – leastprivilege