我利用 cloudstack API 来集成到 3de 派对门户中。我想通过 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=access&vm=29603248-6d8a-4582-aa9a-4d1bfb4d7714&apikey=3NRrdrhDTwggQ_oQny11dD39-XRWJxCd0dh2xqtMNShrz_jb4ZdhHtmRh7NYiOfRzLNwPcBVAfT9FHh9v 96vzg&响应=json&签名=u4c7QZNQNcN+2s3fhRNSHTyl7+Q=
回应: 帧src =“http://172.16.90.99/ajax?令牌=TCbfnguNvsHEkga3jPJEfZctqiPHTEynM6sAG2K8iIuioKHU8UU1QAWuQLHATd0dznP9vXPggHJp9km_1bmmStiD1PPKr6nZeid0NVI7kUt8_vOGkOK4vdM2 d388KFj8oA280mQ-ZjPHWPgU4gCn47nLVb-2cVxNgOijOjdgDEDj5vlqFkzz2YhcqkLt6CIVdFcAJ1g1gqvhrO530ubjLZsiQvxs_kn9X8eXMafhRm_qugu3k6lLuG38zXsK9jKN WkmqoAV2EBBZh-r6agm4dQ">
希望这有帮助,花了一些时间才解决这个问题,控制台代理的源代码可以在这里找到: https://github.com/apache/cloudstack/blob/master/server/src/main/java/com/cloud/servlet/ConsoleProxyServlet.java
对于遇到这个问题的其他人,Apache CloudStack
createConsoleEndpoint
API 端点可以让您实现所需的结果。
API 详细信息:https://cloudstack.apache.org/api/apidocs-4.18/apis/createConsoleEndpoint.html