第八篇:wcf安全
wcf提供了非常豐富的加密機制與審核機制,以保證對外提供的服務安全可靠。本文是簡單教程,所以只挑其中的一小部分來聊聊。
先來看看最簡單的windows認證。
所謂windows認證,是指客戶端訪問時,要提供服務端認可的windows使用者身份。
1、服務端
<?xmlversion
="1.0"
encoding
="utf-8"
?>
<
configuration
>
<
system.servicemodel
>
<
services
>
<
service
name
="server.dataprovider"
>
<
endpoint
address=""
binding
="nettcpbinding"
contract
="server.idata"
bindingconfiguration
="tcpbinding"
/>
<
host
>
<
baseaddresses
>
<
addbaseaddress
="net.tcp://localhost:8081/wcf"
/>
baseaddresses
>
host
>
service
>
services
>
<
bindings
>
<
nettcpbinding
>
<
binding
name
="tcpbinding"
>
<
security
mode
="message"
>
<
message
clientcredentialtype
="windows"
/>
security
>
binding
>
nettcpbinding
>
bindings
>
system.servicemodel
>
configuration
>
契約實現類我們修改一下,方便看到呼叫者的身份:
usingsystem;
using
system.servicemodel;
namespace
server
", operationcontext.current.servicesecuritycontext.windowsidentity.name);
} }
}2、客戶端
<?xmlversion
="1.0"
encoding
="utf-8"
?>
<
configuration
>
<
system.servicemodel
>
<
client
>
<
endpoint
binding
="nettcpbinding"
contract
="server.idata"
address
="net.tcp:"
name
="dataprovider"
bindingconfiguration
="tcp"
/>
client
>
<
bindings
>
<
nettcpbinding
>
<
binding
name
="tcp"
>
<
security
mode
="message"
>
<
message
clientcredentialtype
="windows"
/>
security
>
binding
>
nettcpbinding
>
bindings
>
system.servicemodel
>
configuration
>
然後是**,要指定訪問時客戶端使用的使用者名稱密碼:
usingsystem;
using
system.servicemodel;
using
system.servicemodel.channels;
namespace
client }
} 其中的指定的使用者名稱與密碼是服務端存在的乙個windows使用者。
ok,在兩台機器上分別執行服務端和客戶端,能夠正常完成呼叫,輸出「hello test-pc\test」,這個test-pc\test就是我們呼叫時傳遞的使用者身份,注意是「機器名\使用者名稱」的形式,如果是ad環境,那麼就是「域\使用者名稱」的形式。
如果給定乙個錯誤的使用者名稱密碼,則呼叫時會收到exception:
未處理的異常: system.servicemodel.security.securitynegotiationexception: 呼叫方未由服務進行身份驗證。---> system.servicemodel.faultexception: 無法滿足對安全令牌的請求,因為身份驗證失敗。
在 system.servicemodel.security.securityutils.throwifnegotiationfault(message message, endpointaddress target)
在 system.servicemodel.security.sspinegotiationtokenprovider.getnextoutgoingmessagebody(message incomingmessage, sspinegotiationtokenproviderstate sspistate)
是乙個身份驗證失敗的異常。
WCF簡單教程 1 入門
wcf是dotnet體系中很重要的一項技術,但是組內很多組員通過書籍自學的時候感覺涉及面太廣 配置檔案太複雜,新名詞太多 抓不到頭緒,有感於此,決定進行一次組內技術培訓,順便把培訓講義整理到blog上來。不求大而全,而是要讓初學者快速入門,因此想入例項入手,並刻意隱藏一些初期用不到的內容,以降低入門...
WCF簡單教程 1 入門
wcf是dotnet體系中很重要的一項技術,但是組內很多組員通過書籍自學的時候感覺涉及面太廣 配置檔案太複雜,新名詞太多 抓不到頭緒,有感於此,決定進行一次組內技術培訓,順便把培訓講義整理到blog上來。不求大而全,而是要讓初學者快速入門,因此想入例項入手,並刻意隱藏一些初期用不到的內容,以降低入門...
WCF簡單教程 4 資料契約
第四篇 用資料契約傳遞自定義資料物件 之前的演示中,我們一直都是在用string型別做引數和返回值,實際專案中肯定會傳遞自定義的資料型別。與webservice不同,wcf想傳遞自定義資料,必須要將其定義為資料契約。看乙個例子 using system using system.runtime.se...