CLX C++ Libraries - wsse
Author: clown

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 は，nonce，date， password を文字列連結したものを 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