タコライスライスタコス

試したことのメモ

Azure Media Services AAD対応 REST API版

Azure Media Servicesの認証方式が、2018年6月にACSが廃止されAAD(Azure Active Directory)に変更されます。

今回は、以下の条件に該当する場合のAAD対応方法です。

REST API使用

SDKは使用していない

・サービスプリンシパル使用

 

[変更手順イメージ]

REST APIを利用する際に、AzureADアプリを利用して取得したアクセストークンが必要です。

  1. Media ServicesとAzure ADアプリを紐づける
  2. 必要な情報を収集
  3. Azure ADにアクセストークン要求
  4. 3で取得したアクセストークンを利用してREST APIを送信

私がこの中でハマった部分は、2,3,4です。(ほぼ全部w)

2の必要な情報を正しいものを収集して利用しないと、3と4で401エラーが出ることがあります。

 

[参考ページとサンプルプログラム]

このページの「サービスプリンシパルの認証」項目を参照してください。

サンプルプログラムは、こちら。(C#です)

 

ここから実際の手順を説明します。

1.Media ServicesとAzure ADアプリを紐づけ

 今回はサービスプリンシパルを利用します。

 左側のメニューリストから、「APIアクセス」をクリック。(図の①)

 右側に表示される「サービスプリンシパルを使ってAzure Media Services APIに接続する」をクリック。(図の②)

f:id:sakusakulager:20170909220811p:plain

 

 次にこの様な画面が表示されます。

 図の赤枠部分のAzure ADアプリを新規作成するか既存のものを利用するかを設定して、「保存」を押してください。

f:id:sakusakulager:20170909221753p:plain

  保存すると画面下部にこの2つのボタンが表示されます。

f:id:sakusakulager:20170909222135p:plain

 右側の「アプリケーションの管理」をクリックして、アクセストークン取得のために必要な情報を収集していきます。

 

2.必要な情報の収集

 今回のゴールのREST APIを送信するまでに必要になる情報はこちらです。

 [アクセストークン取得用]

 ・client_id

  上図の「アプリケーションの管理」>アプリケーションID

 

 ・client_secret

  上図の「アプリケーションの管理」>設定>キー

  キーをクリックして、説明と期間を入力してください。

  「保存」をクリックするとキーの値が表示されます。

  この時のみキーの値が表示され以降は非表示状態になるので、必ずコピーして保管してください。

 

 ・resource

  上図(上から2番目)の画面で「Media Services リソース」を利用します。

 

 ・grant_type

  ここでは「client_credentials」を設定します。  

  他のものを設定すると、400エラーなどが出ます。

 

 ・エンドポイント

  以下の場所にあるのでコピーしてください。

  左端のメニューからAzure Active Directory > アプリの登録を選択

  画面上部に「エンドポイント」が表示されるのでクリック。

  エンドポイント一覧が表示されるので、「OAUTH2.0 トークンエンドポイント」をコピーすればOKです。

 

 [REST API送信用]

 ・アクセストーク

  Azure ADから取得します。

  REST APIで利用する場合は、「Bearer アクセストークン」という形式にします。

 

 ・REST APIエンドポイント(ACSのエンドポイントとは異なります)

  上図(上から2番目)の画面で「REST APIエンドポイント」を利用します。

  「エンドポイント/Assets」という様な形式で要求を送信します。

ここまでで、AAD認証対応に必要な情報は揃いました。

 

3.Azure ADにアクセストークン要求

 2の[アクセストークン取得用]のclient_id、client_secret、resourceをパラメータとしエンドポイントを利用してアクセストークンを要求します。

PHPであれば、curlやfile_get_contentsを利用してPOSTしてください。

そうすると返ってくるデータのうち「access_token」が該当するものになります。

 

4.アクセストークンを利用してREST API送信

 REST APIはエンドポイント/{必要なJob}にアクセストークンを「Bearer アクセストークン」という形式でパラメータとして利用します。

例えばアセットを作成する場合は、

 ・リクエストURL:エンドポイント/Assets

 ・パラメータ:Bearer アクセストークン、コンテンツ情報など

エンドポイントやアクセストークンが正しい内容ではない時、401エラーが発生する場合がありますのでご注意ください。

 

C#が分かる方はサンプルプログラムを見てもらった方が早いと思います。

AMS.REST.TestのApp.configに必要情報、Program.csに必要情報を使用してアクセストークを取得する処理。

AMS.RESのUtils.csにアクセストークンの要求処理(GetUrlEncodedJWT)が記述されています。