2012-10-07 18 views
5

ピラミッドのpyramid.authentication.AuthTktAuthenticationPolicy関数の「秘密」パラメータは正確には何ですか? documentationには、 "(文字列)がauth_tktのクッキー署名に使用されています"と記載されています。 tutorialは、「このポリシーで表される「認証チケット」機械によって使用される暗号化キーを表す文字列」であると言います。ピラミッドAuthTktAuthenticationPolicy秘密パラメータ

auth_tkt cookie signingとは何ですか?この「認証チケット」とは何ですか?この秘密は、私がデータベースなどのハッシュとして保存したものであるはずですか?私は本当に混乱しています。

答えて

13

tkt認証クッキーは、ユーザー名とオプションでタイムスタンプを含むいくつかの情報の安全なハッシュですが、ユーザーパスワードは含まれません。一旦認証されると、あなたはそのようなクッキーをユーザに与え、ユーザがあなたを返すたびに再びユーザ名を抽出して、それが同じユーザであることを知る。

このクッキーを安全に保つには、サーバー側の秘密が必要です。その秘密を保持しているサーバーのみがこれらのCookieを作成できます。攻撃者がそれを握った場合、これらのユーザーのパスワードを知る必要はなく、任意のユーザーに対して認証Cookieを生成することができます。

secretこのポリシーのパラメータは、サーバー側の秘密です。それはあなたのサーバーのマスターパスワードのようなものです。サイト(WSGI)で複数のプロセスを実行する場合は、プロセス間で一貫性を持たせ、各プロセスがCookieを確認できるようにする必要があります。設定ファイル、ソースコード、またはデータベースで指定することができます。どのくらいの柔軟性が必要か、セキュリティポリシー、およびシークレットを他のシステムと共有する必要があるかどうかによって異なります。

同じ標準を使用して、ユーザーの認証が必要なドメイン内の他のシステムとシークレットを共有できます。たとえば、Apacheにはmod_auth_tktモジュールがあり、Ploneは同じ標準を使用し、このシークレットを共有することで、異種のWebアプリケーション間でユーザーにシングルサインオンを提供できます。

秘密を変更すると、既存のセッションが無効になり、ユーザーが再認証する必要があることに注意してください。

いずれにしても、既存のCookieの寿命は限られています。埋め込みタイムスタンプは、ポリシーにtimeoutパラメータを設定した場合、有効期間として受け入れられる時間を制限します。タイムアウトを設定し、再発行時間を設定するのが良いポリシーです。タイムアウト内にアプリケーションを再訪問するユーザーは、新しいタイムスタンプを持つ新しいクッキーを再発行し、セッションを新鮮に保ちます。こうすることで、セッションクッキーが自動的に期限切れになるのは、ユーザーが戻ってこない場合で、そのCookieを後で攻撃者が再利用することはできません。 reissueパラメータを使用すると、新しいトークンの発行速度を制御できます。 reissue秒以内にサーバーを再訪すると、新しいトークンが生成されません。

1

私が覚えている限り、秘密のパラメータは、クッキーを作成するための塩として使用される文字列です。あなたはあなたが望むものを置くことができます。あなたの設定ファイルにそれを保存するだけで十分です。それをデータベースに保存することは残念ですが、作成したものを無効にしたい場合は、変更する前に秘密を変更するとすべてのCookieとセッションが無効になります。