2012-03-19 6 views
2

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サービスを取得するにはどうすればよいですか?

答えて

2

Silverlightの専門家ではありませんが、ここでWebAPIサービスとWIF-ASP.NET WebAPI Security 1: Introducing Thinktecture.IdentityModel.Httpに関する一連の記事(およびカスタムクラス)があります。

これが役立ちますか?

+0

ありがとうございます。私はDominick Baierのブログに多くの時間を費やしてきましたが、彼は自分のThinktectureフレームワークを広範に活用していますが、自分自身でそれを行う方法を見つけることはできませんでした。少なくとも私は彼のソースコードを調べ、彼が何をしたかを見ることができます。 –

関連する問題