IdentityServer4 - ApiResource и клиент, как они связаны друг с другом
Я пытаюсь определить, как ApiResource и Клиент связаны друг с другом.
Как мне обеспечить, чтобы кто-то, запрашивающий токен у Клиента, запрашивал его для определенного ApiResource, имел доступ к этому ApiResource?
Испытаны ли Scopes вместе?
Вот немного измененный код из QuickStart:
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api1Resource", "My API")
{
Scopes =
{
new Scope("api1"),
new Scope("api1.ro"),
new Scope("offline_access")
},
UserClaims = { "role", "user" }
}
};
}
// client want to access resources (aka scopes)
public static IEnumerable<Client> GetClients()
{
// client credentials client, for APIs
return new List<Client>
{
new Client
{
ClientId = "apiClient",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets =
{
// Secret that can be created and given to ITSM_API
new Secret("secret".Sha512(), "ITSM_API Secret")
},
AllowedScopes = { "api1", "api1.ro", "offline_access" }
},
// resource owner password grant client, for interactive users
new Client
{
ClientId = "userClient",
AllowedGrantTypes = GrantTypes.List
(
GrantType.ResourceOwnerPassword,
"offline_access"
),
ClientSecrets =
{
new Secret("secret".Sha512(), "userClient Secret")
},
UpdateAccessTokenClaimsOnRefresh = true,
AllowedScopes = { "api1", "api1.ro", "offline_access" },
AbsoluteRefreshTokenLifetime = 86400,
AllowOfflineAccess = true,
RefreshTokenUsage = TokenUsage.ReUse
}
};
}
2 ответа
Прочтение этой статьи может помочь... https://leastprivilege.com/2016/12/01/new-in-identityserver4-resource-based-configuration/. До этого не было никаких ресурсов, только области применения. Абстрактная природа областей действия означала, что вещи не всегда были очевидны, поэтому ресурсы были изобретены.
Итак, где вы в настоящее время указываете свой Client > AllowedScopes
Вы можете просто ссылаться на свой ресурс, а не повторять области, которые вы определили в своем ресурсе. https://identityserver4.readthedocs.io/en/release/reference/api_resource.html
Области действия - это ресурсы, которые вы предоставляете своему серверу ресурсов. Например, если у вас есть сервер ресурсов календаря, ваши области видимости будут calendarentry
, read.calendarentry
, create.calendarentry
, Так что в основном то, что ваши пользователи могут делать на вашем сервере.
Ресурс API - это ваш ресурсный сервер в целом. Клиент (тот, который получает access_token), запрашивает необходимую ему область, и пользователь предоставляет права Клиенту.
Области действия помещаются в access_token, и когда ваш сервер ресурсов получает access_token, вам нужно проверить, разрешено ли пользователю (который идентифицирован access_token) получить доступ к запрошенной области. (Это можно сделать заранее на сервере IdentityServer). Например, вы можете проверить свою базу данных при входе в систему, имеет ли пользователь доступ к определенным вами ресурсам API. IdentityServer очень настраиваем, чтобы удовлетворить почти любой установке.