0

私はクレームにいくつかのユーザー固有の値を保存しているAsp.Net WebApiアプリケーションを実装しています。Asp.Netは外部アセンブリ内のクレームIDにアクセスします

私のプロジェクトは、モデルとコントローラを持ついくつかのクラスライブラリプロジェクトで構成されています。

今私は主プロジェクト(クラスライブラリ内)のコントローラからクレームにアクセスしようとしています。

//calling this from a class library 
var identity = Thread.CurrentPrincipal.Identity; //No user information such as Id available 
var claims = ClaimsPrincipal.Current.Claims; //Contains zero elements 

ここでは、クレームにはゼロ要素が含まれています。しかし、もし私が上記のコードをメインプロジェクトのコントローラーに置くと、すべて正常に動作します。

外部アセンブリからクレームにアクセスするにはどうすればよいですか?

+1

制御できない静的メンバーに頼るのではなく、単にIDを渡す方が良いでしょう。ライブラリもテスト可能にします。 – poke

+0

@poke 'Thread.CurrentPrincipal.Identity; 'を使ってIDオブジェクトにアクセスできました。私はそれに関するユーザー情報を見ることができません。あなたは簡単な例で答えを提供していただけますか? – Rahul

+0

あなたのWeb APIで、あなたのライブラリを以下のように呼び出してください: 'myCustomLibrary.DoSomething(currentPrincipal、otherArgument)' - つまりあなたのメソッドにプリンシパルを渡してください。 – poke

答えて

1

いくつかの調査の後、私はスタートアップコンフィギュレーションクラスからSuppressDefaultHostAuthentication();を削除しました。 Thread.CurrentPrincipal.Identityが正常に動作します。

関連する問題