我想要下一个: 从我的网站能够启动虚拟服务器(Ubuntu,Linux,Windows服务器)。 我使用AWS进行了这个操作,并且很容易通过IAM找到访问密钥和令牌。
我想尽可能使用Azure来获取访问密钥和令牌。我找到了一些关于如何在这里喜欢的教程:https://www.youtube.com/watch?v=ujzrq8Fg9Gc&t=51s但它做了很多事情,我只需要密钥令牌和秘密令牌就可以访问虚拟主机并对其进行操作。
我看到还有oAuth2而且太多了,不能为这个项目设置它。
还有所谓的azure ad https://docs.microsoft.com/en-us/rest/api/
因此,任何帮助都可以很好地找到易于访问的密钥和令牌来列出,创建,更新虚拟机。
也许是因为我有免费帐户?
更新: 我找到了这个,很容易: https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines/createorupdate
只是说:PUT https://management.azure.com/subscriptions/ {subscriptionId} / resourceGroups / {resourceGroupName} /providers/Microsoft.Compute/virtualMachines/ {vmName}?api-version = 2017-12-01
subscriptionID如果我提供这个,那就够了吗? 我以为应该有一些授权?
答案 0 :(得分:0)
要获得Azure AD授权服务器的授权,您需要先获取访问令牌。 URI(PUT)是不够的。要获取访问令牌,通常需要转到Azure AD注册您的客户端应用程序(它是用于授权的对象,而不是您可能认为的Apple或Android商店中的应用程序)。注册应用程序时,您将获得客户端ID并可以生成客户端密钥。使用租户ID,客户端ID和客户端密钥,您可以使用HTTP请求从OAuth2端点https://login.microsoftonline.com/{tenantID}/oauth2/token
请求访问令牌。拥有访问令牌后,您需要在Http请求中构造授权头。这是Bearer token。
使用PUT时,还需要构造请求体对象。这是一个例子
var requestBody = new
{
location = westus,
properties = new
{
hardwareProfile = new
{
vmSize = "Standard_D1_v2"
},
storageProfile = new
{
osDisk = new
{
name = "VMDisk",
image = new
{
uri = ...
}
}
}
....
};
请求正文不必像我上面定义的那样是匿名类型。这取决于你的熟悉程度。如果使用这样的结构,您可以使用PutAsJsonAsync(url, requestBody)
。 Url实际上是请求Url,它是Uri(management.azure.com)和参数{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}?api-version=2017-12-01
的组合
我在此处使用Http请求详细说明了访问令牌http://thuansoldier.net/?p=6790
如果您想了解有关如何使用PUT请求Azure Resource Manager API的更多详细信息,请参阅详细信息http://thuansoldier.net/?p=7292(查找标题创建新的密钥库,我在其中描述了如何使用PUT和构建请求主体)这正是您创建新VM资源所需的。
答案 1 :(得分:0)
正如Thuan Ng所说,你需要先得到令牌。如果要获取令牌,则需要创建服务主体并赋予其Owner
角色。更多信息请查看link。
创建sp后,您将获得客户端ID,客户端密码。您可以使用它们来获取令牌。您可以获得link的更多信息。要使用power shell获取令牌,您可以使用以下示例:
##get token
$TENANTID=""
$APPID=""
$PASSWORD=""
$result=Invoke-RestMethod -Uri https://login.microsoftonline.com/$TENANTID/oauth2/token?api-version=1.0 -Method Post -Body @{"grant_type" = "client_credentials"; "resource" = "https://management.core.windows.net/"; "client_id" = "$APPID"; "client_secret" = "$PASSWORD" }
$token=$result.access_token
##set subscriptionId and resource group name
$subscriptionId=""
$resourcegroupname="shui5"
$Headers=@{
'authorization'="Bearer $token"
'host'="management.azure.com"
'contentype'='application/json'
}
$body='{
"location": "northeurope",
"tags": {
"tagname1": "test-tag"
}
}'
Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/$subscriptionId/resourcegroups/${resourcegroupname}?api-version=2015-01-01" -Headers $Headers -Method PUT -Body $body
获得令牌后,您可以调用rest API。例如: