WSSE認証
時間がないのでとりあえず。
RubyによるWSSE認証の実装あたりを参考に、クライアントをつくる。
で、認証はこんなかんじで。(ユーザ名lam パスワードlam)
class Atom::DiaryController < ApplicationController before_filter :wsse_authorize private require 'base64' def wsse_authorize @@wsse_scanner ||= /^UsernameToken Username="([^"]+)",\sPasswordDigest="([^"]+)",\sNonce="([^"]+)",\sCreated="([^"]+)"$/ return authorization_require('WSSE認証が必要です') unless request.env['HTTP_X_WSSE'] return authorization_require('ログインできません') unless @@wsse_scanner =~ request.env['HTTP_X_WSSE'] username = $1 digest = Base64.decode64($2) nonce = Base64.decode64($3) created = $4 return authorization_require('ログインできません') unless username == 'lam' && Digest::SHA1.digest(nonce + created + 'lam') == digest true end def authorization_require(message) render :status => 401, :layout => false, :text => message false end end