Программно укажите пользовательскую авторизацию для WCF (NetTcpBinding)

Я хочу сделать то же самое как в этой ссылке:

http://www.codeproject.com/KB/WCF/Custom_Authorization_WCF.aspx

Но не используя конфигурационные файлы. Кто-либо может показать мне как?

Править: Я хочу реализовать и AuthorizationPolicy и CustomValidator.

7
задан jgauffin 11 July 2010 в 13:25
поделиться

2 ответа

Вы имеете в виду, как добавить AuthorizationPolicy через код? Не проверено, но я считаю, что должно сработать что-то вроде этого:

ServiceHost host = ...;
var col = new ReadOnlyCollection<IAuthorizationPolicy>(new IAuthorizationPolicy[] { new MyPolicy() });

ServiceAuthorizationBehavior sa = host.Description.Behaviors.Find<ServiceAuthorizationBehavior>();
if ( sa == null ) {
  sa = new ServiceAuthorizationBehavior();
  host.Description.Behaviors.Add(sa);
}
sa.ExternalAuthorizationPolicies = col;
9
ответ дан 7 December 2019 в 03:10
поделиться

Если вы обратитесь к этой теме (Безопасность WCF: получение пароля пользователя) от Рори Примроуза , он достигнет того же, что вы спрашиваете, с предоставлением настраиваемый валидатор, важным методом расширения является CreateSecurityTokenManager :

public class PasswordServiceCredentials : ServiceCredentials
{
    public PasswordServiceCredentials()
    {
    }

    private PasswordServiceCredentials(PasswordServiceCredentials clone)
        : base(clone)
    {
    }

    protected override ServiceCredentials CloneCore()
    {
        return new PasswordServiceCredentials(this);
    }

    public override SecurityTokenManager CreateSecurityTokenManager()
    {
        // Check if the current validation mode is for custom username password validation
        if (UserNameAuthentication.UserNamePasswordValidationMode == UserNamePasswordValidationMode.Custom)
        {
            return new PasswordSecurityTokenManager(this);
        }

        Trace.TraceWarning(Resources.CustomUserNamePasswordValidationNotEnabled);

        return base.CreateSecurityTokenManager();
    }
}

Чтобы использовать эти учетные данные настраиваемой службы, вам необходимо указать атрибут типа в ] ConfigurationElement в вашей конфигурации, например:

<serviceCredentials type="your.assembly.namespace.PasswordServiceCredentials, 
     your.assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" >
</serviceCredentials>

Точно так же вы можете установить этот атрибут типа программно, но я не знаю, как это сделать.

0
ответ дан 7 December 2019 в 03:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: