Я использую приложение JS, просматривая образец кода и пытаюсь понять, как я могу обеспечить безопасность системы.
AFAIK, секреты, предоставленные в областях на сервере идентификации, должны быть проверены после того, как токен передан на сервер 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, как в коде, но пользователь по-прежнему аутентифицирован, и я могу получить доступ ко всем утверждениям.
Итак, как работает секретный механизм проверки токена?
Нужно ли нам предоставлять секрет на уровне клиента в дополнение к секрету, предоставленному для Scope API?