Как преобразовать SAML строка маркера XML или в экземпляр SecurityToken или в ClaimsPrincipal?

Мой контекст:
  • Веб-сервис.Net RESTful
  • Клиент (смешанные платформы, технологии, возможности lib) получил маркер SAML
  • Попытка принять маркер для аутентификации/авторизации в остальных сервис
    • в Авторизации HTTP / заголовок X-авторизации
    • как параметр запроса
  • Будет также поддерживать SWT позже, но должен получить маркерное движение SAML

Подробнее:

У меня есть маркер SAML в строке:

 ..etc... 

В HttpModule я хочу преобразовать это в ClaimsPrincipal так, чтобы мой сервис мог сделать обычный Поток. CurrentPrincipal как материал IClaimsPrincipal.

Я нашел пару соблазнительных страниц/блогов/и т.д...., которые выглядели полезными:

Я застреваю, буквально пытаясь превратить маркер SAML в ClaimsPrincipal (через промежуточный шаг SecurityToken или прямой... счастливый так или иначе). Пример кода от идеи Cibrax использует следующее для решающего шага проверки и десериализации:

SecurityTokenSerializer securityTokenSerializer 
    = new SecurityTokenSerializerAdapter(
        FederatedAuthentication.SecurityTokenHandlers, 
        MessageSecurityVersion.Default.SecurityVersion, 
        false, new SamlSerializer(), null, null);

SecurityToken theToken 
    = WSFederationAuthenticationModule.GetSecurityToken(
        theSamlTokenInStringForm, securityTokenSerializer);

Стена, в которую я врезался, - то, что версия RTM WIF не выставляет эту перегрузку GetSecurityToken... это только выставляет:

WSFederationAuthenticationModule fam = new WSFederationAuthenticationModule();
SecurityToken theToken = fam.GetSecurityToken(HttpRequest theRequest);
SecurityToken theToken = fam.GetSecurityToken(SignInResponseMessage message);

Спасибо за помощь мне быть отклеенным!

Tyler

25
задан Tyler 1 April 2010 в 17:03
поделиться

1 ответ

Хорошо, некоторый прогресс ... если я сделаю следующее, я пойду дальше:

Microsoft.IdentityModel.Configuration.ServiceConfiguration serviceConfig
    = new Microsoft.IdentityModel.Configuration.ServiceConfiguration();

// Now read the token and convert it to an IPrincipal
SecurityToken theToken = null;
ClaimsIdentityCollection claimsIdentity = null;
using (XmlReader reader = XmlReader.Create(new StringReader(authSamlString)))
{
    theToken = serviceConfig.SecurityTokenHandlers.ReadToken(reader);
    claimsIdentity = serviceConfig.SecurityTokenHandlers.ValidateToken(theToken);
}

IPrincipal principal = new ClaimsPrincipal(claimsIdentity);

Следующая стена, в которую я попал:

Я Теперь я получаю исключение в сгенерированном мастером распределении хоста службы REST здесь:

<%@ ServiceHost Language="C#" Debug="true" Service="Sample.RestService.Service" Factory="Sample.RestService.AppServiceHostFactory"%>

using System;
using System.ServiceModel;
using System.ServiceModel.Activation;
using Microsoft.ServiceModel.Web.SpecializedServices;

namespace Sample.RestService 
{
  class AppServiceHostFactory : ServiceHostFactory
  {
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        /// ***** The exception occurs on the next line *****
        return new SingletonServiceHost(serviceType, baseAddresses);
    }
  }
}

Сведения об исключении:

System.Configuration.ConfigurationErrorsException occurred
  Message="This element is not currently associated with any context"
  Source="System.Configuration"
  BareMessage="This element is not currently associated with any context"
  Line=0
  StackTrace:
       at System.Configuration.ConfigurationElement.get_EvaluationContext()
  InnerException: {{NONE}}
0
ответ дан 28 November 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: