WSO2 API Manager получает уровень подписки без ключа API / токена - PullRequest
0 голосов
/ 04 июля 2018

В настоящее время работает с WSO2 API Manager версии 2.2.0. Это очень хорошо с реализацией OAuth 2.0.

Когда мы определяем новое приложение через WSO2 API Store, мы можем сгенерировать Ключ и Секрет потребителя и выбрать Тип предоставления для создания токена доступа. После этого мы должны подписаться на API с некоторым уровнем подписки.

Токен доступа (также называемый ключом API) затем авторизуется во время вызова API. Токен доступа связан с атрибутами, которые затем помещаются в AuthenticationContext, например, следующий фрагмент из org.wso2.carbon.apimgt.gateway.handlers.security.oauth.OAuthAuthenticator.java:

APIKeyValidationInfoDTO info;
info = keyValidator.getKeyValidationInfo(apiContext, apiKey, apiVersion, authenticationScheme, clientDomain,
                    matchingResource, httpMethod, defaultVersionInvoked);
if (info.isAuthorized()) {
            AuthenticationContext authContext = new AuthenticationContext();
            authContext.setAuthenticated(true);
            authContext.setTier(info.getTier());
            authContext.setApiKey(apiKey);
            authContext.setKeyType(info.getType());
            authContext.setUsername(info.getEndUserName());
            authContext.setCallerToken(info.getEndUserToken());
            authContext.setApplicationId(info.getApplicationId());
            authContext.setApplicationName(info.getApplicationName());
            authContext.setApplicationTier(info.getApplicationTier());
            authContext.setSubscriber(info.getSubscriber());
            authContext.setConsumerKey(info.getConsumerKey());
            APISecurityUtils.setAuthenticationContext(synCtx, authContext, securityContextHeader);

Это работает отлично, но теперь я хотел бы иметь свой собственный обработчик аутентификации, который основан не на маркере доступа, а на сертификатах X.509, где CN будет моей идентификацией объекта ( Запись пользовательского Обработчики ).

А также я хотел бы воспользоваться преимуществами параметров приложения и уровней подписки, чтобы управлять такими атрибутами для различных объектов, вызывающих API-интерфейсы с использованием сертификата X.509. Использование вышеупомянутого вызова не работает, потому что у меня нет apiKey.

Я пытаюсь найти способ получения данных API приложения с идентификацией из сертификата X.509 вместо токена доступа для установки уровня подписки и других атрибутов AuthenticationContext.

Какие-либо предложения, это может быть сделано?

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Эти атрибуты являются обязательными, поскольку они используются для регулирования уровня приложения и подписки в обработчике газа. Что вы можете сделать, это установить некоторый атрибут, например, commonNameAtribute (CN) в сертификате в качестве имени приложения, ip клиента (получить из messageContext) в качестве идентификатора приложения. Таким образом, регулирование на уровне приложения будет работать без создания приложения в магазине. Установите уровень приложений как любой из доступных уровней приложений в магазине. Установить ключ потребителя как ноль, установить подписчика также как commonNameAtribute. И вы можете переопределить DefaultKeyValidationHandler, чтобы пропустить проверку подписки. Этот класс можно настроить в api-manager.xml

0 голосов
/ 04 июля 2018

Невозможно найти информацию о подписке или приложении без токена, если вы не отправите эту информацию вместе с самим запросом. Без токена вы можете знать только, что такое API, но вы не знаете, что такое приложение.

...