8

私は Pyramid セキュリティ モジュールに初めて足を踏み入れました。このログイン コードを使用して auth_tkt を設定しています。

@view_config(route_name='LoginForm', request_method='POST', renderer='string')
class LoginForm(SimpleObject):
    def __call__(self):

        emailAddress = self.request.params.get('emailAddress')
        password = self.request.params.get('password')

        if emailAddress != 'testemail@gmail.com' or password != 'testpassword':
            errorDictionary = { 'message' : "Either the email address or password is wrong." }
            self.request.response.status = 400
            return json.dumps( errorDictionary, default=json_util.default)

        testUserGUID = '123123123'

        headers = remember(self.request, testUserGUID)
        return HTTPOk(headers=headers)

問題なく動作しているように見えますが、不可解な詳細がいくつかあります。

まず、実際には 1 つではなく 2 つの Cookie が設定されます。2 つの Cookie は同一です (名前は「auth_tkt」)。ただし、1 つの違いがあります。 1 つではなく 2 つの Cookie が設定されていますか? ホスト値の違いの意味は何ですか?

質問 2、Web ツールは、どちらの Cookie も安全ではないと報告しています。Cookie が安全であることを確認するにはどうすればよいですか?

質問 3: 両方の Cookie の有効期限の値は「セッションの終了時」です。これはどういう意味ですか? また、有効期限の値を自分でカスタマイズするにはどうすればよいですか? ログイン Cookie の有効期限について推奨される方法は何ですか?

質問 4: "remember" の最初の引数が self.request.response ではなく self.request である理由がわかりません。request オブジェクトではなく、response オブジェクトでデータを記憶するべきではないでしょうか?

4

1 に答える 1

11
  1. 実際には、3 つの Cookie が生成されます。1 つはキーなし、もう 1 つはDomainキー付き、3 つ目はドメインのワイルドカード バージョン (先頭のドット) を使用します。ブラウザは通常、2 つをマージするか、そのうちの 1 つを無視します (どちらがブラウザによって異なるか、2 が設定されている理由です)。

    wild_domainオプションが設定されている場合、最後の Cookie が生成さAuthTktAuthenticationPolicyれます (デフォルトでは True)。AuthTktAuthenticationPolicyAPIを参照してください。認証 Cookie を異なるサブドメイン (app1.domain、app2.domain と考えてください) 間で共有する場合は、これが必要です。ブラウザは、ワイルドカード Cookie がないと、サブドメイン間で Cookie を共有しません。

  2. secureセキュア フラグ セットを取得するには、Cookie の認証ポリシーでオプションを設定する必要があります。繰り返しますが、APIを参照してください。

  3. 有効期限は設定されていません。つまり、ブラウザを閉じたときに Cookie は削除されます (ブラウザに表示されるセッションの終了)。ユーザーがブラウザを閉じたときにログアウトする場合は、これをデフォルトのままにします。

    ブラウザーを閉じてもセッションを維持したい場合にのみ、Cookie の最大有効期間を設定します。APImax_ageのオプションを参照してください。このオプションを使用すると、ブラウザーは Cookie をディスクに保存して、ブラウザーを閉じても保持し、最大期間が経過するとそれらを削除します。

    AuthTktAuthenticationPolicyポリシー オブジェクトは、認証 Cookie を有効と見なす期間を制限することで、よりきめ細かい方法でログイン セッションを管理でき、Cookie 更新ポリシーを設定できることに注意してください。このような更新ポリシーを設定すると、ユーザーはアプリケーションを使用し続けると新しい (更新された) Cookie を受け取りますが、設定された時間内にサーバーに接続しない場合、Cookie は無効と見なされ、再度ログインします。

    これを構成する方法の詳細については、 API ドキュメントtimeoutのおよびreissue_timeオプションを参照してください。

  4. ポリシー オブジェクトは、Cookie を生成できるように、リクエストからのいくつかの情報を必要とします。特に、サーバーのすべてのホスト名が必要です。

于 2012-09-02T08:52:14.697 に答える