Десериализация заявок от токена RSTR с использованием WIF - PullRequest
2 голосов
/ 08 июля 2011

Я строю свой собственный STS, который обрабатывает протоколы разных типов (WS-Federation, OAuth и т. Д.).Я застрял с обработкой токена RSTR, который размещен ADFS 2 на моем STS.

Код, который я успешно десериализовал для утверждений, однако мне нужно добавить часть раздела конфигурации microsoft.identityModel, чтобы он работал, и мне нужно добавить сертификат подписи ADFS 2 в хранилище доверенных лиц.

У меня есть свой собственный раздел конфигурации, где я указываю вещи, поэтому использование microsoft.identityModel является избыточным.

Код:

    var request = System.Web.HttpContext.Current.Request;

    var message = SignInResponseMessage.CreateFromFormPost(request) as SignInResponseMessage;

    var rstr = new WSFederationSerializer().CreateResponse(message, new WSTrustSerializationContext());

    var serviceConfig = new ServiceConfiguration();

    IClaimsIdentity claimsIdentity = null;
    using (var reader = XmlReader.Create(
                                new StringReader(rstr.RequestedSecurityToken.SecurityTokenXml.OuterXml)))
    {
        var token = serviceConfig.SecurityTokenHandlers.ReadToken(reader);
        claimsIdentity = serviceConfig.SecurityTokenHandlers.ValidateToken(token).FirstOrDefault();
    }

    return claimsIdentity;

Необходимая конфигурация, которую я бы хотел избежать:

<microsoft.identityModel>
    <service>
      <audienceUris mode="Never">
      </audienceUris>
      <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <trustedIssuers>
          <add thumbprint="27d3db77a9716ad370a7e9c632d5b98dcc5b1479" name="https://UrlToAdfs/adfs/ls/" />
        </trustedIssuers>
      </issuerNameRegistry>
    </service>
  </microsoft.identityModel>

1 Ответ

1 голос
/ 09 июля 2011

То, как вы могли бы достичь этого в коде, - это получить собственную реализацию IssuerNameRegistry и применить ее к своей STS здесь:

SecurityTokenService.SecurityTokenServiceConfiguration.IssuerNameRegistry

Обратите внимание, вы уже ознакомились со службой контроля доступа Azure (http://acs.codeplex.com/)?

...