我正在为我的网站设置自动部署管道,作为其中的一部分,我必须使用 VSTS RM 自动导入 API。我已经在 VSTS 任务中使用自定义 PS 脚本实现了这一目标。我使用招摇的网址导入
即
Import-AzureRmApiManagementApi –Context $apimContext –SpecificationFormat 'swagger' –SpecificationUrl 'http://mywebapp.com/swagger/docs/v1' –Path 'apis'
为了提高安全性,我们实施了重定向由客户端证书保护的http请求https。问题来了。
现在我们不能使用上面的命令来导入,该命令返回 403 禁止错误,因为 API 管理器没有绕过证书验证的选项。 可以做些什么来解决这个问题?
即使我尝试使用特定证书调用 webrequest 网址,并导入在本地机器中运行良好的 API。
$swaggerurl="https://mywebapp.org/swagger/docs/1" $cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("xyz.cer") $test=Invoke-WebRequest -Uri "$swaggerurl" -Certificate $cert $test.状态码
Import-AzureRmApiManagementApi –Context $apimContext –SpecificationFormat 'swagger' –SpecificationUrl 'http://mywebapp.com/swagger/docs/v1' –Path 'apis'
但不是在 VSTS 内联电源外壳中。它不接受证书值并返回 403 禁止错误。
请让我知道如何解决这个问题?
问题:
1.由于 https 客户端证书验证,无法导入到 API 管理器。
- VSTS 内联电源外壳
- 不接受证书参数详细信息,即使我使用正确的证书。 同样的情况适用于本地计算机。 VSTS 内联电源外壳是否有任何限制。
提前谢谢。
改用Azure PowerShell step/task。(包括在"部署"类别中)
为此,API 管理服务需要代表你向 URL 发出 WebRequest,并在请求中使用客户端证书。 我们目前不提供使用客户端证书调用 Import-AzureRmApiManagementAPI 的选项。
唯一可用的选项是使用 Powershell (Invoke-RestMethod) 创建 WebRequest,将 swagger 下载到本地文件并使用cmdlet 中的 -SpecificationPath参数
此问题已通过将专用代理更改为以管理员帐户身份运行得到解决。现在一切都按预期工作:)
使用 VSTS 专用代理导入 API