PxGrid API для getAssets не работает
-
Здравствуйте, Я пробую PxGrid и пытаюсь использовать клиент PxGrid как для публикации, так и для подписки на конечные ресурсы. Я следую этим ресурсам: Для контекста в коде —
https://developer.cisco.com/docs/pxgrid/#!pxgrid-context-in Для получения информации обо всех ресурсах —
https://d1nmyq4gcgsfi5.cloudfront.net/fileMedia/ea02ce59-2668-441a-601d-0c6ca59d8bf4/CiscopxGrid20_je.pdf
[Страница 127] Мне удалось успешно опубликовать информацию о конечной точке и подписаться на нее. Однако мой первоначальный вариант использования выглядит следующим образом: «Создать клиент PxGrid и службу pub-sub, которая публикует информацию об активах конечной точки; создать подписку на эту службу и получить вновь созданные конечные точки; использовать [restBaseURL]/getAssets, чтобы получить информацию о уже имеющихся активах для первого использования». Я делаю следующее: 1. Создаю клиент PxGrid и издателя для публикации информации об активах конечной точки — успешно. Пример кода для службы издателя: sessionProperties.put(
"wsPubsubService"
,
"com.cisco.ise.pubsub"
);
sessionProperties.put(
"assetTopic"
,
"/topic/com.cisco.endpoint.asset"
);
sessionProperties.put(
"restBaseUrl"
,
"https://"- config.getHostnames[
0
] +
":8910/pxgrid/ind/asset/"
);
ServiceRegisterResponse response = control.serviceRegister(
"com.cisco.endpoint.asset"
, sessionProperties); 2. Создаю клиент PxGrid, подписываюсь на вышеуказанное и получаю информацию об активах конечной точки по мере ее публикации — успешно Пример кода: executor.scheduleWithFixedDelay( -> {
try {
endpoint.subscribe(new StompSubscription("/topic/com.cisco.endpoint.asset", new EndpointAssetHandler));
} catch (IOException e) {
logger.error("Publish failure");
}
}, 0, 5, TimeUnit.SECONDS); Как я уже сказал, с помощью этого я успешно получаю информацию о
НОВЫХ
активах. 3. Однако представьте, что у меня есть конечные активы, которые предварительно зарегистрированы в ISE. Поэтому я делаю следующее: Service[] services = https.serviceLookup(
"com.cisco.endpoint.asset"
); Service service = services[
0
];
String url = service.getProperties.get(
"restBaseUrl"
) +
"getAssets"
;
logger
.info(
"url={}"
, url);
// pxGrid AccesssSecret for the node
String secret = https.getAccessSecret(service.getNodeName);
//SessionQueryRequest request = new SessionQueryRequest;
//request.startTimestamp = startTimestamp;
SampleHelper.
postObjectAndPrint
(url, config.getNodeName, secret, config.getSSLContext.getSocketFactory,
""
); Я получаю следующую ошибку 12:34:50.186 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountCreate request={"nodeName":"macSub"}
12:34:50.504 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountCreate response={"nodeName":"macSub","password":"MKrcmgdnWHErLG25","userName":"macSub"}
Password: MKrcmgdnWHErLG25
12:34:50.511 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate request={}
12:34:50.690 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate response={"accountState":"PENDING","version":"2.0.0.13"}
12:35:50.695 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate request={}
12:35:50.714 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccountActivate response={"accountState":"ENABLED","version":"2.0.0.13"}
12:35:50.714 [main] INFO com.cisco.pxgrid.samples.ise.SessionQueryAll - pxGrid controller version=2.0.0.13
12:35:50.722 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - ServiceLookup request={"name":"com.cisco.endpoint.asset"}
12:35:50.748 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - ServiceLookup response={"services":[{"name":"com.cisco.endpoint.asset","nodeName":"mac1","properties":{"wsPubsubService":"com.cisco.ise.pubsub","restBaseUrl":"https://<ISE_IP>:8910/pxgrid/ind/asset/","assetTopic":"/topic/com.cisco.endpoint.asset"}}]}
12:36:11.727 [main] INFO com.cisco.pxgrid.samples.ise.SessionQueryAll - url=https://<ISE_IP>:8910/pxgrid/ind/asset/getAssets
12:36:40.250 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccessSecret request={"peerNodeName":"mac1"}
12:36:40.486 [main] INFO com.cisco.pxgrid.samples.ise.PxgridControl - AccessSecret response={"secret":"95v8KD3EF86RI1eA"}
12:37:04.589 [main] INFO com.cisco.pxgrid.samples.ise.SampleHelper - postData=""
12:37:04.716 [main] INFO com.cisco.pxgrid.samples.ise.SampleHelper - Response status=401
Content: <h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p>
<b>Message</b> No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken</p>
<p><b>Description</b> The request has not been applied because it lacks valid authentication credentials for the target resource.</p><hr class="line" /><h3></h3></body></html> Ошибка гласит: 401 Неавторизован, однако я правильно получил секрет для службы публикации и peerNodeName и использовал его для аутентификации. Кроме того, как я уже сказал, я могу подписаться и получить вновь опубликованные конечные ресурсы. Я знаю, что могу получить информацию о существующих конечных активах непосредственно из ISE API, однако, поскольку вышеуказанный способ рекомендуется как
НОВЫЙ
способ работы и для поддержания согласованности с использованием
ТОЛЬКО ОДНОГО
набора API, было бы здорово узнать, где я делаю ошибку. Спасибо.
- config.getHostnames[
-
Здравствуйте, Пожалуйста, напишите мне напрямую по электронной почте. Спасибо, Джон jeppich@cisco.com
-
Я бы посоветовал вам попробовать использовать сертификат для аутентификации. А также попрошу Джона взглянуть на это. PS: Я перенес вашу дискуссию на форум поддержки разработчиков по вопросам безопасности для DevNet.
Здравствуйте! Похоже, вам интересна эта беседа, но у вас пока нет учетной записи.
Вы устали просматривать одни и те же посты каждый раз, когда заходите на сайт? После регистрации, вам не придётся искать обсуждения в которых вы принимали участие, настройте уведомления о новых сообщениях так как вам это удобно (по электронной почте или уведомлением). У вас появится возможность сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост может стать ещё лучше 💗
Зарегистрироваться Войти