Отключение шифрования в Windows Identity Foundation - PullRequest
0 голосов
/ 04 апреля 2011

Могу ли я отключить шифрование ответа маркера безопасности запроса и управлять только сигнатурами?

Я создаю пользовательскую STS, расширяющую Microsoft.IdentityModel.SecurityTokenService.SecurityTokenService, на основе демонстраций WIF SDK, и я не могуудается настроить, не используя шифрование.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Я только что запустил мастер «Добавление ссылки на STS» в Visual Studio, выбрав опцию для создания нового STS. Шаблон, созданный инструментом, добавляет поддержку шифрования токена, но если сертификат не указан, он отключается: (Я оставил все комментарии по умолчанию)

protected override Scope GetScope( IClaimsPrincipal principal, RequestSecurityToken request )
{
    ValidateAppliesTo( request.AppliesTo );

    //
    // Note: The signing certificate used by default has a Distinguished name of "CN=STSTestCert",
    // and is located in the Personal certificate store of the Local Computer. Before going into production,
    // ensure that you change this certificate to a valid CA-issued certificate as appropriate.
    //
    Scope scope = new Scope( request.AppliesTo.Uri.OriginalString, SecurityTokenServiceConfiguration.SigningCredentials );

    string encryptingCertificateName = WebConfigurationManager.AppSettings[ "EncryptingCertificateName" ];
    if ( !string.IsNullOrEmpty( encryptingCertificateName ) )
    {
        // Important note on setting the encrypting credentials.
        // In a production deployment, you would need to select a certificate that is specific to the RP that is requesting the token.
        // You can examine the 'request' to obtain information to determine the certificate to use.
        scope.EncryptingCredentials = new X509EncryptingCredentials( CertificateUtil.GetCertificate( StoreName.My, StoreLocation.LocalMachine, encryptingCertificateName ) );
    }
    else
    {
        // If there is no encryption certificate specified, the STS will not perform encryption.
        // This will succeed for tokens that are created without keys (BearerTokens) or asymmetric keys.  
        scope.TokenEncryptionRequired = false;            
    }

    // Set the ReplyTo address for the WS-Federation passive protocol (wreply). This is the address to which responses will be directed. 
    // In this template, we have chosen to set this to the AppliesToAddress.
    scope.ReplyToAddress = scope.AppliesToAddress;

    return scope;
}
0 голосов
/ 05 апреля 2011

Я создаю CustomSecurityHandler и переопределяю его метод GetEncryptingCredentials, возвращая нулевое значение, как в следующих строках, и это работает:

 public class MyCustomSecurityTokenHandler : Saml11SecurityTokenHandler
 {

    public MyCustomSecurityTokenHandler(): base() {}

    protected override EncryptingCredentials GetEncryptingCredentials(SecurityTokenDescriptor tokenDescriptor)
    {
        return null;
    }

 }

затем в классе SecurityTokenService я переопределяю GetSecurityTokenHandler, возвращая пользовательский класс, созданный ранее:

protected override SecurityTokenHandler GetSecurityTokenHandler(string requestedTokenType)
    {
        MyCustomSecurityTokenHandler tokenHandler = new MyCustomSecurityTokenHandler();

        return tokenHandler;
    }
...