天天看點

C#調用Web Service時的身份驗證

        在項目開發,我們經常會使用WebService,但在使用WebService時我們經常會考慮以下問題:怎麼防止别人通路我的WebService?從哪裡引用我的WebService?對于第一個問題,就涉及到了WebService是安全問題,因為我們提供的WebService不是允許所有人能引用 的,可能隻允許本公司或者是通過授權的人才能使用的。那怎麼防止非法使用者通路呢?很容易想到通過一組使用者名與密碼來防止非法使用者的調用 。

       在System.Net中提供了一個NetworkCredential,通過它我們可以在網絡中提供一個憑證,隻有獲得該憑證的使用者才能通路相應的服務的權限。在這裡我們也使用NetworkCredential。在NetworkCredential中,我們通過提供WebService釋出所在的伺服器名稱,以及登入伺服器并調用該WebService的使用者名及密碼(在IIS中配置)。

在調用WebService時設定其Credential屬性,把上面得到的Credential憑證指派給它,這樣隻有使用提供的使用者名及密碼才能調用WebService服務了而其他使用者則無法通路,這樣就能能滿足防止WebService被别人調用了。

       至于主機名,使用者名及密碼,對于B/S可以通過webconfig來配置,對于C/S可以使用應用程式配置檔案。這樣就能靈活地配置了。

如下以C/S為例來說明,首先我們提供一個伺服器網絡憑證,然後通過WebRequest來驗證連接配接是否成功。當然了,為了儲存使用者名與密碼等的安全,可以對其進行加密等手段來保證其安全。

以下是主要源代碼:

C#調用Web Service時的身份驗證
C#調用Web Service時的身份驗證

 1

C#調用Web Service時的身份驗證

        /// <summary>

 2

C#調用Web Service時的身份驗證

        /// 伺服器網絡憑證

 3

C#調用Web Service時的身份驗證

        /// </summary>

 4

C#調用Web Service時的身份驗證

        /// <returns></returns>

 5

C#調用Web Service時的身份驗證

        public static NetworkCredential MyCred()

 6

C#調用Web Service時的身份驗證

        {

 7

C#調用Web Service時的身份驗證

            string loginUser = Properties.Settings.Default.UserName;//使用者名

 8

C#調用Web Service時的身份驗證

            string loginPSW = Properties.Settings.Default.UserPSW;//密碼

 9

C#調用Web Service時的身份驗證

            string loginHost = Properties.Settings.Default.HostName;//主機名,可以是IP位址,也可以伺服器名稱

10

C#調用Web Service時的身份驗證

            NetworkCredential myCred = new NetworkCredential(loginUser,loginPSW, loginHost);

11

C#調用Web Service時的身份驗證

            //NetworkCredential myCred = new NetworkCredential("username", "123456", "yourip");//"username", "123456", "yourservername"

12

C#調用Web Service時的身份驗證

            return myCred;

13

C#調用Web Service時的身份驗證

        }

14

C#調用Web Service時的身份驗證

15

C#調用Web Service時的身份驗證

        /// 驗證是否成功連接配接到伺服器,若連接配接成功,則傳回TRUE

16

C#調用Web Service時的身份驗證

17

C#調用Web Service時的身份驗證

        /// <param name="url">伺服器WebService URL</param>

18

C#調用Web Service時的身份驗證

19

C#調用Web Service時的身份驗證

        public static bool Credential(string url)

20

C#調用Web Service時的身份驗證

21

C#調用Web Service時的身份驗證

           //定義局部變量

22

C#調用Web Service時的身份驗證

           string url = G_Url;//2009-02-25 陳輝聰  伺服器驗證隻驗證到機器

23

C#調用Web Service時的身份驗證

24

C#調用Web Service時的身份驗證

            try

25

C#調用Web Service時的身份驗證

            {

26

C#調用Web Service時的身份驗證

                if (myWebResponse == null)

27

C#調用Web Service時的身份驗證

                {

28

C#調用Web Service時的身份驗證

                    WebRequest myWebRequest = WebRequest.Create(url);//根據URL建立一個連接配接請求

29

C#調用Web Service時的身份驗證

                    myWebRequest.Credentials = MyCred();//擷取驗證的憑證,這是最重要的一句

30

C#調用Web Service時的身份驗證

                    myWebRequest.Timeout = 20000;//機關為毫秒

31

C#調用Web Service時的身份驗證

32

C#調用Web Service時的身份驗證

                    myWebResponse = myWebRequest.GetResponse();//傳回連接配接成功時的資訊

33

C#調用Web Service時的身份驗證

                }

34

C#調用Web Service時的身份驗證

            }

35

C#調用Web Service時的身份驗證

            catch (WebException wex)//無法連接配接到伺服器,可能是因為伺服器錯誤或使用者名與密碼錯誤

36

C#調用Web Service時的身份驗證

37

C#調用Web Service時的身份驗證

                if (myWebResponse != null)//毀銷

38

C#調用Web Service時的身份驗證

39

C#調用Web Service時的身份驗證

                    myWebResponse.Close();

40

C#調用Web Service時的身份驗證

                    myWebResponse = null;

41

C#調用Web Service時的身份驗證

42

C#調用Web Service時的身份驗證

43

C#調用Web Service時的身份驗證

                return false;

44

C#調用Web Service時的身份驗證

45

C#調用Web Service時的身份驗證

            catch (Exception ex)

46

C#調用Web Service時的身份驗證

47

C#調用Web Service時的身份驗證

                if (myWebResponse != null)

48

C#調用Web Service時的身份驗證

49

C#調用Web Service時的身份驗證

50

C#調用Web Service時的身份驗證

51

C#調用Web Service時的身份驗證

52

C#調用Web Service時的身份驗證

53

C#調用Web Service時的身份驗證

54

C#調用Web Service時的身份驗證

55

C#調用Web Service時的身份驗證

56

C#調用Web Service時的身份驗證

            finally

57

C#調用Web Service時的身份驗證

58

C#調用Web Service時的身份驗證

59

C#調用Web Service時的身份驗證

60

C#調用Web Service時的身份驗證

            return true;

61

C#調用Web Service時的身份驗證

62

C#調用Web Service時的身份驗證

63

C#調用Web Service時的身份驗證

       private static WS_Webasic.WS_Webasic webasic =null;//實作華WS_Webasic.WS_Webasic 

64

C#調用Web Service時的身份驗證

65

C#調用Web Service時的身份驗證

66

C#調用Web Service時的身份驗證

        /// WS_Webasic初始化

67

C#調用Web Service時的身份驗證

68

C#調用Web Service時的身份驗證

        public static WS_Webasic.WS_Webasic WS_Webasic

69

C#調用Web Service時的身份驗證

70

C#調用Web Service時的身份驗證

            get

71

C#調用Web Service時的身份驗證

72

C#調用Web Service時的身份驗證

                if (webasic == null)//若webasic 為空,則重新執行個體化,這樣可以減少驗證的時間,提高效率

73

C#調用Web Service時的身份驗證

74

C#調用Web Service時的身份驗證

                    //webasic = new ZEDI.WS_Webasic.WS_Webasic();

75

C#調用Web Service時的身份驗證

                    //wsBool = Credential(webasic.Url);//URL改為伺服器位址 2009-02-25 陳輝聰 [email protected]

76

C#調用Web Service時的身份驗證

                    wsBool = Credential(G_Url); 

77

C#調用Web Service時的身份驗證

                    if (wsBool == true)  //伺服器連接配接驗證通過

78

C#調用Web Service時的身份驗證

                    {

79

C#調用Web Service時的身份驗證

                        webasic = new WS_Webasic.WS_Webasic();//執行個體化

80

C#調用Web Service時的身份驗證

                        webasic.Credentials = MyCred();//得到伺服器連接配接憑證,這樣該WebService可以放心的連接配接了

81

C#調用Web Service時的身份驗證

                    }

82

C#調用Web Service時的身份驗證

83

C#調用Web Service時的身份驗證

                return webasic;

84

C#調用Web Service時的身份驗證

85

C#調用Web Service時的身份驗證
C#調用Web Service時的身份驗證

注:

(1)必須引用 System.Net;

(2)對WebService發通路,在IIS裡取消匿名通路權限,若允許匿名通路,就沒有必須提供驗證憑證了。IIS裡怎麼取消匿名通路 權限請參照IIS相關文章,這裡不在累贅。

驗證是有時速度會比較慢,主要是因為myWebResponse = myWebRequest.GetResponse();

上一篇: eclipse快捷鍵
下一篇: 做人的信念