2017-02-20 1 views
1

Вот мой конфиг Authreq.GetApiKey() не выполняет какой-либо запрос в БД ServiceStack ApiKeyAuthProvider

Plugins.Add(new AuthFeature(() => new AuthUserSession(), 

        new IAuthProvider[] 
        { 
         new ApiKeyAuthProvider(AppSettings) {RequireSecureConnection = false } 
        }) 
       { 
        IncludeRegistrationService = true, 

       }); 

Глобальный фильтр

GlobalRequestFilters.Add((req, res, requestDto) => 
       { 
        LastApiKey = req.GetApiKey(); 

       }); 

Я генерироваться ключ Api в БД и пытается передать ключ через почтальон или JsonServiceClient с базовой аутентификацией, имеющий ключ API в имени пользователя запроса Http. Я попытался передать токен-носитель в запросе Http тоже, но не смог получить api-ключ из req.GetApiKey(). Когда я вижу через профилировщик SQL, он не показывает какой-либо запрос. Однако я могу разрешить IManageApiKeys и умею выполнять его методы. Нужен ли мне какой-либо атрибут в моей службе или какая-либо дополнительная конфигурация в AppHost?

ответ

2

ServiceStack's API Key Auth Provider работает путем настройки аутентифицированного сеанса пользователя по запросу successful API Key Authentication requests. При настройке аутентифицированного сеанса пользователя API Key that was used to authenticate хранится в IRequest.Items Словарь, который возвращает IRequest.GetApiKey() Extension method.

Таким образом, IRequest.GetApiKey() не выполняет каких-либо вызовов БД, которые были сделаны первоначально при настройке Аутентифицированного сеанса пользователя.

Аутентификация выполняется, когда это необходимо, например. когда ваши услуги прокомментированы с любым из Authentication Атрибуты ниже:

  • [Authenticate]
  • [RequiredRole]/[RequiresAnyRole]
  • [RequiredPermission]/[RequiresAnyPermission]
+0

То, что я отсутствовал [Authenticate] атрибут прикладывал на апи службы метод и не работал. Когда я применил класс обслуживания, он работал, как ожидалось. Спасибо @mythz. – Anuj

+1

@Anuj FYI это связано с тем, что когда атрибут '[Authenticate]' находится в действии, он выполняется после запуска GlobalRequestFilters, но 'base.Request.GetApiKey()' все равно будет присутствовать при выполнении Сервиса. – mythz

Смежные вопросы