2016-04-07 2 views
1

OwinとOAuthを使用して、トークンの最後の文字を変更しても、認証/認証が成功することがわかりました。変更されたOAuthトークンは依然として認証/承認が可能です

私はC#WebAPIアプリケーションを使用していますが、これが一般的なOAuthに当てはまるかどうかはわかりません。これは設計によるものかもしれませんが、私には奇妙な動作のように思えるので、なぜこれが起こるのか不思議です。 、Visual Studioで

  1. 新しいプロジェクトを作成し、テンプレートとして「ASP.NET Webアプリケーション」を選択します。

    は、この動作を複製します。
  2. 「Web API」テンプレートを選択し、認証タイプとして「個人ユーザーアカウント」を選択します。
  3. プロジェクトをビルドします。無ヘッダと次体とhttp://localhost:23220/tokenにRESTクライアント、POSTを使用し

    { "UserName": "test", "Password": "password", "ConfirmPassword": "password" }

  4. *:Content-Type: application/jsonヘッダと次体とhttp://localhost:23220/api/account/registerにRESTクライアント、POSTを使用し

  5. *

    RESTクライアントを使用して

    grant_type=password&username=test&password=password

  6. 、とhttp://localhost:23220/api/values *をGETヘッダー。ここで、xxxは、以前の要求で生成したアクセストークンです。この要求は承認されるべきであり、あなたは200応答を得なければなりません。

  7. もう一度同じGET要求を行いますが、今度はAuthorizationヘッダー値の最後の文字を1つ増やして変更します。たとえば、最後の文字がaの場合はbに変更してください。 1の場合は、2などに変更してください。依頼は成功します。

* ポートを適宜変更してください。

答えて

1

AccessTokenFormat - アクセストークンに含まれる情報を保護するために使用されるデータフォーマット。アプリケーションによって提供されていない場合、デフォルトのデータ プロテクションプロバイダーはホストサーバーによって異なります。 IIS上のSystemWebホストは、ASP.NETマシンキーデータ保護を使用し、HttpListenerおよび 他の自己ホストサーバーは、DPAPIデータ保護を使用します。

このようにプロジェクトを設定すると、IIS Expressで実行されるため、トークンはMachineKey APIで保護されます。私は暗号化された価値の正確なデータフォーマットの記述を見つけることができませんでしたが、暗号の以前の研究から、おそらく最後にはパディングがあると思います。このパディングはトークンの署名によって保護されませんが、これは取り除かれて破棄されるので問題はありません。変更の範囲は限られているので、最後のバイトの最後の数ビットだけを変更できると期待しています。

+0

これは考えられる説明のようですね!追加のお礼をありがとうございます。 – Moo