Ustreamでは、サードパーティ製のクライアントソフトはHTTPベース(RESTful)のAPIを使ってユーザーのリソース(データ)にアクセスすることができます。 また、ユーザーのチャンネルへ映像配信することができる放送配信者用ライブラリも使用することができます。 REST APIと 放送配信者用ライブラリは両方とも OAuth 2.0 プロトコルを使って認証と認可を行っています。
サードパーティ製クライアントソフトの基本的な動作の流れは以下の通りです。:
OAuth 2.0プロトコルでは、最初に行われる2フェイズにていくつかのフロー(ワークフロー)が使用されます。 使用されるフローは、クライアントソフトの種類やアーキテクチャに最も最適なものが選ばれます。Ustreamでは以下のフローをサポートしています。:
認証処理時に呼び出されるウェブページやHTTPサービスはエンドポイントと呼ばれます。Ustreamには以下のエンドポイントがあります:
アクセストークンには二種類のものがあります: ベアラートークン(Bearer tokens) と MACトークン(MAC tokens)です。Ustream のREST API上で使う分には、 これら二つのトークンは同じリソースにアクセルすることができるのでなんら変わりはありません。ベアラートークンはHTTPSのように暗号化されたチャンネルでのみが使用でき、 同様に暗号化されていないチャンネルではMAC トークンの使用が適している、といった違いがあります。
クライアントソフトが Ustream の映像配信者用ライブラリを使うのであれば、必ずMAC トークンを使わなければなりません: 映像配信はRTMPプロトコル上で実行されているので 暗号化されていないためです。クライアントソフトがREST APIのみを使用するのであれば、ベアラートークンのほうが良いでしょう。REST APIはシンプルで軽量な実装がされているからです。
ベアラートークン と MAC トークン は同じ方法で取得することができます:認証エンドポイントにはトークンの種類を決めるパラメータがあり、 クライアントソフト側でどのトークンを使うか指定することができます。
既定ではアクセストークンには有効期間が設定されており(だいたい1日で期限切れになります。)、一部のリソースにしかアクセスすることができません。 認証処理において、クライアントはそういった制限を取り払うための特別な許可(スコープ)を要求することができます。 この要求は、認証エンドポイント上でユーザーに対して表示されます。 Ustreamでは現在以下のスコープをサポートしています。:
URL | https://www.ustream.tv/oauth2/authorize |
サポートしている認証フロー | 認証コードフロー、暗示フロー |
サポートしている HTTP メソッド | GET, POST |
認証エンドポイントとは、ログインフォームを持った安全なウェブページのことです。 クライアントソフトでは、付属のブラウザ機能を使って、このウェブページをユーザーに表示するようにしてください。 ユーザーのログイン操作が完了すると、ブラウザが専用のURLへとリダイレクトされます。 クライアントソフトはこのリダイレクトコールから、認証コードやアクセストークンを取得できます。 (認証コードとアクセストークンのどちらを取得できるかは、使用する認証フローによって変わります。)
以下のパラメータによって認証エンドポイントの動作が変わります。 HTTPプロトコルでGETやPOSTを実行する際には、これらのパラメータに値を設定しなければなりません。
サポートしているOAuth 2.0 の標準パラメータ:
パラメータ | タイプ | 重要度 | 説明 |
---|---|---|---|
response_type | string | REQUIRED | 認証コードフローの場合は"code"となります; 暗示フローの場合は"token"となります。 |
client_id | string | REQUIRED | クライアントを識別するための40 文字のsha1 ハッシュです。この値はUstream側で設定されます。 |
redirect_uri | string | REQUIRED | このURLは、認証処理後にブラウザがリダイレクトされるURLです。 The prefix of this URI must be registered at Ustream. |
state | string | OPTIONAL | この値は、XSRFアタックを防ぐためにGETパラメータとしてredirect_uriに埋め込まれます。詳細については OAuth2の技術文書を参照してください。 |
scope | string | OPTIONAL | オフラインスコープの場合は"offline"となり、映像配信者スコープの場合は"broadcaster"となり、区切り文字にはスペースを使用します。 |
Ustream独自の拡張パラメータ:
パラメータ | タイプ | 重要度 | 説明 |
---|---|---|---|
token_type | string | OPTIONAL | アクセストークンの種類を表します。このパラメータを設定する場合、ベアラートークンを使うのであれば"bearer"、 MAC トークンを使うのであれば "mac"と設定するようにしてください。既定では"bearer"が設定されています。 |
device_name | string | OPTIONAL | クライアントとなる端末やアプリケーションの、正式な製品名です。 これはOAuth2トークンの簡易識別に使われます。ユーザは自分のアカウントにアクセスしているクライアントを確認し、 Ustreamのウェブサイト上でそれらの承認を取り消すことができます。 |
display | string | OPTIONAL | "touch"と設定された場合、携帯に最適化された画面が表示されます。 |
lang | string | OPTIONAL | 指定した値(en_USなど)に応じた国・地域ごとの認証ページを表示します。; またこのパラメータによって、新規に登録されたユーザの使用言語も設定されます。 使用できる国・地域情報についてはセクション4.2.1. を参照してください。 |
戻り値:
以下の戻り値は、redirect_uriにHTTP GETパラメータとして埋め込まれます。
response_type パラメータに"code"と設定されている場合、以下の値が返ってきます。:
名前 | 説明 |
---|---|
code | 認証コード(長さは40 文字, 16進で暗号化された sha1 ハッシュ) |
state | エンドポイントに対してstateパラメータを設定して送信していた場合、Ustream側から送り返されてきます。 |
(メモ:現在、認証コードフローにおいてMAC トークン は実装されていません。)
response_typeパラメータに"token"と設定されてtoken_typeパラメータに"bearer"と設定されている(もしくは何も設定していない)場合、以下の値が返ってきます。:
名前 | 説明 |
---|---|
access_token | アクセストークン (長さは40 文字, 16進で暗号化された sha1 ハッシュ) |
expires_in | 現時点でのトークンの有効期間。単位は秒 |
token_type | "bearer"と設定されています。 |
state | エンドポイントに対してstateパラメータを設定して送信していた場合、Ustream側から送り返されてきます。 |
response_typeパラメータに "token"と設定されてtoken_typeパラメータに"mac"と設定されていた場合、以下の値が返ってきます。:
名前 | 説明 |
---|---|
access_token | アクセストークン (長さは40 文字, 16進で暗号化された sha1 ハッシュ)。 Ustream映像配信用ライブラリではmacIdと呼ばれます。 |
expires_in | 現時点でのトークンの有効期間。オフラインスコープが有効の場合は設定されません。 |
mac_key | 秘密MAC(長さは40 文字, 16進で暗号化された sha1 ハッシュ)。 Ustream映像配信用ライブラリではmacSecretと呼ばれます。 |
created_at | 作成された日時のUTC形式タイムスタンプ。 Ustream映像配信用ライブラリではmacIssueTimeと呼ばれます。 |
mac_algorithm | "hmac-sha-1"と設定されています。 |
token_type | "mac"と設定されています。 |
state | エンドポイントに対してstateパラメータを設定して送信していた場合、Ustream側から送り返されてきます。 |
エラー時の動作:
認証に失敗した場合、HTTPリダイレクションは行われません: ユーザーは、正しいIDとパスワードを入力するまで認証ページにとどまることができます。 パスワードを忘れてしまった場合は、新規ユーザーとして登録したりパスワードをリセットしたりすることが可能です。
正しく認証できても、認証ページでユーザーが「Deny」のボタンを押した場合、ブラウザは以下のパラメータを埋め込まれたredirect_uriにリダイレクトされます:
名前 | 説明 |
---|---|
error | "access_denied" |
state | エンドポイントに対してstateパラメータを設定して送信していた場合、Ustream側から送り返されてきます。 |
URL | https://www.ustream.tv/oauth2/token |
サポートしている認証フロー | 認証コードフロー |
サポートしている HTTP メソッド | POST |
クライアントソフトが認証コードを取得した時、 クライアントソフトが呼び出したエンドポイントのサーバ側コンポーネントはアクセストークンを返します。 以下のパラメータは必ず HTTP POSTのパラメータとして設定しなければなりません。
メモ:現在、トークンエンドポイントはBearer Tokensにのみ対応しています。
パラメータ | タイプ | 重要度 | 説明 |
---|---|---|---|
grant_type | string | REQUIRED | この場合は必ず"authorization_code"と設定してください。 |
client_id | string | REQUIRED | 長さは40 文字の16進で暗号化された sha1 ハッシュ。Ustream側から提供される。 |
code | string | REQUIRED | 認証エンドポイントから取得した認証コードです。 |
redirect_uri | string | REQUIRED | The redirection URI used by the authorization Server to return the authorization response in the previous step. |
上記のパラメータに加えて、クライアントを自分自身を証明する秘密情報(provided along with the Client key)を送らなければなりません。 認証は、HTTPのBasic認証を使って行われます。以下は HTTP ヘッダ例:
Authorization: Basic bc345abc45d6789abcdef0123aef0126789def01
サーバからの応答:
トークンエンドポイントからのレスポンスはJSON形式になります。成功すると JSON形式の応答が返ってきます。 (ベアラートークンの場合):
名前 | 説明 |
---|---|
access_token | アクセストークン (長さは40 文字, 16進で暗号化された sha1 ハッシュ)。 |
expires_in | 現時点でのトークンの有効期間。オフラインスコープが有効の場合は設定されません。 |
token_type | "bearer"と設定されています。 |
クライアントソフトがエンドポイントを呼び出すと、サーバ側コンポーネントはアクセストークンを返します。 このアクセストークンで、オーナーの識別情報(ユーザー名とパスワード)を使用することができます。 以下のパラメータは必ず HTTP POSTのパラメータとして設定しなければなりません。
パラメータ | タイプ | 重要度 | 説明 |
---|---|---|---|
grant_type | string | REQUIRED | この場合は必ず"password"と設定してください。 |
client_id | string | REQUIRED | 長さは40 文字の16進で暗号化された sha1 ハッシュ。Ustream側から提供される。 |
client_secret | string | REQUIRED | 長さは40 文字の16進で暗号化された sha1 ハッシュ。Ustream側から提供される。 |
username | string | REQUIRED | Ustreamでのユーザー名 |
password | string | REQUIRED | Ustream でのパスワード |
device_name | string | OPTIONAL | 端末名 |
token_type | string | OPTIONAL | 必ず"bearer" か "mac"と設定してください。 |
scope | string | OPTIONAL | オフラインスコープの場合は"offline"となり、映像配信者スコープの場合は"broadcaster"となり、 区切り文字にはスペースを使用します。 |
上記のパラメータに加えて、クライアントを自分自身を証明する秘密情報(provided along with the Client key)を送らなければなりません。 認証はHTTPのBasic認証を使って行われます。以下は HTTP ヘッダ例:
Authorization: Basic bc345abc45d6789abcdef0123aef0126789def01
サーバからの応答:
名前 | 説明 |
---|---|
access_token | アクセストークン (長さは40 文字, 16進で暗号化された sha1 ハッシュ)。 |
expires_in | 現時点でのトークンの有効期間。オフラインスコープが有効の場合は設定されません。 |
token_type | "bearer"か "mac"と設定されています。 |
mac_key | 秘密MAC(長さは40 文字, 16進で暗号化された sha1 ハッシュ)。 Ustream映像配信用ライブラリではmacSecretと呼ばれます。 |
created_at | 作成された日時のUTC形式タイムスタンプ。 Ustream映像配信用ライブラリではmacIssueTimeと呼ばれます。 |
mac_algorithm | "hmac-sha-1"と設定されています。 |
APIの中には、ユーザーのリソースにアクセスできないものがあります。これらのAPIはクライアントアプリ用に実装されているものだからです。予約管理機能がいい例でしょう。
これらはクライアントが自分自身を識別するために必要なものです。そのためにUstreamではクライアントを識別するためのOAuth2認証フローを実装し、あなたのアプリにクライアントソフト用のアクセストークンを渡します。
クライアントが通常のユーザーレベルのトークンを使っていた場合ユーザーリソースはそのアクセスを決して受け付けませんが、このクライアント識別トークンを使えば
ユーザーリソースにアクセスすることができます。
以下のパラメータは必ず HTTP POSTのパラメータとして設定しなければなりません。
パラメータ | タイプ | 重要度 | 説明 |
---|---|---|---|
grant_type | string | REQUIRED | この場合は必ず"client_credentials"と設定してください。 |
client_id | string | REQUIRED | 長さは40 文字のsha1 ハッシュ。Ustream側から提供される。 |
device_name | string | OPTIONAL | 端末名 |
token_type | string | OPTIONAL | 必ず"bearer" か "mac"と設定してください。 |
scope | string | OPTIONAL | オフラインスコープの場合は"offline"となり、映像配信者スコープの場合は"broadcaster"となり、 区切り文字にはスペースを使用します。 |
上記のパラメータに加えて、クライアントを自分自身を証明する秘密情報(provided along with the Client key)を送らなければなりません。 認証はHTTPのBasic認証を使って行われます。以下は HTTP ヘッダ例:
Authorization: Basic bc345abc45d6789abcdef0123aef0126789def01
名前 | 説明 |
---|---|
access_token | アクセストークン (長さは40 文字, 16進で暗号化された sha1 ハッシュ)。 |
expires_in | 現時点でのトークンの有効期間。オフラインスコープが有効の場合は設定されません。 |
token_type | "bearer"か "mac"と設定されています。 |
mac_key | 秘密MAC(長さは40 文字, 16進で暗号化された sha1 ハッシュ)。 Ustream映像配信用ライブラリではmacSecretと呼ばれます。 |
created_at | 作成された日時のUTC形式タイムスタンプ。 Ustream映像配信用ライブラリではmacIssueTimeと呼ばれます。 |
mac_algorithm | "hmac-sha-1"と設定されています。 |
認証コード、パスワード、クライアント識別トークンでのエラー応答の動き:
エラーが発生した場合、トークンエンドポイントは以下形式のJSON型データを返します。:
{
"error": "ERROR_VALUE"
}
また、エラーを示すHTTPステータスコードが送られます。これは発生している可能性のあるエラー内容です。:
エラー値 | HTTPレスポンスコード | エラー状態 |
---|---|---|
invalid_request | 400 Bad Request | 必須パラメータが1つ以上抜けている。 |
unsupported_grant_type | 501 Not implemented | クライアントがサポートしていない許可タイプを要求している。現在は"authorization_code"のみサポートしており、 "client_credentials"と"refresh_token"と "password" はサポートしていません。 |
invalid_grant | 400 Bad Request | 設定されたauthorization_codeが存在しないか、期限切れとなっている。 |
invalid_client | 400 Bad Request | 指定クライアントが存在しないか、秘密情報が間違っているか、認証要求したクライアントとトークンを要求したクライアントが一致しません。 |
server_error | 503 Server Error | 何らかの理由で、このタイミングではサーバがリクエストを処理できなかった。時間を置いて再実行してください。 |
1. クライアントはブラウザで認証エンドポイントを開きます。:
https://www.ustream.tv/oauth2/authorize ?response_type=code &client_id=AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDD &redirect_uri=http://example.com/get_access_token &device_name=My%20Device &scope=offline+broadcaster &display=touch &state=XYZ
2.ユーザーは自身のIDとパスワードを入力し、"Allow"ボタンをクリックします。ブラウザは以下のURLにリダイレクトされます。:
http://example.com/get_access_token?code=19d8dbb3ebac55f110c3b526e38bcfdfbf46d659&state=XYZ
3. The page handler at http://example.com/get_access_token retrieves the Access Token using the Token Endpoint:
POST /oauth2/token HTTP/1.1
Host: www.ustream.tv
Authorization: Basic xxxxxxxxxxyyyyyyyyyywwwwwwwwwwzzzzzzzzzz
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&client_id=AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDD
&code=19d8dbb3ebac55f110c3b526e38bcfdfbf46d659&redirect_uri=http://example.com/get_access_token
4.トークンエンドポイントからのレスポンスにアクセストークンが含まれています:
HTTP/1.1 200 OK
Cache-Control: no-store
Content-Type:application/json; charset=UTF-8
{"access_token":"ab345cdef123ef1267890abcdef04567890abcd1", "token_type":"bearer", "expires_in":86400}
1.クライアントはブラウザで認証エンドポイントを開きます。:
https://www.ustream.tv/oauth2/authorize ?response_type=token &token_type=mac &client_id=AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDD &redirect_uri=http://example.com/token &device_name=My%20Device &scope=offline+broadcaster &display=touch &state=XYZ
2/a.ユーザーは自身のIDとパスワードを入力し、"Allow"ボタンをクリックします。ブラウザは以下のURLにリダイレクトされます。:
http://example.com/token ?access_token=1a446888dfaa921e189479409d638d680dfdbf77 &token_type=mac &mac_key=dfc337d39b0941650b67051a622885cb0eb67a51 &mac_algorithm=hmac-sha-1 &created_at=1310000546 &state=XYZ
2/b.認証後にユーザーが認証ページをキャンセルするかDenyボタンをクリックすると、ブラウザは以下のURLにリダイレクトされます。:
http://example.com/token?error=access_denied&state=XYZ
https://www.ustream.tv/oauth2/authorize ?response_type=token &client_id=057ce944b015ec9fdf546dfbbe1b7af4b19e8158 &redirect_uri=https://www.ustream.tv/oauth2/redirect &device_name=MyDevice &display=touch &state=XYZ
ログイン後、ブラウザは 専用の URL (クライアントソフトによって定義されたURL)にリダイレクトされます。
アクセストークンはURL内に埋め込まれて表示されます。以下にある例に見られるように、リクエストではトークンを記載した認証HTTPヘッダを使うようにしてください。:
"Authorization: Bearer 3c2573673b782f6544405a22636f3d5d3b6f3950"
$curl -i -X POST -H "Authorization: Bearer 3c2573673b782f6544405a22636f3d5d3b6f3950" -d "title=Whatever+Test+1234" https://api.ustream.tv/users/self/channels.json
HTTP/1.1 201 CREATED
Server: nginx/1.2.6
Date: Tue, 15 Jan 2013 13:08:06 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 123
Connection: keep-alive
Vary: Host
X-Powered-By: PHP/5.3.20-1~dotdeb.0
Cache-Control: no-store
Accept-Ranges: bytes
X-Varnish: 703443498
Age: 0
Via: 1.1 varnish
{"channel":{"id":"13091307","title":"Whatever Test 1234","url":"whatever-test-1234","tiny_url":"http://ustre.am/SVE7"}}
Ustream以外の動画配信ソフト・動画配信アプライアンスを使用したいのであれば(Flash Live Media EncoderやWirecast、Tricasterなど)、 そのチャンネルへの動画配信が許可されていることを証明する、Ustreamに承認されたストリームキーが必要です。 Also you should get the ingest point where your device or application should connect.
以下の方法でstreamkeyにアクセスすることができます(it is usually the parameter "stream" in the configuration of these devices)。streamkeyを取得するためのエンドポイントでは、処理のためにOAuth2の認証キーが要求されます。 エンドポイントは https://api.ustream.tv/channels/CHANNEL_ID/authorizations/broadcasting.jsonです。
実行例GET /channels/123456/authorizations/broadcasting.json
Host: api.ustream.tv
Authorization: Bearer 3c2573673b782f6544405a22636f3d5d3b6f3950
Content-Type: application/x-www-form-urlencoded
応答例
HTTP/1.1 200 OK
Cache-Control: no-store
{"streaming_key": "kqDlIyGb0H47g8SRSyKjyxAqPmiwTbw3"}
Flash media live encoderを使用したいのであれば、 そのチャンネルへの動画配信が許可されていることを証明する、Ustreamに承認されたチャンネルキーが必要です。 Also you should get the ingest point where your device or application should connect.
以下の方法でchannelkeyにアクセスすることができます(it is usually the parameter "stream" in the configuration of these devices) 。channelkeyを取得するためのエンドポイントでは、 処理のためにOAuth2の認証キーが要求されます。エンドポイントは https://api.ustream.tv/channels/CHANNEL_ID/authorizations/broadcasting/channel_key.jsonです。
実行例
GET /channels/123456/authorizations/broadcasting/channel_key.json
Host: api.ustream.tv
Authorization: Bearer 3c2573673b782f6544405a22636f3d5d3b6f3950
Content-Type: application/x-www-form-urlencoded
応答例
HTTP/1.1 200 OK
Cache-Control: no-store
{"channel_key": "kqDlIyGb0H47g8SRSyKjyxAqPmiwTbw3"}