問題タブ [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 - OWIN ミドルウェアの CurrentPrincipal.Identities には異なるクレーム セットがあります
今日、私は Oauth ミドルウェアの認証プロバイダーを構成し、いくつかの GUID 値を Thread.CurrentPrincipal.Identity.Claims に挿入しようとしていました。しかし、Thread.CurrentPrincipal の FindFirst を呼び出そうとすると、何もありません。
これが私がやろうとしていた例です:
内部プロパティを確認すると、Thread.CurrentPrincipal.Identity には以前に設定したクレームがまだ含まれていることがわかりましたが、Thread.CurrentPrincipal.Identities[0] は含まれていません。そのため、独自のクレーム セットを持つ 2 つの異なる ID インスタンスがあります。
Web Api コントローラーのアクション内で同じ手順を実行しようとしましたが、Identity が Identities[0] を参照していました。これは、同じインスタンスがあることを意味します。
OWIN ミドルウェアの Currentprincipal に何が起こっているので、Identity と Identity[0] は異なるインスタンスを参照していますか? 誰か私にこれを説明してもらえますか?
ありがとうございました!
oauth-2.0 - 要求ごとに OWIN 認証ミドルウェアを変更する (マルチテナント、テナントごとの oauth API キー)
マルチテナント アプリケーションがあります。各テナントは、Facebook、Twitter、Google などで OAUTH-2 を使用してユーザーを認証できます。各テナントには、前述のサービス用の独自の API キーがあります。
OWIN パイプラインをセットアップする一般的な方法は、スタートアップで認証プロバイダーを「使用」することですが、これにより、アプリの開始時に API キーが設定されます。リクエストごとに各 oauth API で使用するキーを変更できる必要があります。
テナントに基づいて、リクエストごとにこれらの設定を変更できる必要があります。これどうやってするの?
c# - Owin は特定のフォルダー内のファイルのみを提供します
だから私は Owin と Katana で遊んでいて、パブリック フォルダーに静的ファイルを提供したいと考えています。
スタイルシートを含む Content フォルダーとスクリプト フォルダーがあります。
私のスタートアップ:
したがって、localhost:8861/ を参照すると、パブリック フォルダー内の index.html ファイルに移動します。それで大丈夫です。しかし、ブロックしたい localhost:8861/Content/style.css を参照することもできます。ユーザーが必要とするすべてのものは、パブリック フォルダーでアクセスできる必要があります。残りはすべてブロックする必要があります。
どうすればこれを達成できますか?
azure - OWIN 認証
Azure WebRole (MVC アプリ) と Azure Worker ロールがあります。
これで、Owin.SelfHost を使用して、Worker ロールで SignalR ハブをホストできるようになりました。
MVC アプリは、worker ロールでこのハブを呼び出す必要があります。これは非常に簡単です。
今私の問題は認証です。
ハブへの呼び出しを引き続き認証できるように、WebRole で WebRole の Context.User.Identity にアクセスする必要があります。
ワーカーの役割
現在-私はこれにこだわっています
どういうわけか、User.Context (Asp.net ID) を WebRole から Worker ロールの Owin パイプラインに渡す必要があります。
それを行う方法はありますか?
c# - カスタム Owin ミドルウェアで応答ストリームを安全にインターセプトするにはどうすればよいですか
応答ストリームを傍受するために、単純なOWINミドルウェアを作成しようとしています。私がやろうとしているのは、元のストリームをカスタム Stream ベースのクラスに置き換えることです。これにより、応答ストリームへの書き込みをインターセプトできるようになります。
ただし、チェーン内の内部ミドルウェア コンポーネントによって応答が完全に書き込まれたタイミングがわからないため、いくつかの問題に直面しています。StreamのDispose
オーバーライドが呼び出されることはありません。そのため、応答ストリームの最後に発生するはずの処理をいつ実行するかわかりません。
サンプルコードは次のとおりです。
上記のコードのコメントで触れたように、応答が完全かどうかを検出するために考えられる 2 つの戦略があります。
a) 応答ストリームに書き込まれたバイト数を記録し、それを予想される応答の長さに関連付けることができます。ただし、Chunked Transfer Encoding を使用する応答の場合、長さは不明です。
Dispose
b) が応答ストリームで呼び出されたときに、応答ストリームが完了したと判断できます。ただし、OWIN/Katana インフラストラクチャは、置き換えられたストリームで Dispose を呼び出すことはありません。
基になる HTTP プロトコルを操作することが実現可能なアプローチであるかどうかを確認するために、不透明なストリーミングを調査してきましたが、Katana が不透明なストリーミングをサポートしているかどうかはわかりません。
私が望むものを達成する方法はありますか?
c# - Owin ミドルウェアを使用して 404 をインターセプトする方法
バックグラウンド
まず背景を説明します。私は、現在 IIS でホストされている OWIN 経由で構成された Web API を使用するバックエンド サーバーを、将来的には他の OWIN サポート ホストと組み合わせて、AngularJS を使用するフロントエンドに結合しようとするプロジェクトに取り組んでいます。
AngularJS フロントエンドは完全に静的コンテンツです。MVC/Razor、WebForms、Bundles などのサーバー側のテクノロジ、およびフロントエンドとそれが使用するアセットに関係するものはすべて回避し、代わりに Node.js、Grunt/Gulp などを使用した最新かつ最高の手法を採用します。 . CSS のコンパイル、バンドル、ミニフィケーションなどを処理します。ここでは説明しない理由により、フロントエンド プロジェクトとサーバー プロジェクトを同じプロジェクト内の別々の場所に保持します (ホスト プロジェクトにすべてを直接貼り付けるのではなく (crud を参照)下図)。
したがって、フロントエンドに関する限り、私がする必要があるのは、ホストに静的コンテンツを提供させることだけです。Express.js では、これは簡単です。OWIN では、Microsoft.Owin.StaticFilesミドルウェアを使用してこれを簡単に行うことができました。うまく機能します (非常に滑らかです)。
これが私のOwinStartup
構成です:
キャッチ
基本的に、frontend/MyProjectApp
MyProject.Host のルート内にあるかのようにすべてをホストします。当然のことながら、存在しないファイルを要求すると、IIS は 404 エラーを生成します。
これは AngularJS アプリであり、html5mode
. index.html
ユーザーが AngularJS (この例では物理的に存在するファイル以外のもの) にドロップすると、そのルートが AngularJS アプリで有効な場合でも、404 が返されます。index.html
したがって、要求されたファイルが存在しない場合にファイルを返すために OWIN ミドルウェアが必要であり、それが本当に 404 であるかどうかを AngularJS アプリに判断させます。
SPA と AngularJS に精通している場合、これは通常の簡単な方法です。MVC または ASP.NET ルーティングを使用している場合は、 my を返す MVC コントローラーへのデフォルト ルートを設定するだけで済みますindex.html
。ただし、私は MVC を使用していないと既に述べており、これを可能な限りシンプルかつ軽量に保つように努めています。
このユーザーは同様のジレンマを抱えていて、IIS の書き換えで解決しました。私の場合、それは機能しません。なぜなら、a) 書き換え URL モジュールが見つけられる場所に私のコンテンツが物理的に存在しないため、常に返さindex.html
れ、b) IIS に依存しないが内部で処理されるものが欲しいからです。フレキシブルに使えるOWINミドルウェア。
TL;DNR 私、大声で泣いてしまいました。
簡単に、どうすれば 404 Not Found をインターセプトし、OWIN ミドルウェアを使用して (注:リダイレクトしないで) my FileServer
-servedのコンテンツを返すことができindex.html
ますか?