2016-12-09 9 views
2

私はGoogle App Engine、webapp2、およびPythonで遊んでいます。私はちょうど楽しみのための小さなおもちゃのアプリを構築しています。 Google App Engineのデータストアにndbを使用している小さなサイドノートです。'secret_key'はwebapp2フレームワークの何を表していますか?

小さなwebappを構築すると、セッションが開始されます。

セッションに関するwebapp2のドキュメントと、セッションの設定方法に関するこのWebサイトの最も一般的なスレッドを読んでいました。このプロセスについて私が得意でないことは、この小さなコードが設定に含まれていることです。

config = {} 
config['webapp2_extras.sessions'] = { 
'secret_key': 'my-super-secret-key', 
} 

私はウェブ開発にはかなり新しいです。しかし、この同じフレームワークで他の小さなアプリケーションを構築するには、以下のようにして、安全性の高いハッシュCookieを作成しました。

user_key = user_key.id() 
user_cookie = self.request.cookies.get('user_cookie', None) 

self.response.headers.add_header('Set-Cookie','user=%s|%s' % (user_cookie, hash_string(user_cookie))) 
self.write('Thank you for sigining up! And, welcome %s' % user.name) 

は、設定のため、上記のコードの最初のビットが達成しようとしているものということですか? つまり、この秘密鍵は何ですか?

また、「セッション」CookieをユーザーIDに設定したいとします。 以下のコードはこれを行う正しい方法でしょうか?

self.session[name] = user_key.id() 
session_info = self.session.get(name) 

ありがとうございます。

答えて

0

secret_keyはデジタルあなたがself.request.cookies.get('user_cookie', None)を呼び出しているとき、あなたが読んでいるCookieデータに署名するサーバーで使用されています。

クッキーは、デジタル署名とともにクライアントからサーバーに継続的に渡されます。クライアントが各要求でサーバーにクッキー値を提示すると、サーバーによって与えられたデジタル署名でクッキー値が表示されます。サーバが現在のクッキー値に署名するたびに、クライアントによって渡されたシグネチャが現在のサーバ値と一致しない場合、サーバはクッキーのパラメータが改ざんされていることを認識します。これは、他のユーザーを偽装しようとする悪意のあるクライアントに対して、または許可されていない操作を実行することを防ぎます。

このスキームは、鍵がサーバにしか知られていない場合にのみ機能します。そうしないと、クライアントはサーバが受け入れるクッキーに署名することもできます。従ってsecret_key

webapp2のデフォルトの署名アルゴリズムはHMAC-SHA1です。私はセッションをインスタンス化することによって設定されたCookieを見たとき

はまた、すぐに、それは非常に長い文字列

これは、サーバーは、あなたが興味がある場合はクッキーを認証するために使用the codeです。クッキーはbase64でエンコードされたjsonドキュメントであることがわかります。

ここで、secret_keyの値は、正しいと思う任意の文字列にすることができます。

このsecurity threadの文字列は、HMAC-SHA1に対して20個以上のランダムに選択されたバイトの任意の文字列を指定します。

また、私はこれはおそらくあなたが探しているexampleだと思うユーザーID

へのセッション "クッキーを設定したいと言うことができます。

+0

完璧な、私が探していた概念的な説明。さて、私は 'secret_key'の値はあなたが正しいと思っている文字列であればいいと思います。また、すぐにセッションをインスタンス化して設定したクッキーを見ると、非常に長い文字列です。これらの文字のすべてがどこから来たのか?おそらく '秘密のセッション 'と関係するものでしょう。再度、感謝します。 – Bryan

関連する問題