Здравствуйте, есть CRM-система на ASP.NET Core.
Для возможности её интеграции с другими системами необходимо реализовать API.
API предполагает и write- и read-методы.
Два вопроса:
I)
На данный момент я рассматриваю следующие варианты организации доступа к API:
1. API_KEY = GUID + Квоты по времени
При регистрации Клиента-API выдается API_KEY и с этим ключем необходимо выполнять любой
запрос к API, указывая API_KEY в соответствующем заголовке.
2. access_token = JWT (OAuth2.0 ClientCredentials Flow)
При регистрации Клиента-API выдается client_id и client_secret.
Для работы с API клиенту необходимо сначала выполнить запрос на получение токена (access_token)
указав grant_type = client_credentials, client_id и client_secret.
И уже имея access_token выполнять запросы к методам API указав его в Authorization-заголовке.
Это
OAuth2.0 ClientCredentials Flow.
Какой из вариантов лучше подходит для этой задачи?
Я больше склоняюсь к простому API_KEY. Волнует безопасность этого подхода и хотелось бы узнать best practice.
II)
Также в API необходимо организовать Permission-подход к правам доступа, так как разные Клиенты-API могут иметь разные разрешения
для вызовов методов API.
Т.е. для каждого метода API завести соответствующий Permission, создать Roles (Роли), которые собирают в себе набор разрешенных для этих ролей Permissions.
И уже эти Роли выдаются каждому Клиенту-API.
Например:
Роль - "Поставщик данных" содержит в себе Permissions: (ImportProducts, ImportContacts)
Адекватный ли такой подход к организации прав доступа к API?