機能説明(3/5)

ログイン認証とACLによる権限管理

OpenIDによるログイン

  • Tagging ServiceはOpenIDに対応しており、Googleアカウント以外にも、Yahooやmixiといった様々なOpenIDでログインすることができます。
  • OpenIDを使ってログインするには、以下のように、loginパラメータにログイン後のリダイレクト先、providerパラメータにOpenID Providerを指定してGETを実行します。 未ログインの場合、各Providerのログイン画面に遷移します。ログイン後またはログイン済の場合は、loginパラメータで指定したリダイレクト先の画面に遷移します。
  • providerパラメータが指定されていない場合は、デフォルトでGoogle Accountのプロバイダ(google.com/accounts/o8/id)となります。
    ログイン
    https://reflex-tagging.appspot.com/d/?login={リダイレクト先}&provider={OpenID Provider}
    

ログアウト

  • logoutパラメータを付加するとログアウト処理を実行します。値には、ログアウト後のリダイレクト先を指定します。
    ログアウト
    https://reflex-tagging.appspot.com/d/?logout={リダイレクト先}
    

ACLによる権限管理について

  • 各entryにACLを設定することで権限管理を行なえます。ACLはContributerタグ(※)でユーザ(OpenID)ごとに設定します。 (※ Tagging Serviceでは、ATOMを独自に拡張せず、最も使われないと思われるContributorタグをACLとして使っています。こうしている理由は、JSON表現において新たな名前空間を扱いたくなかったからです。)
    ACL設定
    
    <contributor>
     <name>{nickname}</name>
     <uri>urn:virtual-tech.net:acl:{*|+|OpenID|WSSE username|Google Account},{C|R|U|D|A}</uri>
     <email>{emailアドレス}</email>
    </contributor>
    
  • ユーザは、OpenID、WSSE username、Google Account、もしくは、*、+を指定できます。*はすべてのユーザ(anonymous)、+はログインしているすべてのユーザ(any)を意味します。 OpenIDはhttp://~の形式で、Google Account(GmailおよびGoogle Apps)はメールアドレスの形式で指定します。WSSE usernameは後述します。
  • 権限には、CRUDAを指定できます。CRUDはそれぞれPOST、GET、UPDATE、DELETEを意味します。AはCRUDに加えてACL(Contributor)を読み書きできる権限を意味します。
  • nicknameとemailアドレスは省略可です。
  • 権限は階層に付ける
    • ACLが付与された各entryは、権限付与された階層以下について権限を持ちます。つまり、/d/foo/barにCRUDが付いていたとしても、/d/foo がRだけであれば、barの更新削除はできません。 逆に、/d/foo がRだけでも、/d/foo/barにCRUDが付いていれば、/d/foo/bar/bazの作成が可能であり、bazの取得や更新削除が可能です。 自分ではなく、子entryの操作に対してのアクセス権限となる点に注意してください。
    • ただし、配下の階層に別の権限が付与された場合、上位階層の権限は及ばなくなります。つまり、/d/foo/barに何も付いていなければ、/d/foo のACLがbarにも適用されます。fooにもなければ、ルートである/d/のACLが適用されます。 ルートのACLはデフォルトではシステム管理者(アプリケーションをデプロイしたアカウント)のCRUDAが付与されています。 ACLに何も指定がなければ、親entryのACLが適用される点に注意してください。
  • A権限がなければContributorにアクセスできない
    • ContributorはACLとして使用しており、これを読み書きできるのは、A権限を持っているユーザに限ります。A権限を持たないユーザへは、Contributorは開示されませんし、更新もできません。
  • Tagging Serviceでは、管理画面を使って階層ごとにACLを設定できます。

管理画面

_admin.html

WSSE認証機能

WSSE認証による外部Webサービスとの連携

  • 認証情報の登録
    • WSSE認証機能を使うための準備として、まず、/d/_user/ユーザ名 配下のEntryに以下の情報を定義します。userid,passwordは任意の文字列です。nickname、emailアドレスは省略可です。
      http://reflex-tagging.appspot.com/d/_user/{ユーザ名} 
      
       <contributor>
        <name>{nickname}</name>
        <uri>urn:virtual-tech.net:wsse:{userid},{password}</uri>
        <email>{emailアドレス}</email>
       </contributor>
      
  • WSSE認証リクエストの実行方法
    • WSSE認証リクエストは、以下のように、リクエストヘッダに設定する方法と、URLパラメータに設定する方法の2つがあります。
      1. リクエストヘッダに設定
         * key : X-WSSE
         * value : UsernameToken Username="{userid}",PasswordDigest="{passwordDigest}",Nonce="{nonce}",Created="{created}"
      
      2. URLパラメータに設定
         * ?user={userid}&digest={passwordDigest}&nonce={nonce}&created={created}
      
  • useridには、認証情報に登録したuseridを指定し、nonceにはランダム文字列、createdには作成日時を指定します。 passwordDigestには、passwordとnonceとcreatedをSHA-1でハッシュ化した文字列を指定します。
  • createdの日付形式は以下のとおりです。
    "yyyy-MM-dd'T'HH:mm:ss+99:99"
     例)日本時間 2010年10月5日10時52分0秒の場合、「2010-10-05T10:52:00+09:00」
    
  • WSSEの認証時に作成日時のチェックを行ないます。createdがシステム時刻の5分前後の範囲を超えていたら認証エラーとなります。

Tagging Serviceにおける認証・認可の判定方法

  1. リクエストヘッダにUsernameTokenが設定されている場合は、WSSE認証付きリクエストとみなされます。
    • URLパラメータにuser、digest、nonce、createdが設定されている場合も同様にWSSE認証付きリクエストとみなされます。
  2. 認証に成功後、Usernameに設定されている値でACLをチェックし、認可を行います。
  3. 上記に当てはまらない場合、GoogleのUserServiceからログイン状態かどうかを判定します。
  4. UserServiceから取得したOpenIDもしくは、Google Accountの値で認可を行います。
  5. ログイン状態でなければ、認証せず、権限が"*"の階層のみ処理可能となります。

前へ << >> 次へ