5

DotNetOpenAuthnew を使用して承認を更新するたびOauth2.0 RefreshTokenに、応答に含まれます。それRefreshToken自体は長寿命のトークンであるため、RefreshTokenリクエストごとに新しいトークンを取得する理由は何ですか?

そして、この新しい RefreshToken を処理する最善の方法は何ですか?RefreshToken認証を更新するたびに新しいものを保存する必要がありますか? 古いものを保持しRefreshTokenて新しいものを無視する必要がありますか?

いくつかのコンテキストを提供するために、このコード例も参照してください。

var serviceDescription = new AuthorizationServerDescription
{
    ProtocolVersion = ProtocolVersion.V20,
    TokenEndpoint = new Uri(Constants.TokenEndPoint)
};

var client = new WebServerClient(serviceDescription, 
    Constants.ClientId, Constants.ClientSecret);

var authorization = new AuthorizationState() 
{ 
    //Insert our stored RefreshToken
    RefreshToken = TokenStore.Instance.RefreshToken 
};

if (client.RefreshAuthorization(authorization))
{
    //Store or ignore the new RefreshToken?
    var NewRefreshToken = authorization.RefreshToken;
}
4

1 に答える 1

4

応答で返される更新トークンは、応答に含まれる場合と含まれない場合があります。存在する場合、仕様では、今後のすべてのトークンの更新に新しい更新トークンを使用する必要があると記載されています。古いものを再度使用すると、認可サーバーが認可を完全に取り消す可能性があります。

この理由は、ワーキング グループの議論を理解した上で、クライアントのリフレッシュ トークンを定期的に変更することで、リフレッシュ トークンが誤ってサード パーティに漏洩したかどうかを認可サーバーが検出できるためです。承認されたクライアントとサード パーティの両方が同じ更新トークンを使用するため、一方が新しい更新トークンを受け取った場合、もう一方は古いトークンを引き続き使用します。古いトークンが入ってくると、2 つのクライアントが同じリフレッシュ トークンを使用しているという事実が、認証サーバーにセキュリティ違反を通知し、それをシャットダウンする可能性があります。

于 2013-03-09T04:49:21.160 に答える