問題タブ [owin-middleware]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-core - 資格情報を持つ FileServerMiddleware?
エンタープライズ環境では、ASP.NET Core アプリケーションでネットワーク共有から静的ファイル コンテンツを提供する必要があります。基本的に、サブパスの下で提供されます/content
。このために、正常に動作する次のコードがあります。
現在、本番環境では、Web アプリケーションがホストされているコンテキストのシステム ユーザーは、ファイル共有にアクセスできません。したがって、特定のテクニカル ドメイン ユーザーを使用してファイルにアクセスする必要があり、そのために、このシステム ユーザーの資格情報 (ユーザー名/パスワード) をファイル サーバーに提供する必要があります。
残念ながら、に認証情報を提供するオプションが見つかりませんでしたUseFileServer()
。とにかくそれは可能ですか?
cookies - 各ドメインに独自のプロバイダーがあるマルチテナント Web アプリケーションの Owin プロバイダー
1 つの Web アプリケーションが複数のドメインにサービスを提供するソリューションを作成しようとしています。ドメインごとに、外部プロバイダーのアプリ ID とシークレットを使用して、独自のプロバイダーを構成したいと考えています。Cookie ドメインとプロバイダー情報が必要です。現在のドメイン名に基づいてデータベースから読み取られるため、たとえば次のようになります。
私は2つの大きな問題に直面しています:
- Owin スタートアップの ConfigureAuth() で使用できる HttpContext がなく、スタートアップの早い段階でどのドメイン名が使用されているかを判断する方法がわかりません...
- Startup は Web アプリケーションごとに 1 回だけ実行されることを理解しています。たとえば、web1.com に初めてアクセスした後、web1.com によって既に設定されていると、configureAuth() は web2.com に対して再度実行されません。
いくつかの Owin メソッドをオーバーライドして非静的にすることができるかどうか疑問に思っています... または、これを別の方法で実装する方法を見つけることができます (しかし、私はまだ Owin を使用するのが好きです)。
どこから始めればよいですか?
asp.net-web-api2 - Web API 2 で Swagger を構成して OAuth2 認証要求を送信する方法は?
私は最近、Visual Studio 2012 で OWIN ミドルウェアを使用して OAuth2 でユーザーを認証する Web API 2 プロジェクトを開始しました。このチュートリアル (トークンベースの認証)で概説されているように、トークンベースの認証を組み込みました。認証部分はうまく機能します。API のテスト メソッドをいくつか追加し、API ドキュメント用に Swagger を接続したいと考えました。Swagger からの API 呼び出しが承認時に失敗することを除いて、その部分も機能しました。
調査の結果、 Swagger を OWIN ミドルウェアに接続する方法に関するErik Dahl の投稿を見つけました。投稿に従って Swagger を構成した後、Swagger UI の各 API メソッドの横に認証ボタンが表示されるようになりました。ただし、認証を試みる場合、Swagger 内の認証は GET 要求を使用して行われます。ただし、Web API での認証では、POST 要求である必要があります。認証要求を POST にするように Swagger を構成することは可能ですか? そうでない場合、API がトークン認証の GET 要求を受け入れることを許可する必要がありますか? これを機能させるための最良のアプローチは何ですか?
注: リクエストは引き続き認証ロジックにヒットしますが、client_id と client_secret は GET リクエストでは渡されず、POST リクエストでのみ渡されます。
これが私のSwagger構成です:
そして、ここに私のOAuth構成があります:
owin - テナントごとの Owin パイプライン
SAAS アプリケーションでさまざまな認証方法を実装するためのオプションを検討しています。SaaS アプリケーションは、すべてのテナントにサービスを提供する単一のインスタンスです。
さまざまな認証方法を許可するために、テナントごとに異なる owin パイプラインを作成して、起動時にすべてのテナント構成をループすることができます。説明については、ここの回答の下部の回答を参照してください: リクエストごとに OWIN Auth ミドルウェアを変更する (マルチテナント、テナントごとの oauth API キー)
パイプラインの構成を変更すると、パイプラインを再構築する必要があることはわかっていますが、うまく機能しているように見える素敵なレポを見つけました。https://github.com/damianh/DynamicKatanaパイプライン
テナントごとに異なるパイプラインを作成するソリューションは可能ですが、これがうまくスケーリングできないことを心配しています。それが良い解決策であるかどうか、そしてこの解決策で見られない落とし穴を誰かが知っているかどうか、またはセットアップの経験があるかどうか疑問に思っていました。
c# - ASP.NET MVC を使用して ADFS から返された SAML チケットで OWIN を使用してサインインするにはどうすればよいですか?
ユーザーがユーザー名とパスワードを入力する独自のログイン画面を持つ Web サイトがあります。ログイン ボタンを押すと、ユーザーは ADFS を介して認証され、SAML トークンが返されます。これは機能します。現時点では、ユーザーにログインするために何をする必要があるのか わかりません.不明な理由は、このWebサイトに少しひねりがあるためです. 前述したように、ユーザーは Web サイトのログイン ページから ADFS 経由でサインインします。ただし、ユーザーが許可されていないページにアクセスした場合、ユーザーをログイン ページにリダイレクトするのではなく、ユーザーを ADFS ログイン ページにリダイレクトする必要があります。私はこの方法でプロジェクト全体を開始しました。ユーザーは、ADFS のログイン ページを通じて認証されます。これは、ConfigureAuth メソッド (StartupAuth.cs 内) を次のように設定するだけで簡単に実行できました。
簡単です!ページに移動しようとする[Authorized]
と、ADFS ログイン ページに移動します。この後、別のログイン方法 (ログイン ページを使用して ADFS で認証する方法) に取り組みました。どちらの方法で認証しようとしても、同じ ADFS で認証していることに注意してください。1 つは ADFS のログイン ページを使用しており、もう 1 つはカスタム ログイン ページを使用しています。そこで、ログイン用のシンプルで小さなフォームを備えたカスタム ログイン ページを作成します。
これはうまくいきます。送信ボタンを押すと、SignIn アクションが試行されます。SignIn アクションは次のようになります。
samlToken を正常に取得して作成でき、それを検証して claimPrincipal を作成することもできます。サインインするためにこの後何をHttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties { IsPersistent = true, RedirectUri = "Home/Homepage" },
claimsPrincipal.Identities.ElementAt(0));
すればよいかわかりません。StartupAuth.cs ファイルに追加の構成が必要ではないかとこっそり疑っていますが、確信が持てません。助けてくれてありがとう!
c# - C#: Owin 応答ストリームを変更すると AccessViolationException が発生する
カスタム Owin ミドルウェアを使用して、特定の状況で応答ストリームを変更 (この場合は完全に置き換え) しようとしています。
応答を置き換えるためにミドルウェアをトリガーする呼び出しを行うときはいつでも、すべてが正常に機能します。この問題は、ミドルウェアが変更を加えない呼び出しを行った場合にのみ発生します。さらに、置き換えられていないAPI 呼び出しが手動で作成された HttpResponseMessage オブジェクトを返す場合にのみ、エラーが発生するようになりました。
たとえば、次の API を呼び出します。
正常に動作しますが、このクラス:
エラーが発生します。(どちらの場合も、http://localhost:<port>/test
が呼び出されています。)
このエラーにより、次のいずれかが発生します。
- iisexpress.exe (実際の IIS で実行されている場合は w3wp.exe) がアクセス違反でクラッシュします。
Visual Studio がキャッチする
/li>AccessViolationException
をスローしますが、外部コードで発生するため何も実行できません。Visual Studio が例外をキャッチすると、次のように表示されます。
明らかに、ミドルウェアを有効にしない場合、問題はまったくありません。また、2 番目のクラスに示すように、手動で HttpResponseMessage オブジェクトを作成して返すときにのみ、問題を発生させることができました。
これが私のミドルウェアクラスです。現在/replace
、パイプライン内の他の何かがエンドポイントに何かを行ったかどうかに関係なく、誰かがエンドポイントを要求するたびに、応答ストリーム全体を単純に置き換えるように設定されています。
私は明らかなことをしました-一晩中RAMテストを行い(すべて問題ありません)、別のシステムを試しました(そこでも発生しました)。
さらに、エラーは一定ではなく、約半分の確率で発生します。つまり、多くの場合、1 つまたは 2 つの成功した要求を取得できますが、最終的にはエラーが発生します。
最後に、ミドルウェアのメモリ ストリーム コピーの直前にプログラムにブレークポイントを配置し、コードをゆっくりとステップ実行すると、エラーは発生しません。これは、ある種の競合状態に陥っているに違いないことを示しており、MemoryStreams で遊んでいるという事実に関連している必要があります。
何か案は?
c# - IdentityServer を使用して特定のクライアントに対して特定のユーザーを認証する
IdentityServerV3
少数のクライアントのユーザー認証に使用しています。特定のクライアントが特定の「クライアント」にログインできる必要があるようIdentityServer
な構成で問題が発生しています。user
以下のシナリオを見てみましょう:
私は 2 つのクライアントを持っています -> client1
, client2
. 3 人のユーザーがいます -> user1
, user2
, user3
.
user1
&のみuser2
にアクセスできますclient1
。一方、単独でuser3
アクセスできます。client2
ID サーバーでログインしようとするとclient1
、user3
正常に認証されます。私はしたくない。
ユーザーは次のとおりです。
現在、OWIN スタートアップ クラスは次のとおりです。
IdentityServer
どのユーザーがどのクライアントに接続されているかを知る方法がわかりません。私のシナリオはサポートされていませんか、IdentityServer
それとも何か不足していますか?
アップデート
While registering the user i am redirecting him to a controller in Identity Server Host
.
startup.cs
user
登録中に aをマップする最良の方法を理解し、そのユーザーのすべてのクライアントでとが同じでclient
あっても、ユーザーがそのクライアントにのみログインでき、他のクライアントにはログインできないことを確認する必要があります。username
password
asp.net-mvc - UserManager を OWIN コンテキストに登録するにはどうすればよいですか?
Visual Studio 2013 で MVC 5 アプリケーションを作成し、認証として個人アカウントを選択すると、スキャフォールディングによって ASP Net Identity が自動的に構成されます。ApplicationDbContext
ととともにいくつかのクラスを作成しますApplicationUserManager
。また、これらのクラスを以下のように OWIN コンテキストに登録して、要求ごとに 1 つのインスタンスを使用します。
基本的にstatic Create
各クラスのメソッドを登録します。この静的メソッドは、そのクラスのインスタンスを作成する責任があります。
質問
1 > static create メソッドを使用したくない場合、以下のアプローチは正しいですか?
ApplicationUserManager
2>静的 Create メソッドを使用せずに登録するにはどうすればよいですか。(UserValidator、PasswordValidator、UserTokenProvider などを設定する必要があります)のコンストラクター
で Validators と UserTokenProvider を設定する必要がありApplicationUserManager
ますか? 以下のように
ApplicationUserManager
3>上記のアプローチでは、リクエストごとに単一のインスタンスを作成するようにOWINコンテキストに登録するにはどうすればよいですか? 'ApplicationUserManager
また、必要ApplicationUserStore
とApplicationDbContext
..それらをのコンストラクターに渡すにはどうすればよいApplicationUserManager
ですか?
asp.net - IdentityServer3 で ASP.NET セッションを読み取るには? OWIN パイプラインの順序が壊れています
問題: IdentityServer3 Controllers で ASP.NET セッションを使用しようとしていますが、うまく動作しません。
OWIN ミドルウェアでセッションを有効にする方法を説明する同様の質問を見つけましたが、完全に機能しました。IdentityServer の外部 (つまり、"/core" にマップされたパイプラインの外部) にいくつかのコントローラーを作成しましたが、完全に機能しました。また、コントローラーに Autofac を追加して、Autofac (IdentityServer で広く使用されている) が問題ではなく、正常に動作することを確認しました。
これは作業コードです - Startup.cs:
これはうまくいきます。ミドルウェア (SetSessionStateBehavior) は要求ごとに実行され、セッションはコンストラクターで使用できます。ただし、app.UseIdentityServer()
Startup.cs に追加するとすぐに、IdentityServer が完全に機能し始めます (そして、すべての要求がセッション ミドルウェアを通過します) が、現在、Session はすべてのコントローラーに対して null です - IdentityServer コントローラーだけでなく、他のコントローラー (これらはIdentityServer パイプラインの外) - それらは動作を停止します。
すべてのコードを完全に削除して、通常の IdentityServer パイプラインに固執すると、パイプラインに RequireAspNetSession() を追加する正しい場所が見つかりません。いろいろなところに追加しようとしましたが、うまくいきませんでした。
試行錯誤の結果RequireAspNetSession()
、次の 2 つの呼び出しによってセッション ミドルウェアが破損していることに気付きました:app.UseEmbeddedFileServer()
と app.ConfigureCookieAuthentication
. 両方の呼び出しが削除されると、Session は IdentityServer コントローラーで使用できるようになりました (また、他のコントローラーでも使用できるようになりました)。おそらく問題は、これらの OWIN ミドルウェアの一部が特定の段階で実行されるため( を使用UseStageMarker
して定義するためPipelineStage
)、おそらくミドルウェアの優先順位を破っているからです。たとえば、UseEmbeddedFileServer はステージ上PipelineStage.MapHandler
で実行されるほか、RequireAspNetSession も実行されます。
app.RequireAspNetSession()
それらのミドルウェアの前後に追加してみましたが、どちらもうまくいきませんでした。実際、app.RequireAspNetSession()
これらのミドルウェアが構成されている Map() メソッド内で使用された場合は機能しません (内UseIdentityServer()
):
_
最後に、Map メソッドを使用しない場合 (および IdentityServer API をルート フォルダーに直接セットアップする場合) は正常に動作します (UseEmbeddedFileServer() および ConfigureCookieAuthentication() ミドルウェアを保持している場合でも、すべてのコントローラーでセッションを利用できます)。しかし、マップされたフォルダーで API を実行する必要があるため、受け入れられません。
要約すると、Map() 内で RequireAspNetSession() を使用すると、機能しません (セッションは常に null です)。Map() の外側で RequireAspNetSession() を使用し、Map() の内側で UseEmbeddedFileServer() または ConfigureCookieAuthentication() を保持している場合、それも機能しません。
RequireAspNetSession() を IdentityServer3 パイプラインで機能させる方法は?
また、Map("/core") は、そのパイプラインの外部でホストされている DefaultController のパイプラインにどのように影響する (そして破損する) のでしょうか?
asp.net-core - ASP.NET Core ミドルウェアまたは OWIN ミドルウェア?
app.UseOwin()
私が理解しているように、ASP.NET Core は、独自のネイティブ ミドルウェアに加えて(経由で) OWIN ミドルウェアをサポートしています。
ASP.NET Core ミドルウェアと OWIN ミドルウェアの違いは何ですか?
新しいミドルウェアを設計するとき、ASP.NET Core ミドルウェアと OWIN ミドルウェアのどちらとして設計する必要があるかをどのように判断すればよいですか?