Как извлечь и проверить токен SAML в заголовке авторизации, используя ASP.NET Web API? - PullRequest
2 голосов
/ 19 марта 2012

У меня есть приложение Silverlight, которое запрашивает токен SAML от STS с использованием реализации WSTrust из комплекта учебных материалов Identity.

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 помещает токен SAML в заголовок авторизации запросамоим службам ASP.NET Web API;опять же, используя ту же реализацию 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);

Во-первых, я иду по этому пути правильно?Во-вторых, если да, как я могу заставить свои службы ASP.NET Web API обнаруживать токен SAML и преобразовывать его в IClaimsPrincipal серверную часть?

1 Ответ

2 голосов
/ 20 марта 2012

Не гуру Silverlight, но здесь есть серия статей (и некоторых пользовательских классов), касающихся сервисов WebAPI и WIF - ASP.NET WebAPI Security 1: Представляем Thinktecture.IdentityModel.Http .

Это может помочь?

...