2

さまざまな種類のプロトコル(WS-Federation、OAuthなど)を処理する独自のSTSを構築しています。ADFS2によってSTSに投稿されたRSTRトークンの処理でスタックしました。

クレームを正常に逆シリアル化したコードですが、それを機能させるにはmicrosoft.identityModel構成セクションの一部を追加する必要があり、TrustedPeopleストアにADFS2署名証明書を追加する必要があります。

私は物事を指定する独自の構成セクションを持っているので、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>
4

1 に答える 1

1

コードでこれを実現する方法は、独自のIssuerNameRegistry実装を導出し、それをここでSTSに適用することです。

SecurityTokenService.SecurityTokenServiceConfiguration.IssuerNameRegistry

ちなみに、Azure Access Control Service(http://acs.codeplex.com/)をチェックアウトしましたか?

于 2011-07-08T20:35:29.933 に答える