Как предоставить пользователям доступ к определенным API с помощью IdentityServer4? - PullRequest
0 голосов
/ 21 октября 2019

Я создаю новую службу токенов безопасности (на которой запущен IdentityServer4 в ASP.NET Core), и мне нужно предоставить пользователям, входящим в систему, доступ к приложениям только для определенных API.

Пока что я могу позволить пользователям войти в JS-клиент и получить авторизацию / аутентификацию с доступом к API-интерфейсам, настроенным в качестве разрешенных областей в службе токенов для этого конкретного JS-клиента.

Что я хочу сделать, так это настроить каждого пользователя для доступа только к определенным API-интерфейсам, а не ко всем API-интерфейсам в разрешенных областях.

Я новичок в этом, поэтому я даже не уверен, что задаю правильный вопрос. Но я надеюсь, что это все еще понятно и с радостью ответит на любой вопрос.


Как определить моего пользователя в службе токенов:

new TestUser
{
    SubjectId = "05624",
    Username = "asd",
    Password = "asd",
    Claims = new []
    {
        new Claim("name", "My Name"),
        new Claim("email", "myname@email.net")
    }
}

Как определить мой клиент в службе токенов:

new Client
{
    ClientId = "js-demo"
    AllowedGrantTypes = GrantTypes.Code,
    AllowedScopes = 
    { 
        "openid", 
        "api_1",
        "api_2"
    },
    AllowedCorsOrigins = { "http://localhost:5000" },
    RedirectUris = { "http://localhost:5000/callback.html" },
    PostLogoutRedirectUris = { "http://localhost:5000/index.html" },
    RequirePkce = true,
    RequireClientSecret = false,
    AllowAccessTokensViaBrowser = true
}

Как определить ресурс API в службе токенов:

new List<ApiResource>
{
    new ApiResource("api_1"),
    new ApiResource("api_2")
};

Как определить мой клиентский интерфейс:

var config = {
    client_id: "js-demo",
    response_type: "code",
    scope: "openid api_1 api_2",
    authority: "http://localhost:9999",
    redirect_uri: "http://localhost:5000/callback.html",
    post_logout_redirect_uri: "http://localhost:5000/index.html"
};

1 Ответ

1 голос
/ 21 октября 2019

IdentityServer не предназначен для этого. Он предоставляет приложению разрешение на использование идентификатора пользователя, а не разрешение пользователя на использование приложения.

Если вы строите только простую систему, вы можете назначить пользователям role утверждения и сделать политикив вашем приложении, что позволяет / запрещает пользователям в зависимости от их ролей. Но поскольку ваша логика разрешений будет расти, с ней будет сложно справиться.

Посмотрите на PolicyServer, у них есть хорошая презентация о проблеме, с которой вы столкнулись. https://policyserver.io/

...