通过API访问Apache Cloudstack控制台代理

问题描述

我利用cloudstack API集成到3de party门户中。我想通过API访问控制台代理,找不到可以使用的API方法

获取特定虚拟机的会话令牌,然后从我们的3de party门户打开ajax窗口。

管理服务器应公开通过API使用的控制台代理,然后我假定您应基于登录凭证或通过您有权访问的特定虚拟机的API获取令牌。

如果有人以前这样做过,不妨分享一些与此请求有关的细节。

解决方法

在查看控制台代理的源代码时,我通过以下方法解决了此问题:

使用与普通cloudstack api所定义的身份验证过程相同的身份验证程序-http://docs.cloudstack.apache.org/en/latest/developersguide/dev.html

使用相同的API密钥,并使用Cloudstack提供的API Secret对请求进行签名:

控制台代理端点如下-/ console?cmd = access&vm = xxx,成功后,将返回一个带有令牌的URL来访问虚拟机。

测试结果-

请求: CloudstackRequestClientFilter - > CMD =存取&VM = 29603248-6d8a-4582-aa9a-4d1bfb4d7714&apikey = 3NRrdrhDTwggQ_oQny11dD39-XRWJxCd0dh2xqtMNShrz_jb4ZdhHtmRh7NYiOfRzLNwPcBVAfT9FHh9v96vzg&响应= JSON&签名= u4c7QZNQNcN + 2s3fhRNSHTyl7 + Q =

响应: FRAME SRC = “http://172.16.90.99/ajax?token=TCbfnguNvsHEkga3jPJEfZctqiPHTEynM6sAG2K8iIuioKHU8UU1QAWuQLHATd0dznP9vXPggHJp9km_1bmmStiD1PPKr6nZeid0NVI7kUt8_vOGkOK4vdM2d388KFj8oA280mQ-ZjPHWPgU4gCn47nLVb-2cVxNgOijOjdgDEDj5vlqFkzz2YhcqkLt6CIVdFcAJ1g1gqvhrO530ubjLZsiQvxs_kn9X8eXMafhRm_qugu3k6lLuG38zXsK9jKNWkmqoAV2EBBZh-r6agm4dQ”>

希望这会有所帮助,花了一些时间来解决这个问题,控制台代理的来源可以在这里找到: https://github.com/apache/cloudstack/blob/master/server/src/main/java/com/cloud/servlet/ConsoleProxyServlet.java