2015-10-02 8 views
6

https://stackoverflow.com/a/7209263/1225328から:ユーザーがリフレッシュトークンで安全にログインしているようにするにはどうすればよいですか?

リフレッシュトークンのアイデアは、それが短命であるため、攻撃者はそれを乱用する で制限された窓を有する 、もしアクセストークンが危険にさらされていることです。

攻撃者がリフレッシュトークンにアクセスすると、新しい認証トークンを取得できますか?間違っていますか?これは、あなたが同じ答えに見つけることができます、この時点に関する

...ちょうど長寿命トークンのセキュリティ上の欠陥を延期するようだ:

のリフレッシュトークン、妥協した場合、攻撃者ので役に立たない アクセストークンを取得するには、リフレッシュトークン にクライアントIDとシークレットを追加する必要があります。

次に、リフレッシュトークンを使用して単純に辞任するのはどういう違いがありますか?また、ユーザーが再度入力する必要がないようにするには、クライアントIDと秘密をどのように格納しますか? @FStephenQとして


、指摘リフレッシュトークンは一度だけ使用することができます。その後、攻撃者は、新たな認証トークンを取得することができますが、一度だけ、と短命1。しかし、あなたがすでにそれを使用したら、新しいリフレッシュトークンはどのようにして得られますか?あなたがいずれかを使用する場合は、新しいものを取得した場合、攻撃者は、その後...あまりにも自分のトークンをリフレッシュすることができるようになります


実際の質問です:どのように私のユーザーがサインインしまし保つために?私が使っているアプリでは、いったんサインインすると、もう一度サインインする必要はありません。彼らはどのように進んでいますか?

答えて

4

リフレッシュトークンは一度リフレッシュするためにのみ使用でき、クライアントのアクセストークンが期限切れになったときに認証サーバーに送信されます。リフレッシュトークンが使用されると、認証サーバーは新しい認証トークン、およびオプションで新しいリフレッシュトークンを返します。このアイデアは、短期間のアクセストークンを使用できるようにする一方で、有効なクライアントを再認証させ、ユーザーに再度ログインさせることなく許可することです。

リフレッシュトークンが盗まれた場合、攻撃者が有効なアクセストークンを取得するためにリフレッシュトークンを1回使用することができます。クライアントがトークンをリフレッシュしようとすると、リフレッシュトークンは古くなり、拒否されます。ユーザーは再度ログインするように要求され、認証サーバーは新しいアクセストークンと更新トークンを与え、盗まれたトークンは無効になります。

+1

ありがとうございます。しかし、まだ問題があります:リフレッシュトークンは一度しか使用できないため、すでにリフレッシュトークンを使用したら、どのように新しいリフレッシュトークンを取得しますか?あなたが新しいトークンを使用したときに新しいトークンを取得した場合、攻撃者はそのトークンもリフレッシュすることができます。 – sp00m

+1

OAuthが適切に実装されている場合、攻撃者はアクセストークンが期限切れになるまで待つ必要があります。また、ユーザーの再認証では常に最新のトークンが優先されます。ユーザーが再認証すると、サーバーは以前のすべてのアクセストークンを無効にして(トークンの新しい「チェーン」を開始する)クライアントトークンを更新します。これらの2つの組み合わせは、盗まれたリフレッシュトークンが攻撃者にとって役に立たない可能性が非常に高く、攻撃者はユーザー資格情報を持たない(長い間)独自のトークンチェーンを持つことができないことを意味します。 –

+1

もう一度ありがとう、私は今それを得ると思います。しかし、別の質問があります。ユーザーがブラウザでサインインすると、アクセストークンとリフレッシュトークン(#1)が取得されます。その後、後で、ユーザは別のブラウザ(例えば職場の#2)でサインインし、トークン#2をリフレッシュする(例えば期限が切れているので)。彼が家に帰るとき、彼は職場でリフレッシュトークンを使用したので、彼は再認証する必要があります。これは以前のすべてのトークンを無効にしました。私は正しく理解しましたか?どのようにこの動作を回避するには? – sp00m

関連する問題