Аутентификация клиента WCF на стороне сервера - PullRequest
1 голос
/ 02 апреля 2012

У меня есть такая структура на моем клиенте.

WindowsIdentity wi = WindowsIdentity.GetCurrent();
IntPtr token = wi.Token;

Следующий шаг - отправить токен аутентификации на сервер через WCF и выдать себя за другого пользователя.

api.SendToken(token);

...
...
...

Но как только я получу токенна стороне сервера и при попытке создать WindowsIdentity выдает ошибку:

WindowsIdentity newId = new WindowsIdentity(token);

Invalid token for impersonation - it cannot be duplicated.

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

Спасибо!

1 Ответ

1 голос
/ 02 апреля 2012

В WCF уже есть встроенная сантехника для поддержки олицетворения Windows. Есть ли причина, по которой вы пытаетесь свернуть свою собственную?

ОБНОВЛЕНИЕ, чтобы избежать ответов только для ссылок (ааааошибки моей молодости ...)

Вот основные шаги, необходимые для настройки встроенной имитации WCF

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

  • В контракте на обслуживание используйте атрибут OperationBehavior для метода, который требует олицетворения:

    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public string SomeMethod(string aParameter) { ... }
    
  • Для клиента проще всего создать пользовательский класс, унаследованный от класса ClientBase.Все сервисные ссылочные типы наследуются от этого класса.Вот пример кода клиента:

    var client = new SomeClientBaseDerivedType("TheServiceEndpoint");
    client.ClientCredentials.Windows.AllowedImpersonationLevel =
        System.Security.Principal.TokenImpersonationLevel.Impersonation;
    
...