2013-01-04 31 views
9

私のアプリケーションに認証機能を追加しようとしています。 認証サーバーがoauth 2.0を実装していますリフレッシュトークンを保存する方法

refresh_tokenの保存方法がわかりません。私はそれをファイルに保存したいので、次にアプリケーションが起動し、利用可能なrefresh_tokenがあると、新しいaccess_tokenを要求することができます。ユーザーは再度ログインする必要はありません。

しかし、誰かがrefresh_tokenを持っているファイルを別のコンピュータにコピーすると、自分のアカウントにハックする可能性があるので、これは私にとって安全です。

答えて

7

あなたが説明した攻撃で正しいですか?リフレッシュトークンは、意図したとおりに使用するために安全に保管する必要があります。私が理解しているように、あなたはスタンドアロンアプリケーションを構築しています。したがって、ファイルシステムのセキュリティに依存して、権限のないユーザーによってリフレッシュトークンがコピーされないようにすることができます。リフレッシュトークンにも暗号化を使用することができますが、そのキーはローカルマシンのユーザーのセッションにバインドする必要があります(そうしないと、アプリケーションは「サインイン」処理中にユーザーに提供する必要があります)リフレッシュトークンを復号化する)。 - あなたは、リフレッシュトークンを保存するべきではありません http://www.ietf.org/mail-archive/web/oauth/current/msg02292.html

+1

次のコード行を含むセクションについては、https://developers.google.com/api-client-library/python/guide/aaa_oauthをご覧ください。「from oauth2client.file import Storage'」そのコードを使用してストレージを作成すると、単純にすべての情報を含むプレーンなJSONファイルが作成されました。このクラス 'oauth2client.file.Storage'の利点の1つは、おそらくスレッドセーフであることです。しかし、ここでは暗号化は使用されていないので、私は壊れています。可能であれば、ライブラリーを使用して「物事を嫌う」ことを避けることをおすすめします。しかし、そのStorageクラスはあまり効果がありません。思考? – Leonid

0

あなたは、あなたの懸念について正しい:

を説明したものと同様の問題を説明し、いくつかのガイダンスを提供OAuthのWGからのスレッドを読んで考えてみましょう。そうすることで、クライアントのデータが危険にさらされることになります(その理由を知っていて、質問に書いています)。 oAuthはこのように動作するはずです。 リフレッシュトークンはメモリ内に保持する必要があります。

+3

しかし、リフレッシュトークンはメモリがなくなったときに失われ、アプリケーションを再実行する前にユーザーにアクセスを促す必要があります。 –

+0

@JasonHall True;ユーザーに資格証明を求めるのを避けるために、アプリケーション設計者はユーザーのセキュリティを脅かすことに同意する必要があります(トークンが何とか盗まれた場合)。 – OhadR

+1

資格情報を暗号化したり、サーバーに保存したり、アプリケーションの起動時に(安全に)フェッチすることができます。しかしそれが実現可能ではない場合は、アプリが起動するたびに許可を求めることができます。 –

1

アクセスを取得するためにリフレッシュトークンが使用されます(このプロセスにはHTTP Basic Authが必要です)。だから、ユーザーがあなたの(ID、秘密)の組み合わせを持っていない限り、彼はそれについて多くを行うことはできません。しかし、リフレッシュトークンの記憶は非常に真剣に考慮されなければならない。あなたがトークンにもリフレッシュトークンをリセットするアクセス権を得るために、リフレッシュトークンを使用するたびにDB

    1. ストアあなたのトークンを:

      は、ここに私の2セントです。 (Oauth2.0がこの機能を持っている、あなたはあまりにもリフレッシュトークン変わらせることができますが、それはそれはDBを変更し、更新し続けるために、セキュリティの観点の面で賢明です)

    希望は、これは、いくつかの洞察を提供します!

  • 関連する問題