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 очень настраиваем, чтобы удовлетворить почти любой установке.

Другие вопросы по тегам