« 思いついた事を独り言っぽく羅列して見ます。 | メイン | BlogWrite 0.9.5 »
2004年06月30日
ココログ Atom API の小さくて大きな問題
という事で、BlogWriteを使ってココログ試してみました。まず、XML-RPC経由ではとりあえず問題なく投稿出来ました。 観測気球さんが教えてくれたカテゴリーの件は後でゆっくり調べます。
でAtom APIの問題(厳密にはWSSEの)。(技術的な話になりますけどすみません。)
Atom APIでは認証にWSSEというのを使います。これが問題です。
現在BlogWriteでは、LivedoorとBloggerでAtom APIでの投稿を確認しています。そこで、ココログ(つまりTypePad)でAtom APIを試そうと思うと、
X-WSSE PasswordDigest is incorrectというエラーが返ります。簡単に言うと認証に失敗した、という事です。
で、なぜBloggerとLivedoorBlogでOKで、ココログではダメかというと、WSSEのPasswordDigestの扱い方法が違うんです。やばいです。 みんながみんな自分の方法でやってるような物で、こういったのはしっかり仕様で決めないとよくないです。 TypePadのAtom API(仕様)には、
base64(sha1(Nonce . Created . Password))として、作成した物をHTTPのヘッダーに以下の様にして送信するとあります。実際そうなんですが、これだけでは仕様が不十分です。穴があります。WSSの穴。 だから[Blooger、LivedoorBlog] 対 [TypePad(ココログ、ブログ人)、(そしておそらくMT3)」]で違いが出来てしまうのです。
X-WSSE: UsernameToken Username="Melody", PasswordDigest="VfJavTaTy3BhKkeY/WVu9L6cdVA=", Created="2004-01-20T01:09:39Z", Nonce="7c19aeed85b93d35ba42e357f10ca19bf314d622"
で、仕方が無いので、いったんココログのPasswordDigestの扱いにあわせて送信すると、観測気球さんの報告( ココログで Atom API を使ってみる)にあるように、
Can't call method "type" on unblessed reference at /usr/local/lib/perl5/site_perl/5.8.1/XML/Atom/Thing.pm line 95.というエラーが返ります。(このエラーはおそらくAtom APIの処理でバグっているのだと思いますが中の人ではないのでなんとも言えません。)
という事は、観測気球さんはおそらくココログではとりあえずテスト出来ているが、BloggerやLivedoorでAtom APIのテストをしようとすると、「Invalid Login」とかなってしまいませんか?
Atomクライアントは少ない(個人的にはecho、echo for win)しかしらない。echo for winはやっつけでやったのでテキトウらしいし、どの道、
echo for winは一度もまともに動いた事が
ないので(言い過ぎ)テストしませんが、今後大きな問題になるかと思います。
で、肝心のどこがどう違うんだよ!という質問は、企業秘密なのでお答えできません。ー>嘘 あとでしっかり調べてしっかり書きます。
現状ではどっちに合わせようか悩む所なのですが、ココログにはXML-RPCがあるし、ココログのAtomサポートはココロもとないので、今まで通りBloggerとLivedoor Blogに合わせます。
は!という事はココログで一ヶ月以内にちゃんとAtom APIがサポートされないと、自分の支払った250円が意味無いじゃん...俺の金返せ~...。冗談です。
投稿者 BlogWrite担当 : 2004年06月30日 14:01
トラックバック
このエントリーのトラックバックURL:
http://www.witha.jp/b/mt-tb-hate-spam.cgi/88
このリストは、次のエントリーを参照しています: ココログ Atom API の小さくて大きな問題:
» ココログと livedoor Blog の Atom API の違い from 観測気球
ココログと livedoor Blog とでは、WSSE の生成方法が違うようです。 [続きを読む]
トラックバック時刻: 2004年07月08日 15:42
コメント
たしか WSSE の Nonce の扱いが最近のバージョンで変わりましたから、ココログのほうはそのライブラリを入れ替えてない、とかの単純な問題だとおもいます。
投稿者 miyagawa : 2004年06月30日 15:48
なるほど..
WSSEの本当の仕様ちゃんと調べて書こうと思っていたら、そうか..
(恥ずかし)
でも、Webの情報では錯綜してましたけれど...
もういっちょう、これから調べて見ます。
貴重な情報ありがとうございます。
投稿者 HepCat担当 : 2004年06月30日 16:06
という事で、WSSの仕様書を眺めて見ました...
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf
WSS: UsernameToken Profile P182
/wsse:UsernameToken/wsse:Nonce/@EncodingType
などとして、SOAPヘッダー(つまりXMLのタグ内)でのNonceのエンコード方法について指定する方法及び、規定値について言及がありますけれど...
Nonceの値をHTTPのヘッダーにいれて送るときの扱いには言及してませんね...。
これらの文書ではSOAPヘッダー(つまりXMLのタグ)にいれて送る事を主眼としているようです。
Nonceの値をHTTPのヘッダーに入れて送信する時の決まりはあるのでしょうか。UTF8エンコーディングやらBase64やら色々方法はあると思うのですが...
ご存知でしたらご教授ください。どちらにしてもココログの方法は古い、もしくは間違っていると思いますけれど...
でもこの記事「Atom Authentication」
http://www.xml.com/pub/a/2003/12/17/dive.html
によると、ココログの方法でOKなんですよね...いったいどちらが正しいのかわかりません...実はこの件かなりハマッ所でもあるのです。
投稿者 HepCat担当 : 2004年06月30日 17:01
ポインタだけですが、
http://search.cpan.org/src/BTROTT/XML-Atom-0.08/Changes
いわく、
0.06 2004.04.14
- BACKWARDS INCOMPATIBILITY:
Fixed Nonce behavior in API. Nonce should be sent in base64-encoded
form in SOAP and REST requests, but decoded (raw) nonce should be used
when generating PasswordDigest.
投稿者 miyagawa : 2004年06月30日 18:54
なるほど、でだれが決めたんだ?
って事になるんですけれど;-)(冗談です)
お忙しい所、ありがとうございます。
教えていただいた情報は厳密には仕様の通りではないですね..多分。なぜなら、WSSの仕様で、SOAPの例があって、Nonceのエンコード方法を指定できるからです。
/wsse:UsernameToken/wsse:Nonce/@EncodingType
XML::Atomモジュールの現在の仕様では、SOAPリクエスト及びRESTリクエスト共にエンコード方法は固定と読めます("Nonce should be sent ...")。
今後改良されて行くのだと思いますけれど...
結局、RESTリクエストではデファクトスタンダードとして新しいXML::Atomの方法で行く事になりそうですね。ありがとうございました。
投稿者 HepCat担当 : 2004年06月30日 20:26

