使用WIF从RSTR令牌反序列化声明

时间:2011-07-08 08:09:43

标签: wif saml adfs2.0

我正在构建自己的STS,它处理不同类型的协议(WS-Federation,OAuth等...)。我遇到了由ADFS 2发布到我的STS的RSTR令牌。

我已成功反序列化声明的代码,但是我必须添加部分microsoft.identityModel配置部分以使其工作,我需要在Trusted People存储中添加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 个答案:

答案 0 :(得分:1)

在代码中实现此目的的方法是通过派生自己的IssuerNameRegistry实现并将其应用于STS:

SecurityTokenService.SecurityTokenServiceConfiguration.IssuerNameRegistry

另外,您是否已查看Azure访问控制服务(http://acs.codeplex.com/)?