2011-07-08 74 views
2

我正在構建自己的處理不同種類協議(WS-Federation,OAuth等)的STS。我被困在處理由ADFS 2發佈給我的STS的RSTR令牌。使用WIF反序列化來自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

你會在代碼實現這一目標的方式是通過導出自己的IssuerNameRegistry實現並將其應用到您的STS here:

SecurityTokenService.SecurityTokenServiceConfiguration.IssuerNameRegistry

請注意,您是否檢出了Azure訪問控制服務(http://acs.codeplex.com/)?

+0

這就是做到這一點的方法,但我仍然需要在配置中指定它。 我已經看到了Azure ACS,我必須說它有一些很棒的功能。問題是我們正在研究創建自己的STS有多困難。謝謝您的幫助。 – shizik

相關問題