これまでに行ったことは次のとおりです。
1) ASP.NET MVC 証明書利用者アプリケーションを作成し、ADFS v2.0 で保護しました。これは機能します。
2) ASP.NET Web サイト用の Claims-Aware サービス テンプレートを使用して WCF サービスを作成しました。サービスがアクティブにならないため、サービスの ASP.NET 互換性をオンにしました。このサービスのインターフェイスを「SharedContracts」アセンブリに移動しました。
3) 「STS の追加」参照を使用して WCF サービスを証明書利用者として設定し、ADFS サーバーも指定します。
4) 証明書利用者として WCF サービスを含め、LDAP 要求を発行するように ADFS サーバーを構成しました。
今やりたいことは、ActAs を使ってサービスと対話することです。言い換えると、誰かが ASP.NET MVC サイトから HomeController.Index() を要求でいっぱいのトークンでヒットした場合 (MVC サイトは証明書利用者であることを思い出してください)、このメソッドでプログラムによってクライアント プロキシを作成し、単一のプロキシを呼び出す必要があります。 WCF サービスで使用しているサービス メソッド (「HelloClaim」と呼ばれるメソッドで、クレーム対応サービス テンプレートに付属するストック メソッドとほぼ同じです)。
これまでに得たコードは次のとおりです。
[ValidateInput(false)]
public ActionResult Index()
{
SecurityToken callerToken = null;
IClaimsPrincipal claimsPrincipal = Thread.CurrentPrincipal as IClaimsPrincipal;
if (claimsPrincipal != null)
{
foreach (IClaimsIdentity claimsIdentity in claimsPrincipal.Identities)
{
if (claimsIdentity.BootstrapToken is SamlSecurityToken)
{
callerToken = claimsIdentity.BootstrapToken;
break;
}
}
string baseAddress = "http://khoffman2/SecureServices/Service.svc";
ChannelFactory<IHelloClaim> factory = new ChannelFactory<IHelloClaim>(new WebHttpBinding(), new EndpointAddress(baseAddress));
factory.ConfigureChannelFactory<IHelloClaim>();
IHelloClaim hello = factory.CreateChannelActingAs<IHelloClaim>(callerToken);
string result = hello.HelloClaim();
ViewData["Message"] = "Welcome to ASP.NET MVC!";
}
return View();
}
メソッドを呼び出そうとすると、次のエラー メッセージが表示されます。
このファクトリでは手動アドレス指定が有効になっているため、送信されるすべてのメッセージは事前にアドレス指定する必要があります。
バインディングとエンドポイントをプログラムで構成するのに十分ではないと確信しています。以前にこれを行ったことがある人、またはその方法を知っている人がいる場合は、これを機能させたいと思います.
要するに、私は基本的な ID 委任シナリオを利用しているだけです。唯一の違いは、生成されたクライアント プロキシを使用していないことです。