認証方法
- 通信方法はHTTP(S)である
- X-WSSEヘッダを利用する
- 必要なパラメータは4種あり、そのうちパスワードはSHA1でハッシュを求める形をとる
X-WSSEヘッダ
- X-WSSE: UsernameToken Username="hoge", PasswordDigest="K2tGOqR2Ow1CnFX++bb06CMy+rQ=", Nonce="YUc5blpRPT0=", Created="2010-06-28T16:56:10+09:00"
ヘッダの要素について
- Username : ユーザ名
- PasswordDigest : パスワード + Nonce + Created を連結しSHA1でハッシュ化、その後base64encodeをおこなう
- Nonce : リクエスト毎に作成したトークン
- Created : Nonceが作成された日時をISO-8601形式にしたもの
クライアント側実装例(PHP)
$url = "http://testurl/test.php";$user_name = "hoge";$password = "hoge";$nonce = "YUc5blpRPT0=";$created_time = date('c');$digest = sha1($password . $nonce . $created_time);$wsse_header = sprintf('X-WSSE: UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"', $user_name, $digest, $nonce, $created_time);$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: text/plain; charset=UTF-8',$wsse_header));var_dump(curl_exec($ch));curl_close($ch);exit(0);
サーバ側実装例(PHP)
$headers = getallheaders();header('Content-Type: text/plain; charset=UTF-8');echo "View Headers\n";foreach($headers as $k => $v){echo "Name -> $k : Value -> $v\n";}echo "end.\n";exit(0);
コードの注意点
- クライアント側でcurl_initとか、curlがらみの関数を利用してるが、PHPで利用する場合にはwith-curlオプションをつけてかつcurlのライブラリを入れておくこと
- サーバ側でgetallheadersを使っているが、php向けApacheモジュールを使うこと。といっても使わずに動作させることはないだろうけど。
参考