Microsoft Azure媒体服务。无法使用REST API获取令牌(仅限应用)

时间:2017-08-14 12:53:15

标签: azure azure-media-services azure-api-apps

我正在构建简单的Angular2应用程序,其中给定用户可以通过Microsoft Azure Media Service REST API上传视频。

我试图通过使用此请求获取令牌:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=client_credentials&resource=https://rest.media.azure.net/&client_id=<application id>&client_secret=<password you selected for authentication>" https://login.microsoftonline.com/<Azure AD Tenant ID>/oauth2/token?api-version=2.11

但它不会通过AJAX(因为CORS)而起作用,那么还有其他简单的方法可以获得仅限应用的令牌吗?

1 个答案:

答案 0 :(得分:0)

我已经创建了返回令牌的php脚本,我认为这是最快的解决方案。

这是代码,可能对某人有用:

<?php

define(APP_CLIENT_ID, '<client_id>');
define(CLIENT_SECRET, '<client_secret>');
define(AD_TENANT_ID, '<tenant_id>');
define(RESOURCE_URL, 'https://rest.media.azure.net');

function curlTokenRequest() {

    $url = "https://login.microsoftonline.com/".AD_TENANT_ID."/oauth2/token";

    $request = "grant_type=client_credentials&resource=".RESOURCE_URL."&client_id=".APP_CLIENT_ID."&client_secret=".CLIENT_SECRET;

    $ch = curl_init($url);
    $options = array(
        CURLOPT_RETURNTRANSFER => true,         // return web page
        CURLOPT_HEADER         => false,        // don't return headers
        CURLOPT_FOLLOWLOCATION => false,         // follow redirects
        // CURLOPT_ENCODING       => "utf-8",           // handle all encodings
        CURLOPT_AUTOREFERER    => true,         // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 200,          // timeout on connect
        CURLOPT_TIMEOUT        => 200,          // timeout on response
        CURLOPT_POST            => 1,            // i am sending post data
        CURLOPT_POSTFIELDS     => $request,    // this are my post vars
        CURLOPT_SSL_VERIFYHOST => 0,            // don't verify ssl
        CURLOPT_SSL_VERIFYPEER => false,        //
        CURLOPT_VERBOSE        => 1,
        CURLOPT_HTTPHEADER     => array(
            "Content-Type: application/x-www-form-urlencoded"
        )

    );

    curl_setopt_array($ch,$options);
    $data = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    //echo $curl_errno;
    //echo $curl_error;
    curl_close($ch);

    http_response_code($httpcode);
    header('Content-Type: application/json');
    header('Access-Control-Allow-Origin: *');

    return $data;
}