第 3 章 認証
オブジェクトストレージにアクセスするためには、事前にユーザ認証を受け、トークンを取得する必要があります。
ユーザ認証は Swift の ReST インターフェイスを通して行われ、次の拡張ヘッダを含めた GET リクエストを、認証用のパスに対して送ります。
- X-Storage-User: アカウント名:ユーザ名
- X-Storage-Pass: パスワード
認証に成功するとステータス 200 が返されます。レスポンスには拡張ヘッダ X-Storage-Url と X-Auth-Token が含まれており、認証に失敗した場合はステータス 401 が返されます。
拡張ヘッダ X-Storage-Url で示される文字列はストレージ URL と呼ばれ、そのユーザが属するアカウントのストレージ領域を一意に表す識別子です。
このストレージ URL に対して GET リクエストを発行すると、そのストレージ領域にあるコンテナの一覧を取得できます。ストレージ URL にコンテナ名やオブジェクト名を追加した URL にリクエストを送ることにより、それらコンテナやオブジェクトに対して操作を行うことができます。
拡張ヘッダ X-Auth-Token で示される文字列はトークンです。以降のオブジェクトストレージへ発行するリクエストの拡張ヘッダに毎回設定することが義務付けられています。
Swift は、このトークンによりユーザを識別し、また認証されていることを確認します。なお、トークンには有効期限があり、デフォルト設定 (システム側の設定) では 24 時間となっており、有効期限を過ぎるとトークンは無効になる (401エラーが返される) ので、再度ユーザ認証を受け、新しいトークンを取得する必要があります。
【リクエスト】
【レスポンス】
【実行例】
アカウント orion のユーザ joe が認証を得るために、/auth/v1.0 に対して GET リクエストを発行します。パスワードは testpassword です。
レスポンスとして、ストレージ URL「X-Storage-Url」とトークン「X-Auth-Token」が得られました。
GET /auth/v1.0 HTTP/1.1
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
Host: objstore.example.jp
Accept: */*
X-Storage-User: orion:joe
X-Storage-Pass: testpassword
HTTP/1.1 200 OK
X-Storage-Url: https://objstore.example.jp/v1/AUTH_orion-cabinet
X-Storage-Token: AUTH_tkfdd103dc022f49308bf9c96568fafbb2
X-Auth-Token: AUTH_tkfdd103dc022f49308bf9c96568fafbb2
Content-Length: 96
Date: Fri, 15 Jul 2011 09:08:14 GMT
{"storage": {"default": "local",
"local": "https://objstore.example.jp/v1/AUTH_orion-cabinet"}}
認証により得られたストレージ URL とトークンを利用して、オブジェクトストレージにリクエストを出します。ここでは、GET リクエストを利用して、コンテナ一覧を取得しています。
GET /v1/AUTH_orion-cabinet HTTP/1.1
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8ozlib/1.2.3.4 libidn/1.18
Host: objstore.example.jp
Accept: */*
X-Auth-Token: AUTH_tkfdd103dc022f49308bf9c96568fafbb2
HTTP/1.1 200 OK
X-Account-Object-Count: 218
X-Account-Bytes-Used: 2784340
X-Account-Container-Count: 4
Content-Length: 18
Content-Type: text/plain; charset=utf8
Date: Fri, 15 Jul 2011 09:10:14 GMT
bin
doc
image
src