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

轉自:http://www.anqn.com/dev/vc/2010-01-23/a09122769.shtml

?

????? 在項目開發,我們經常會使用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來驗證連接是否成功。當然了,為了保存用戶名與密碼等的安全,可以對其進行加密等手段來保證其安全。

 以下是主要源代碼:

  Code


  1?/**?
  2?///?服務器網絡憑證
  3?///?
  4?///?
  5?public?static?NetworkCredential?MyCred()
  6?{
  7?string?loginUser?=?Properties.Settings.Default.UserName;//用戶名
  8?string?loginPSW?=?Properties.Settings.Default.UserPSW;//密碼
  9?string?loginHost?=?Properties.Settings.Default.HostName;//主機名,可以是IP地址,也可以服務器名稱
  10?NetworkCredential?myCred?=?new?NetworkCredential(loginUser,loginPSW,?loginHost);
  11?//NetworkCredential?myCred?=?new?NetworkCredential("username",?"123456",?"yourip");//"username",?"123456",?"yourservername"
  12?return?myCred;
  13?}
  14?/**?
  15?///?驗證是否成功連接到服務器,若連接成功,則返回TRUE
  16?///?
  17?///?服務器WebService?URL
  18?///?
  19?public?static?bool?Credential(string?url)
  20?{
  21?//定義局部變量
  22?string?url?=?G_Url;//2009-02-25?陳輝聰?服務器驗證只驗證到機器
  23
  24?try
  25?{
  26?if?(myWebResponse?==?null)
  27?{
  28?WebRequest?myWebRequest?=?WebRequest.Create(url);//根據URL創建一個連接請求
  29?myWebRequest.Credentials?=?MyCred();//獲取驗證的憑證,這是最重要的一句
  30?myWebRequest.Timeout?=?20000;//單位為毫秒
  31
  32?myWebResponse?=?myWebRequest.GetResponse();//返回連接成功時的信息
  33?}
  34?}
  35?catch?(WebException?wex)//無法連接到服務器,可能是因為服務器錯誤或用戶名與密碼錯誤
  36?{
  37?if?(myWebResponse?!=?null)//毀銷
  38?{
  39?myWebResponse.Close();
  40?myWebResponse?=?null;
  41?}
  42
  43?return?false;
  44?}
  45?catch?(Exception?ex)
  46?{
  47?if?(myWebResponse?!=?null)
  48?{
  49?myWebResponse.Close();
  50?myWebResponse?=?null;
  51?}
  52
  53?return?false;
  54
  55?}
  56?finally
  57?{
  58?}
  59
  60?return?true;
  61?}
  62
  63?private?static?WS_Webasic.WS_Webasic?webasic?=null;//實現華WS_Webasic.WS_Webasic
  64
  65?/**?
  66?///?WS_Webasic初始化
  67?///?
  68?public?static?WS_Webasic.WS_Webasic?WS_Webasic
  69?{
  70?get
  71?{
  72?if?(webasic?==?null)//若webasic?為空,則重新實例化,這樣可以減少驗證的時間,提高效率
  73?{
  74?//webasic?=?new?ZEDI.WS_Webasic.WS_Webasic();
  75?//wsBool?=?Credential(webasic.Url);//URL改為服務器地址?2009-02-25?陳輝聰?chhuic@163.com
  76?wsBool?=?Credential(G_Url);
  77?if?(wsBool?==?true)?//服務器連接驗證通過
  78?{
  79?webasic?=?new?WS_Webasic.WS_Webasic();//實例化
  80?webasic.Credentials?=?MyCred();//得到服務器連接憑證,這樣該WebService可以放心的連接了
  81?}
  82?}
  83?return?webasic;
  84?}
  85?}

  注:

  (1)必須引用 System.Net;

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

  驗證是有時速度會比較慢,主要是因為myWebResponse = myWebRequest.GetResponse();時速度比較慢,若有更好的方法驗證網絡連接是否成功的話,請告訴我,呵呵。。。

  通過以上的實現,就實現了WebService的安全訪問問題,若還有更好的方法,不吝賜教

?

轉載于:https://www.cnblogs.com/wangpei/archive/2010/05/27/1745421.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379201.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遞歸-計算字符串長度(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; main.c #include <stdio.h>//該程序用遞歸計算字符串長度int strlen(const char* s) {if( s NULL ){return -1;}else if( *s \0 ){return 0;}else{return strlen(s1) 1;} }int m…

Java LinkedList void clear()方法與示例

LinkedList void clear()方法 (LinkedList void clear() method) This method is available in package java.util.Collection and here, Collection is an interface. 該方法在java.util.Collection包中可用&#xff0c;在這里&#xff0c; Collection是一個接口。 This metho…

Python-楊輝三角

在控制臺輸出如圖所示一個8層的楊輝三角。 楊輝三角介紹&#xff1a; 每個數等于它上方兩數之和 每行數字左右對稱&#xff0c;由1開始逐漸變大 第n行的數字有n項&#xff0c;將n取8 def yanghui(n):l[1,1]for x in range(1,n):for a in range(x):l[a]l[a]l[a1]l.insert(0,1)…

如何向妻子解釋OOD(轉)

前言 此文譯自CodeProject上<How I explained OOD to my wife>一文&#xff0c;該文章在Top Articles上排名第3&#xff0c;讀了之后覺得非常好&#xff0c;就翻譯出來&#xff0c;供不想讀英文的同學參考學習。 作者(Shubho)的妻子(Farhana)打算重新做一名軟件工程師(她…

不安全代碼和指針資料匯編

不安全代碼和指針&#xff08;C# 編程指南&#xff09;為了保持類型安全&#xff0c;默認情況下&#xff0c;C# 不支持指針運算。不過&#xff0c;通過使用 unsafe 關鍵字&#xff0c;可以定義可使用指針的不安全上下文。有關指針的更多信息&#xff0c;請參見主題指針類型。 注…

ffmpeg-從flv文件中提取AAC音頻數據保存為文件

AAC ADTS格式協議&#xff1a; 從flv文件中提取AAC音頻數據保存為文件。 如果需要詳細了解AAC ADTS格式&#xff0c;可以查詢文檔。 原文件&#xff1a; 提取aac文件&#xff1a; main.c #include <stdio.h> #include <libavutil/log.h>> #include <lib…

Python-統計《水調歌頭·明月幾時有》字符出現次數。

統計《水調歌頭明月幾時有》字符出現次數。 明月幾時有&#xff0c;把酒問青天。 不知天上宮闕&#xff0c;今夕是何年&#xff1f; 我欲乘風歸去&#xff0c;又恐瓊樓玉宇&#xff0c;高處不勝寒。 起舞弄清影&#xff0c;何似在人間&#xff01; 轉朱閣&#xff0c;低綺戶&am…

Linux網絡編程入門 (轉載)

(一)Linux網絡編程--網絡知識介紹 Linux網絡編程--網絡知識介紹客戶端和服務端 網絡程序和普通的程序有一個最大的區別是網絡程序是由兩個部分組成的--客戶端和服務器端. 客戶端 在網絡程序中&#xff0c;如果一個程序主動和外面的程序通信&#xff0c;那么我們…

在Python中將字符串拆分為字符數組

Given a string and we have to split into array of characters in Python. 給定一個字符串&#xff0c;我們必須在Python中拆分為字符數組。 將字符串拆分為字符 (Splitting string to characters) 1) Split string using for loop 1)使用for循環分割字符串 Use for loop t…

SQL表值函數和標量值函數的區別 [轉]

SQL表值函數和標量值函數的區別 寫sql存儲過程經常需要調用一些函數來使處理過程更加合理&#xff0c;也可以使函數復用性更強&#xff0c;不過在寫sql函數的時候可能會發現&#xff0c;有些函數是在表值函數下寫的有些是在標量值下寫的&#xff0c;區別是表值函數只能返回一個…

N Queen(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; main.c #include <stdio.h>/* 程序描述&#xff1a;輸出N*N中符合左右對角線與上下左右方向都沒被使用的位置在每一行的所有情況使用檢測左上角&#xff0c;正上角&#xff0c;右上…

kotlin 計算平方_Kotlin程序計算自然數之和

kotlin 計算平方Given a number number, and we have to calculate the sum of all natural numbers from 1 to number. 鑒于一些數字 &#xff0c;我們必須從1計算所有自然數的總和數量 。 Example: 例&#xff1a; Input:number 15Output:120用于計算Kotlin中自然數之和的…

Python-身份證核對

中華人民共和國居民身份證號碼由17 位數字和1位校驗碼組成。其中&#xff0c;前6位為所在地編號&#xff0c;第7~14 位為出生年月日&#xff0c;第15~17位為登記流水號&#xff0c;其中第17位偶數為女性&#xff0c;奇數為男性。校驗碼的生成規則如下: 將前面的身份證號碼17位數…

VC 加載套接字庫

//加載套接字庫 WORD wVersionRequested;//套接字庫版本信息 WSADATA wsaData; int err; wVersionRequested MAKEWORD(1,1); err WSAStartup(wVersionRequested,&wsaData); if(err ! 0){ //加載失敗 return; } if(LOBYTE(wsaData.wVersion) ! 1 || //判斷是不是所請求的…

統計各種字符個數

#include <stdio.h> #include <conio.h>int main(int argc, char * argv[]) {char ch;int letters 0, space 0, digit 0, others 0;printf("請輸入一組字符串:\n");while((chgetchar())!\n){if(ch>a && ch < z || ch >A &&…

樹存儲結構(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; LinkList.h LinkList.c 線性表 GTree.h #ifndef _GTREE_H_ #define _GTREE_H_typedef void GTree;//定義樹類型 typedef void GTreeData;//定義節點中存放數據的類型 typedef void (GTre…

Python-《twinkle twinkle little star》統計單詞出現次數

統計英文兒歌《twinkle twinkle little star》中&#xff0c;使用到的單詞及其出現次數。要求去除單詞大小寫的影響&#xff0c;不統計標點符號的個數&#xff0c;并按降序輸出。 Twinkle, twinkle, little star, How I wonder what you are! Up above the world so high, Like…

二元矩陣峰值搜索_好斗的牛(二元搜索)

二元矩陣峰值搜索A farmer has built a long barn with N stalls. The stalls are placed in a straight manner at positions from x1, x2, ...xN. But his cows (C) are aggressive and don’t want to be near other cows. To prevent cows from hurting each other, he wan…

WinForm Paenl里面添加Form

Form7 f7 new Form7();f7.TopLevel false;f7.Parent this.panel1;this.panel1.Controls.Add(f7);f7.Show();轉載于:https://www.cnblogs.com/Haibocai/archive/2012/10/30/2746003.html

跳躍表SkipList

跳躍表(Skip List)是一種隨機化數據結構&#xff0c;基于并聯的鏈表&#xff0c;其效率可比擬于二叉查找樹(對于大多數操作需要O(log n)平均時間)。 基本上&#xff0c;跳躍列表是對有序的鏈表增加上附加的前進鏈接&#xff0c;增加是以隨機化的方式進行的&#xff0c;所以在列…