Я пытаюсь использовать Identity Server 4 для защиты моего API.Сейчас я просмотрел всю документацию на http://docs.identityserver.io/en/release/quickstarts/1_client_credentials.html и настроил несколько успешных демонстраций.Однако есть одна вещь, которую я не понимаю.
Например, во-первых, нам нужно определить клиент на IS4, который выглядит следующим образом:
new Client
{
ClientId = "client",
// no interactive user, use the clientid/secret for authentication
AllowedGrantTypes = GrantTypes.ClientCredentials,
// secret for authentication
ClientSecrets =
{
new Secret("secret".Sha256())
},
// scopes that client has access to
AllowedScopes = { "api1" }
}
Затем в API мы защищаем его, добавляя пакет IdentityServer4.AccessTokenValidation
и добавляяКонфигурация в startup.cs
services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters();
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ApiName = "api1";
});
И, наконец, мы добавляем app.UseAuthentication();
Теперь все это работает при запуске, однако часть, которую я не понимаю, это где находитсяСекрет определен в API.Как видите, клиент явно ожидает секрет, но я нигде не определяю этот секрет в своем API.Я также нигде не определяю в IS4 что-либо о моем API, чтобы сказать, что вы защищаете API от этого URI или чего-то в этом роде.
Так как же это на самом деле работает с точки зрения IS4, зная оAPI и аутентификация его запросов?
РЕДАКТИРОВАТЬ:
Чтобы прояснить некоторую путаницу, да, есть клиент, который я отключил в коде выше, и теперь я вижу, что я не должен, и тамЯ предоставляю секрет, но я все еще не понимаю, как IS4 знает, как защитить мой конкретный API.Что делать, если запрос пришел с www.somerandomapi.com?Из того, что я читаю, это будет работать независимо. Исходя из того, что вы написали, имеет смысл, что клиент передает секрет, но нигде в моем коде IS4 не сказал, какой API защищать.