Secure Web Services
אני אכתוב כמה מילים על שירותי ווב מאובטחים. כשאני בונה WebService ואני רוצה שהמשתמשים יזדהו
לפני השימוש, אז נכון שאני יכול לדרוש שחלק מהפרמטרים יהיו השם משתמש וסיסמה, אבל זו לא הדרך הטובה יותר,
דרך יותר נכונה תהיה להשתמש ב Header שהסרביס מקבל, והוא יכיל את שם המשתמש והסיסמה.
בואו ניצור משהו פשוט:

עכשיו ניצור מחלקה חדשה שתייצג את ה Header שלנו
public class SecurityHeader :
System.Web.Services.Protocols.SoapHeader
{
public string username;
public string pass;
}
כעת נגיד לשירות שלנו שהוא אמור לחכות ל Header הזה
[WebMethod]
[SoapHeader("SecurityHeader")]
public string HelloWorldSecure() {
כפי שניתן לראות מדובר בסך הכל בתוספת של שורה אחת
עכשיו עוד דבר קטן, נגדיר משתנה גלובלי מסוג המחלקה של ה Header שלנו
public class SayHello :
System.Web.Services.WebService
{
public SecurityHeader secHeader;
כעת כל פעם שמישהו יקרה לסרביס שלנו, השרת יבדוק אם יש לו Header מהסוג שציינו, ואם כן הוא יכניס את הערכים שהוא קיבל למשתנה הגלובלי שלנו במחלקה.
כעת בתוך השירות אנחנו רק צריכים לבדוק שאכן המשתנה הגלובלי קיבל ערך(אכן יש כזה Header) ואז ניתן לבדוק את הנתונים שלו
(שם משתמש וסיסמה במקרה שלנו)
if (secHeader == null)
{
return "Please authenticate!";
}
if (secHeader.username == "tal" && secHeader.pass == "giladi")
{
return "Shalom " + secHeader.username;
}
else
{
return "Bad username or password";
}
עכשיו להשתמש בזה בצד הלקוח זה עוד יותר קל אפילו...
ניצור הפניה לשירות שלנו
קראתי להפניה הזאת server_sayHello
ניצור אובייקט של ההפניה הזאת
server_sayHello.SayHello sayHello = new server_sayHello.SayHello();
ניצור הפניה של ה Header שלנו באותה צורה
server_sayHello.SecurityHeader secHeader = new server_sayHello.SecurityHeader();
ניתן ערכים לשם והסיסמה
secHeader.UserName = "tal";
secHeader.Password = "giladi";
sayHello.SecurityHeaderValue = secHeader;
וזהו... פשוט נקרא לשירות:
string result = sayHello.HelloWorldSecure();
* אם אנחנו רוצים שהשירות יהיה מאובטח גם בעזרת SSL,(בהנחה שיש לכם תעודה והגדרתם אותה לשרת)
פשוט נעשה מה שאנחנו עושים בדף ווב רגיל,
נוסיף שורה בסרביס עצמו, בתוך הפונקציה שלנו:
if (!HttpContext.Current.Request.IsSecureConnection)
{
return "Please use secure connection!";
}
להורדת הפרוייקט