カスタム認証とインメモリホスティングを使用してASP.NETWebAPI統合テストを実行する方法

デイス

ここでも同様の質問に回答していますが、私の場合は回答がうまくいかないようです。

JWT認証を使用しているWebApiで認証/承認プロセスをテストしたいと思います。

私の認証はMessageHandler、私が自分に追加したカスタムを通じて処理されますHttpConfiguration[Authorize]アクセスを制限したいコントローラー/メソッドの単純な属性によって処理される承認

認証中にトークンから抽出したプリンシパルを次のように設定しています(カスタムでMessageHandler):

Thread.CurrentPrincipal = principal;

if (HttpContext.Current != null)
{
     HttpContext.Current.User = principal;
}

ローカルIISで手動でテストすると、このプロセス全体が正常に機能しています。

しかし、ここようなインメモリホスティングでテストする場合ApiController.User認証に使用されるプリンシパルを格納するプロパティは、認証中に設定されたものではなく、呼び出しテスト(現在のセッションのWindowsプリンシパル)[Authorize]取得しThread.CurrentPrincipalます。Thread.CurrentPrincipalnullに設定すると、悪いリクエストしか受け取れません。

TL; DRメモリ内ホスティングで認証/承認パイプラインをテストするにはどうすればよいですか?ApiController.User値をThread.CurrentPrincipalテスト値に設定し、認証中に正常に設定し値を取得できないためです。

ではなくを[Authorize]取得するカスタム属性を実装することで回避できると思いますが、それは避けたいと思います。Thread.CurrentPrincipalApiController.User

前もって感謝します。

明確にするための編集:このすべてのパイプライン(認証、承認)は、実行中のIISで正常にホストされています(メモリ内ホスティング中はHttpContextがnullです)。私はメモリホスティングでそれをテストしようとしています(可能であれば)。インメモリホスティングでテストしている間、カスタムにブレークポイントを設定するMessageHandlerと、Thread.CurrentPrincipalが適切に設定さ[Authorize]れていることがわかりApiController.Userます。ApiControllersではプロパティがすでに私のThread.CurrentPrincipal値の値に設定されているため、それは気にしないようです。私のテスト(私のローカルWindowsセッションプリンシパル)

ラファエル・ダウリング・グッドマン

「ASP.NETを使用した進化可能なWebAPIの設計」の第15章の「現在のプリンシパルの取得と割り当て」セクションにリストされているガイダンスに従って成功しました

ASP.NET Web APIバージョン2.0では、新しいHttpRequestContextクラスを使用してこの問題を解決できます。まず、現在のIDを取得して、静的プロパティではなく、現在のリクエストオブジェクトに割り当てる必要があります。次に、異なるホストが異なるHttpRequestContext実装を使用できます

つまり、メッセージハンドラーで、現在のスレッドとHttpContextのプリンシパルを設定する代わりに、次のようにします。

request.GetRequestContext().Principal = principal;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ライブラリテストとドキュメントテストを実行するが、統合テストは実行しない方法

分類Dev

sbt:統合テストを実行する方法

分類Dev

KubernetesでSpringBoot統合テストを実行する方法

分類Dev

@SpringBootTestを使用してSpringで統合テストを実行する方法

分類Dev

@SpringBootTestを使用してSpringで統合テストを実行する方法

分類Dev

@SpringBootTestを使用してSpringで統合テストを実行する方法

分類Dev

Visual Studio TeamServicesを使用してインメモリSQLデータベースを介してユニット/統合テストを実行する

分類Dev

Cucumber統合テストをSpring BootとJUnitで実行する方法は?

分類Dev

ODataとAsp.NETWebAPIを使用したカスタムルーティング

分類Dev

GoDaddyWindowsホスティングでWordPressサイトと一緒にASP.NETWebAPIをホストする

分類Dev

サービスアカウントと統合セキュリティによってwpf(c#)アプリケーションを実行する方法

分類Dev

Ubuntu 18.04のGnomeを使用して、ワインシステムトレイを実際のシステムトレイと統合する方法

分類Dev

統合テストを実行するには?

分類Dev

Pycharm:条件付きで統合テストを実行する

分類Dev

非同期でmvn統合テストを実行する

分類Dev

httpsを使用しているときに、リモートパーティがローカルホストのトランスポートストリームを閉じたため、認証に失敗しました

分類Dev

Jenkinsワークフロー:統合テストを並行して実行する方法

分類Dev

すべてのプレゼンテーションレイヤー(Web、モバイルアプリ、デスクトップアプリ)でテストを実行する1つの統合テストフレームワークに到達する方法

分類Dev

統合テストを行うときにVisualStudioでTestInitializeを1回実行する方法は?

分類Dev

モーメンタリジョイスティックスイッチをトグルスイッチとして使用する方法(Arduino)

分類Dev

ミスリルにカスタムコンテキストメニューを統合する方法

分類Dev

すべての統合テストファイルでBeforeEachを実行する方法

分類Dev

格子縞の統合をテストするために実際の銀行口座を使用しない方法

分類Dev

Geb統合テストを実行する場合、WebApplicationContextは常にnullです。

分類Dev

Mavenリリースプラグインでユニットテストと統合テストを完全にスキップして準備および実行する方法

分類Dev

Mavenプロジェクトの統合テストケースを実行する方法

分類Dev

統合テストの前にactivemqを実行するMavenコマンド

分類Dev

スーパーテストとエージェントを使用してモカテストで認証されたリクエストを行う方法は?

分類Dev

Robotフレームワークと統合されたコマンドラインからJmeterテストケースを実行する方法

Related 関連記事

  1. 1

    ライブラリテストとドキュメントテストを実行するが、統合テストは実行しない方法

  2. 2

    sbt:統合テストを実行する方法

  3. 3

    KubernetesでSpringBoot統合テストを実行する方法

  4. 4

    @SpringBootTestを使用してSpringで統合テストを実行する方法

  5. 5

    @SpringBootTestを使用してSpringで統合テストを実行する方法

  6. 6

    @SpringBootTestを使用してSpringで統合テストを実行する方法

  7. 7

    Visual Studio TeamServicesを使用してインメモリSQLデータベースを介してユニット/統合テストを実行する

  8. 8

    Cucumber統合テストをSpring BootとJUnitで実行する方法は?

  9. 9

    ODataとAsp.NETWebAPIを使用したカスタムルーティング

  10. 10

    GoDaddyWindowsホスティングでWordPressサイトと一緒にASP.NETWebAPIをホストする

  11. 11

    サービスアカウントと統合セキュリティによってwpf(c#)アプリケーションを実行する方法

  12. 12

    Ubuntu 18.04のGnomeを使用して、ワインシステムトレイを実際のシステムトレイと統合する方法

  13. 13

    統合テストを実行するには?

  14. 14

    Pycharm:条件付きで統合テストを実行する

  15. 15

    非同期でmvn統合テストを実行する

  16. 16

    httpsを使用しているときに、リモートパーティがローカルホストのトランスポートストリームを閉じたため、認証に失敗しました

  17. 17

    Jenkinsワークフロー:統合テストを並行して実行する方法

  18. 18

    すべてのプレゼンテーションレイヤー(Web、モバイルアプリ、デスクトップアプリ)でテストを実行する1つの統合テストフレームワークに到達する方法

  19. 19

    統合テストを行うときにVisualStudioでTestInitializeを1回実行する方法は?

  20. 20

    モーメンタリジョイスティックスイッチをトグルスイッチとして使用する方法(Arduino)

  21. 21

    ミスリルにカスタムコンテキストメニューを統合する方法

  22. 22

    すべての統合テストファイルでBeforeEachを実行する方法

  23. 23

    格子縞の統合をテストするために実際の銀行口座を使用しない方法

  24. 24

    Geb統合テストを実行する場合、WebApplicationContextは常にnullです。

  25. 25

    Mavenリリースプラグインでユニットテストと統合テストを完全にスキップして準備および実行する方法

  26. 26

    Mavenプロジェクトの統合テストケースを実行する方法

  27. 27

    統合テストの前にactivemqを実行するMavenコマンド

  28. 28

    スーパーテストとエージェントを使用してモカテストで認証されたリクエストを行う方法は?

  29. 29

    Robotフレームワークと統合されたコマンドラインからJmeterテストケースを実行する方法

ホットタグ

アーカイブ