WCF: служба аутентификации или безопасность на основе токенов?

Там естьDynamic CRM экземпляр на сервере ("локальный"). Будет использоватьсяa few sites которые работают на удаленных машинах (другой домен, другой Active Directory). Связь между этими сайтами и экземпляром CRM осуществляется черезCRM proxyсервис WCF, который находится рядом с ним (возле CRM), обрабатывает запросы, запросы CRM и т. д.

Эта служба WCF обращена к Интернету. Хотя защищенные каналы связи не являются необходимыми, аутентификация является. Мы не можем позволить случайным клиентам пользоваться услугами, предоставляемыми прокси-сервером CRM.

Итак, служба аутентификации (куки?) / Передача токена вручную (в качестве параметра для каждой операции сервиса) /это решение - на stackoverflow.

Заранее спасибо!

PS: токены, закодированные вручную, будут "чувствительными ко времени" и хешировал несколько раз с некоторыми секретными ключами. Человек посередине может не быть такой большой проблемой, так как токен может быть признан недействительным после запроса.

Ответы на вопрос(1)

Решение Вопроса

Передача токенов вручную не очень элегантна. Это загрязняет ваши подписи метода и заставляет вас дублировать проверки повсюду.

Если вы можете распространять учетные данные среди клиентов службы или передавать учетные данные, которые они уже используют для вашей системы, я предлагаю использовать защиту сообщений с пользовательским именем пользователя & amp; средство проверки пароля.

Шаги для его реализациидостаточно просты, Вам нужно только реализоватьUserNamePasswordValidator:

Краткое описание конфигурации из связанной статьи:

Укажите режим безопасности в вашей привязке:

<security mode="Message">
    <message clientCredentialType="UserName"/>
</security>

В вашем сервисе поведения добавьте:

<serviceCredentials>
    <userNameAuthentication 
        userNamePasswordValidationMode="Custom" 
        customUserNamePasswordValidatorType="YourFullUserNameValidatorType"/>
</serviceCredentials>

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

serviceClient.ClientCredentials.UserName.UserName = "username";
serviceClient.ClientCredentials.UserName.Password = "password";

ВашUserNamePasswordValidator Получите эти учетные данные для каждого вызова операции службы, и у вас будет возможность проверить их в своем хранилище учетных данных.

Тем не менее, для большей безопасности, вы можете посмотреть впроверка подлинности сертификата, Это более надежно, и вы не обязаны покупать сертификат в ЦС. Если вы также можете настроить себя в качестве ЦС на клиентских компьютерах, тогда все в порядке. Это уместно, особенно потому, что у вас всего несколько клиентов, поэтому ими будет легко управлять.

Ваш ответ на вопрос