ADFS とクレームで動作するシステムを構築しようとしています。現時点では、これは単なる「おもちゃ」の実装です。
非常に単純な MVC Web アプリケーションを構築し、Visual Studio の「ID とアクセス...」ウィザードを使用して ADFS 2.0 サーバーと通信するようにセットアップし、IIS サーバーに展開しました。すべて正常に動作し、受け取ったクレームを調べて一覧表示できます。
次のステップは、Web API ベースの REST サービス (MVC アプリケーションが依存するバックエンド サービスを表す) を構築することです。そのため、資格情報をそのバックエンド サーバーに渡して、適切な承認を行うことができるようにします。決定。
HttpClient
したがって、最初のステップは、委任トークンを作成することです (そして、残りの呼び出しを行うクラスに関して、委任トークンをどうするかを考えます)。私はこれを持っています:
//We need to take the bootstrap token and create an appropriate ActAs token
var rst = new RequestSecurityToken
{
AppliesTo = new EndpointReference("https://other-iis.example.com/Rest"),
RequestType = RequestTypes.Issue,
KeyType = KeyTypes.Symmetric,
ActAs = new SecurityTokenElement(((BootstrapContext)((ClaimsIdentity)User.Identity).BootstrapContext).SecurityToken)
};
var sts = new SecurityTokenService(); //This line isn't valid
var resp = sts.Issue(System.Threading.Thread.CurrentPrincipal as ClaimsPrincipal, rst);
しかし、問題はそれSecurityTokenService
が抽象的であることです。System.IdentityModel
どちらにもこのクラスから派生した型が見つかりませSystem.IdentityModel.Services
ん。上記には、ある時点で提供する必要があることは明らかな ADFS サーバーへの参照が含まれていません。
もちろん、私も完全に間違ったルートを下っている可能性があります。あるいは、小さなつまずきにぶつかっただけで、はるかに大きなつまずきが遠くに迫っているのが見えないので、それに関するアドバイスもいただければ幸いです.
たとえば、Identity Delegation Scenarioを見てきましたが、それは を使用しておりCreateChannelActingAs
、休憩サービスと話しているときにうまくいくとは思いません (またはそうなるでしょうか?)。 .NET 4.5 に適用されます。