Удостоверяване с ръчен код

Удостоверяване. WCF

Като начало, нека създадем редовна услуга на WCF без удостоверяване, за това отваряме VisualStudio и добавяме нов проект за услугата WCF към Solution - AuthWCF. Добавете интерфейса ISecretService към създадения проект:

публичен интерфейс ISecretService


След това нека приложим този интерфейс в услугата WCF:

публичен клас SecretService: ISecretService

публичен низ GetSecretCode ()


Все още нищо сложно, методът GetSecretCode може да бъде извикан от всеки потребител. Но ние искаме този метод да се извиква само от познатите ни потребители, така че нека започнем да прилагаме процеса на удостоверяване.

Първото нещо, с което трябва да се реши, е Режим на сигурност: Transport, Message или TransportWithMessageCredential. Изберете типа защита на ниво съобщение - Съобщение.
На второ място, това е типът за удостоверяване на клиента Тип клиентски идентификационни данни, в зависимост от местоположението на услугата WCF (интернет, интранет): Windows, Certificate, Digest, Basic, UserName, NTLM, IssuedToken Избираме удостоверяване чрез вход и парола - UserName, като най-универсален тип.

След като взехме решение за обвързване Message/UserName, ще конфигурираме услугата WCF, като добавим следните редове към конфигурационния файл (Web.config):


В настройките посочихме несъществуващия CustomUserNameValidator, така че ще добавим класа CustomUserNameValidator към проекта, който е наследник на UserNamePasswordValidator и реализира процеса на удостоверяване на потребителя:

публичен клас CustomUserNameValidator: UserNamePasswordValidator

public override void Validate (низ userName, низ парола)

// Достъпът е разрешен само на потребител "ilya" с парола "pass"

ако (! (userName == "ilya" && password == "pass"))

хвърли ново FaultException ("Невалидно потребителско име или парола");

# FindKey.exe My LocalMachine

cacls.exe "C: \ Documents и Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys \ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxx-хххх-хххх-хххх-XXXXXXXXXXXX"/E/G "ASPNET": R