IDトレーニングキットのWSTrust実装を使用してSTSからSAMLトークンを要求するSilverlightアプリケーションがあります。ASP.NET Web APIを使用してAuthorizationヘッダーでSAMLトークンを抽出して検証するにはどうすればよいですか?
private void Application_Startup(object sender, StartupEventArgs e)
{
WSTrustClient wsTrustClient = new WSTrustClient(new WSTrustBindingUsernameMixed(), new EndpointAddress("https://localhost/SecurityTokenService/Service.svc/IWSTrust13"), new UsernameCredentials("user", "password"));
wsTrustClient.IssueCompleted += new EventHandler<IssueCompletedEventArgs>(wsTrustClient_IssueCompleted);
RequestSecurityToken rst = new RequestSecurityToken()
{
AppliesTo = new EndpointAddress("https://localhost/SilverlightApplication.Web")
};
wsTrustClient.IssueAsync(rst);
}
private void wsTrustClient_IssueCompleted(object sender, IssueCompletedEventArgs e)
{
this.Resources.Add("SamlToken", e.Result);
this.RootVisual = new MainPage();
}
Silverlightのアプリは、私のASP.NETのWeb APIサービスへのリクエストのAuthorizationヘッダにSAMLトークンを置きます。再度、同じWSTrust実装を使用します。
string uri ="https://localhost/WebApi/api/resource";
WebRequest request = WebRequest.Create(uri);
request.Method = "GET";
RequestSecurityTokenResponse rstr = (RequestSecurityTokenResponse)Application.Current.Resources["SamlToken"];
request.Headers[HttpRequestHeader.Authorization] = "SAML " + rstr.RequestedSecurityToken.RawToken;
request.BeginGetResponse((result) =>
{
using (WebResponse response = request.EndGetResponse(result))
{
// Process Response
}
}, null);
まず、私は正しい方向に進むつもりですか? 2番目に、SAMLトークンを検出してIClaimsPrincipal
サーバー側に変換するASP.NET Web APIサービスを取得するにはどうすればよいですか?
ありがとうございます。私はDominick Baierのブログに多くの時間を費やしてきましたが、彼は自分のThinktectureフレームワークを広範に活用していますが、自分自身でそれを行う方法を見つけることはできませんでした。少なくとも私は彼のソースコードを調べ、彼が何をしたかを見ることができます。 –