Azure REST访问令牌

时间:2018-03-10 17:25:02

标签: azure azure-web-sites

我想要下一个: 从我的网站能够启动虚拟服务器(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如果我提供这个,那就够了吗? 我以为应该有一些授权?

2 个答案:

答案 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 

邮递员: enter image description here

获得令牌后,您可以调用rest API。例如:

enter image description here