2017-08-14 13 views
0

特定のユーザーがMicrosoft Azure Media Service REST API経由でビデオをアップロードできる簡単なAngular2アプリケーションを構築しています。Microsoft Azure Media Service。 REST APIを使用してトークンを取得できない(アプリケーションのみ)

私はこの要求を使用してトークンを取得しようとしている:そのアプリ専用得るために、他の簡単な方法があり、(CORSので、それはだ)

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経由で動作しません。トークン?

+0

最近のほとんどのブラウザが原因CORSにコールの種類をブロックします。 AJAXが呼び出せる中間層APIを構築する必要があります。この中間層APIは、API上のCORS設定を介してWebアプリケーションを信頼します。 Azure API ManagementまたはAzure関数をカスタムロジックのホストとして使用することをお勧めします。これは、Media Servicesアプリケーションの呼び出しに使用されるサービス主体の資格情報を保護するための良い考えです。 – johndeu

+0

ありがとう@johndeu私はそれが最速の解決策になると思います。 – Alex91ckua

答えて

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; 
} 
関連する問題