2011年6月1日水曜日

Common Lisp で WSSE認証


このエントリーをはてなブックマークに追加


Win7 64 + Clozure CL

Hatenaはうまくいくけど、Livedoorは上手くいかなかった・・・何でだろう?

間違ってたので修正。Livedoorも上手くいくようになった。


(pushnew (cons "application" "atom+xml") *text-content-types* :test #'equal)
(defun make-x-wsse-header (user pass)
  (let* ((created (multiple-value-bind (sec min hr day mon year dow daylight-p zone)
       (decode-universal-time (get-universal-time))
     (declare (ignore daylight-p zone))
     (format nil "~4,'0d-~2,'0d-~2,'0dT~2,'0d:~2,'0d:~2,'0dZ" year mon day hr min sec)))
   (nonce   (cl-base64:usb8-array-to-base64-string
       (ironclad:digest-sequence :sha1 (ironclad:ascii-string-to-byte-array (kmrcl:random-string :length 40)))))
   (digest  (cl-base64:usb8-array-to-base64-string
       (ironclad:digest-sequence :sha1 (ironclad:ascii-string-to-byte-array 
             (concatenate 'string nonce created pass))))))
 (concatenate 'string
     "UsernameToken "
     "Username=\""   user "\", "
     "PasswordDigest=\"" digest  "\", "
     "Nonce=\""    nonce "\", "
     "Created=\""   created "\"")))
 
;; http://f.hatena.ne.jp/atom
;; http://livedoor.blogcms.jp/atom/service
(defun get-atompub (url user pass)
   (drakma:http-request url
      :additional-headers (list (cons "X-WSSE"  (make-x-wsse-header user pass)))))

2 件のコメント:

irix_jp さんのコメント...

やっぱり上手く動いてないっぽい。どこが悪いんだろう??

irix_jp さんのコメント...

修正してちゃんと動きました

コメントを投稿