Livedoor Blogで Windows Live Writer が 使えない理由

Windows Live Writer Beta 14.0.5025.904 がリリースされました。

しかし、Livedoorで利用できないので少し調べてみました。
どうやら、 atom 0.3 を使ってるらしいのですが、他の場所と WSSE認証の仕組みが違うようです。

Livedoorでは PasswordDigest文字列を作成するために

PasswordDigest = BASE64(SHA-1(NonceString + CreatedString + Password))

のような処理をしています。
ところが、他のBlogや Windows Live Writerは

PasswordDigest = BASE64(SHA-1(BASE64(NonceString) + CreatedString + Password))

という処理をしているようです。
ただ、大概のBlogは両方式対応できるようになっているので、クライアントソフトで Livedoor方式をとっても問題ないのですが、 Windows Live Writerはこの問題が顕在化してくるわけです。


旧方式のWSSE認証


新方式のWSSE認証

こればっかりは、Livedoorさんが対応してくれないとどうしよもないなぁ
ちなみに、はてなさんは Livedoor方式だったのですが8月末に1週間程度で対応してくれたそうです

Download:実験アプリ

Dim res, b64, wsse, tim, non, apiurl, username, password As String
Dim webreq As System.Net.HttpWebRequest
Dim webres As System.Net.HttpWebResponse
Dim shasp As New System.Security.Cryptography.SHA1CryptoServiceProvider()
Dim dtime As DateTime
Dim sis As System.IO.Stream

non = "0123456789ABCDEFGHIJ" ' 適当な20文字
apiurl = TextBox5.Text
username = TextBox1.Text
password = TextBox2.Text
webreq = CType(System.Net.HttpWebRequest.Create(apiurl), System.Net.HttpWebRequest)
webreq.Method = "GET"
webreq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
dtime = DateTime.Now
tim = dtime.ToString("yyyy-MM-ddTHH:mm:ssZ")

If CheckBox1.Checked Then '旧認証
    b64 = System.Convert.ToBase64String(shasp.ComputeHash
System.Text.Encoding.UTF8.GetBytes(non & tim & password)))
Else '新認証
    b64 = System.Convert.ToBase64String(shasp.ComputeHash
(System.Text.Encoding.UTF8.GetBytes(System.Convert.ToBase64String
(System.Text.Encoding.ASCII.GetBytes(non)) & tim & password)))
End If
wsse = "UsernameToken Username=""" & username & """, PasswordDigest="""
& b64 & """, Created=""" & tim & """, Nonce=""" & System.Convert.ToBase64String
(System.Text.Encoding.ASCII.GetBytes(non)) & """"
webreq.Headers.Add("X-WSSE", wsse)
webreq.Proxy = System.Net.WebProxy.GetDefaultProxy()
webreq.Timeout = 5000000

TextBox3.Text = webreq.Headers.ToString()
Try
   webres = Nothing
   sis = webreq.GetResponse().GetResponseStream()
   Dim sres As New System.IO.StreamReader(sis, System.Text.Encoding.GetEncoding
 ("UTF-8"))
   res = sres.ReadToEnd()
   TextBox4.Text = res
Catch exc As System.Net.WebException
   If exc.Status = System.Net.WebExceptionStatus.ProtocolError Then
      webres = CType(exc.Response, System.Net.HttpWebResponse)
      TextBox4.Text = webres.StatusCode & ":" & webres.StatusDescription
   Else
      TextBox4.Text = exc.Message
   End If
Finally
End Try

TrackBack:
livedoor Blog 開発日誌 : ブログペットなど外部から投稿するサービスをご利用のお客様へ
Windows Live Writer の WSSE 認証 - 大西日記
雑記帳?一応Weblog : Windows Live Writerが使えない
網の上の彷徨い人:Windows Live Writerを設定してみたぞ…
他力本願な日々。:実は下半期突入
Windows Live Writer Beta 日本語版登場、実際に使ってみました - GIGAZINE
「Windows Live Writer」はlivedoor未対応|歯科医院/医院/病院専門ホームページ作成|MMP
木々ノ日記@livedoorblog:WindowsLiveWriterを使ってみようと思ったけどlivedoor blogでは使えないのかな。
今日の気分はバリいくつ? » Windows Liveの新バージョンを試す
AbderaつかってみたけどWSSEでやられる。 - 高温処理済みコースケ

Windows Live WriterではてなダイアリーAtomPubにチャレンジしてみた。 - SharpLab.
Ruby で livedoor blog の Atom API にアクセス - WebOS Goodies
レッドとザウルスの甘い生活:PHPでLiveDoorBlogの投稿その後、そしてRubyへ
Visula Basic 2008からAtom API でLivedoorに投稿してみるみる: VB2008 初心者が作る入門プログラム
リッチャンハ カワイイデスヨ: さっそくWindows Live Writer使い忘れたw
Windows Live Writer Beta(Build 14.0.5025.904)をWindows 2000にインストールできたので記念パピコ - KUMA TYPE

livedoor blogの投稿にWindows Live Writer - livedoor ナレッジ
フリーソフトのWindows Live WriterをLived - livedoor ナレッジ
Windows Live Writerを使ってlivedoorブロ - livedoor ナレッジ

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です