Я создал .NET Core 2.0 API и опубликовал его в Azure.У меня есть экземпляр API Management (APIM), стоящий перед этим API и делающий все замечательные вещи, которые он делает.Однако есть одна вещь, которую я не могу обернуть головой или найти какую-либо документацию.Авторизация по операциям.(Не путать с аутентификацией, которая у меня работает очень хорошо).
Мой API - это простая служба RESTful с действиями CRUD.Давайте возьмем операцию чтения, например:
GET /api/owner/{ownerid}/thing/{thingid}
В этом случае я хочу предоставить пользователям разрешения на ЧТЕНИЕ ВЕЩЕЙ в конкретном ВЛАДЕЛЬЦЕ.Один и тот же пользователь не может иметь разрешения на чтение с другим владельцем.Если у пользователя есть разрешения, 200 OK
;в противном случае, 403 Forbidden
.
Оставляя это полностью carte blanche , каковы некоторые предложения для реализации этого?Я предполагаю, что входящая политика для каждой операции в APIM, где действие будет иметь место?Если да, то как?
Обновление 1
Мне сообщили о возможности использования одной и той же политики validate-jwt
на отдельных уровнях операций для добавления к * 1019.* политика в корне.Идея состоит в том, что корневая политика проверяет, что пользователь прошел проверку подлинности, а политика операций проверяет наличие определенных утверждений.Кажется, это работает хорошо, но это правильный метод или просто взлом?
Обновление 2
Для работы опции validate-jwt
модель разрешениянеобходимо будет хорошо согласовываться с ролями и группами;в противном случае это такая же работа, как и создание собственной пользовательской базы данных, в которой, по крайней мере, вы извлекаете выгоду из своих собственных правил.В конце я поместил разрешения в таблицу учетной записи хранения Azure (подойдет любая база данных) и использовал send-request
(с соответствующим кэшированием) для сбора разрешений на основе текущей операции и пользователя.Это работает хорошо, но "чувствует себя неправильно".Я рад поделиться подробностями с любым, кто хочет.А пока я оставлю это открытым, если у кого-то есть идея получше.