‫استفاده از Authentication/Authorization استاندارد WCF یا پیاده‌سازی خودمان؟

WCF خودش مکانیزم‌های زیادی برای Authentication و Authorization دارد. یکی از سناریوهای ممکن برای Membership یک برنامه نوعی می‌تواند این باشد که Membership در سرور با استفاده از یک Windows Domain Controller تعریف شده و به ازای همه کاربران و نقش‌های ممکن، در آن domain به تعداد مورد نیاز Windows Account و Windows Group ساخته شود. سپس Role Management تمام سرویس‌ها بر اساس این Windows Groupها تعریف شده و کاربران برنامه WCF هم بر اساس Windows Accountهای تعریف شده در domain وارد سیستم شوند.

سناریوی دوم این است که از مکانیزم Authentication و Authorization داخلی WCF استفاده نکرده و به جای آن خودمان همه موارد مورد نیاز Membership را پیاده‌سازی کنیم. این طوری کنترل بیشتری روی کار داریم ولی باید زحمت بیشتری کشیده و خیلی از موارد را که قبلاً WCF پیاده‌سازی کرده، مجدداً خودمان پیاده‌سازی نماییم. هر چند که این روش توصیه شده نیست ولی وقتی که روش Authentication و Authorization انتخابی ما زیادی پیچیده و غیر معمول است چاره‌ای نیست جز این که خودمان همه چیز را انجام دهیم.

‫ایمن‌سازی انتقال اطلاعات در WCF

بعد از آن که سرور و کلاینت خودشان را به هم شناساندند، نیاز هست که کانال ارتباطی بین آنها هم ایمن‌سازی شود. یعنی هیچ کسی وسط راه نتواند این پیغام‌ها را خوانده یا دستکاری کند. ایمن بودن پیغام‌های در WCF سه جنبه دارد، integrity به معنی دست نخورده بودن پیغام، privacy به این معنی که هیچ کس وسط راه پیغام‌ها را نخوانده باشد و mutual authentication به این معنی که پیغام صادره از طرف کلاینت صرفا به دست سرور اصلی برسد نه سرورهای دیگر.

WCF پنج روش را برای ایمن‌سازی انتقال اطلاعات فراهم می‌کند. اولین روش، عدم استفاده از هیچ نوع ایمن‌سازی است. دومین روش، ایمن‌سازی لایه انتقال است. در این روش WCF از یکی از پروتکل‌های ایمن HTTPS، TCP، IPC یا MSMQ برای انتقال اطلاعات استفاده می‌کند. این روش برای وقتی که کلاینت و سرور به طور مستقیم به هم وصل نیستند مشکلاتی دارد. سومین روش، ایمن‌سازی خود پیغام‌ها است. در این روش پیغام‌ها اول رمزنگاری شده سپس انتقال داده می‌شوند. این روش هم روی پروتکل‌های ساده مثل HTTP قابل اجراست هم بر عکس روش ایمن‌سازی لایه انتقال، نیازی به ارتباط مستقیم بین کلاینت و سرور ندارد. بنابراین از این روش در فضای اینترنتی هم می‌توان استفاده کرد. تنها نکته منفی این روش، overhead اجرای آن به دلیل رمزنگاری تک تک پیغام‌هاست. روش چهارم و پنجم هم عبارتند از ترکیب روش دوم و سوم یا استفاده هم‌زمان از هر دو که ممکن است خیلی هم مورد استفاده قرار نگیرند.

منبع:
فصل ۱۰ کتاب Programming WCF Services

‫Authentication و Authorization در WCF‫

Authentication در WCF به چندین روش انجام می‌شود:

No authentication
هیچ نوع authenticationی انجام نمی‌شود.

Windows authentication
در صورت وجود domain server از Kerberos و در غیر این صورت از NTLM استفاده می‌شود.

Username و Password
user name و password می‌تواند بر اساس اکانت‌های ویندوز یا یک روش سفارشی سازی شده سنجیده شود.

X509 certificate
کلاینت خودش را با استفاده از یک certificate به سرور می‌شناساند.

Custom mechanism
برنامه‌نویسان می‌توانند روش authentication خاص خودشان را پیاده‌سازی کرده و WCF را مجبور به استفاده از آن کنند.

Issued Token
در این روش هم سرور و هم کلاینت از یک سرویس دیگر مثل Windows Card Space برای authentication استفاده می‌کنند.

WCF برای Authorization هم از دو روش آشنا استفاده می‌کند. یکی استفاده از Windows groups و دیگری استفاده از ASP.NET role provider.

منبع: فصل ۱۰ کتاب Programming WCF Services