CLX C++ Libraries
Home >> wsse

Declaration

std::string wsse(const std::string& id, const std::string& password);
std::string wsse(const char* id, const char* password);

Overview

wsse 関数は,WSSE 認証のためのヘッダ文字列を生成します. 生成する文字列の書式は以下の通りです(ただし,改行コードは挿入されません).

UserToken Username="id", PasswordDigest="digest",
Nonce="nonce", Created="date"

nonce は 20Byte のランダムなデータを Base64 encode した文字列, date はヘッダ文字列を作成した UTC 時刻を ISO 8601 形式で表記した文字列となります.digest は,noncedatepassword を文字列連結したものを SHA-1 方式でハッシュ値を計算し, その結果を Base64 encode した文字列になります.

Example

example_wsse.cpp

#include <iostream>
#include "clx/http.h"
#include "clx/uri.h"
#include "clx/wsse.h"

int main(int argc, char* argv[]) {
    if (argc < 5) {
        std::cerr << "usage " << argv[0] << " domain path user_id password" << std::endl;
        std::exit(-1);
    }
    
    try {
        clx::http session(clx::uri::encode(argv[1]));
        
        std::map<std::string, std::string> heads;
        heads["X-WSSE"] = clx::wsse(argv[3], argv[4]);
        session.get(clx::uri::encode(argv[2]), heads);
        
        std::cout << "code: " << session.code() << std::endl;
        std::cout << std::endl;
        
        std::cout << "head" << std::endl;
        std::cout << "--" << std::endl;
        for (clx::http::head_iterator pos = session.head().begin();
            pos != session.head().end(); pos++) {
            std::cout << pos->first << ": " << pos->second << std::endl;
        }
        std::cout << std::endl;
        
        std::cout << "body" << std::endl;
        std::cout << "--" << std::endl;
        std::cout << session.body() << std::endl;
    }
    catch (clx::socket_error& e) {
        std::cerr << e.what() << std::endl;
        std::exit(-1);
    }
    
    return 0;
}
Result
$ ./test d.hatena.ne.jp "/tt_clown/atom/blog" tt_clown ********
code: 200

head
--
Content-Length: 200816
Content-Type: application/atom+xml;charset=type=feed
Date: Tue, 02 Sep 2008 12:43:14 GMT
Server: Apache/2.2.3 (CentOS)
Set-Cookie: b=$1$bCahvuZe$i9MYHfdOyiwfPDxL/rBsI1; path=/;
expires=Mon, 28-Aug-28 12:43:14 GMT; domain=.hatena.ne.jp
Vary: Accept-Encoding

body
--
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2008-08-30T00:00:00+09:00</updated>
  <id>tag:d.hatena.ne.jp,2008:diary-tt_clown</id>
  <title>Life like a clown</title>

・・・(以下略)・・・

Related Pages

  1. CLX C++ Libraries - http
  2. CLX C++ Libraries - base64
  3. CLX C++ Libraries - sha1