久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

WCF4.0 –

 ThinkTank_引擎 2015-12-17

在REST架構(gòu)的WCF服務(wù)中,它不像一般的WCF服務(wù)綁定,,有配套的安全模式,,實(shí)現(xiàn)起來那么簡單。REST WCF服務(wù)只能在傳輸層加密,,而一般的WCF 服務(wù)可以在消息層加密,。因此 REST WCF服務(wù)啟用ASP.NET兼容模式后,它的安全是由ASP.NET來保證的,。本篇文章主要介紹在 REST WCF 中如何實(shí)現(xiàn)最簡單的 Username 驗(yàn)證,。

在SOAP協(xié)議的WCF中,可以通過SOAPHeader(MessageHeader)來實(shí)現(xiàn)用戶名密碼的傳輸,,早在WebService時(shí)代我們就這么用過了,。在REST WCF中,我們可以利用 HttpHeader 來完成這一目標(biāo),。 (你可不會(huì)想在每個(gè)服務(wù)契約里加上用戶和密碼的參數(shù)吧...)

首先在服務(wù)中加入如下方法用于校驗(yàn),,Header的信息:如果 Header 中 Authorization 的字符串不是"fangxing/123" 那么就將返回 405 MethodNotAllowed 的錯(cuò)誤。這個(gè)字符串的內(nèi)容可以自定義,,反正服務(wù)端根據(jù)某種規(guī)則檢查這個(gè)字符串,。

[c-sharp] view plaincopy
  1. private bool CheckAuthorization()  
  2. {  
  3.     var ctx = WebOperationContext.Current;  
  4.     var auth = ctx.IncomingRequest.Headers[HttpRequestHeader.Authorization];  
  5.     if (string.IsNullOrEmpty(auth) || auth != "fangxing/123")  
  6.     {  
  7.         ctx.OutgoingResponse.StatusCode = HttpStatusCode.MethodNotAllowed;  
  8.         return false;  
  9.     }  
  10.     return true;  
  11. }  

然后在每一個(gè)服務(wù)契約的實(shí)現(xiàn)中,都去調(diào)用它,。
[WebGet(UriTemplate = "All")]
public List<Task> GetTask()
{
    if (!CheckAuthorization())
        return null;
    return GetData();
}

[WebGet(UriTemplate = "{taskId}")]
public Task GetTaskById(string taskId)
{
    if (!CheckAuthorization())
        return null;
    return GetData().FirstOrDefault(t => t.Id==taskId);
}

現(xiàn)在的服務(wù),,如果直接通過瀏覽器訪問,,將得到 405 MethodNotAllowed 的錯(cuò)誤:


客戶端只要相應(yīng)的驗(yàn)證信加到 RequestHeader 中去,就可以訪問了,??蛻舳丝梢允褂脝卫J皆O(shè)計(jì) Client 對象。
這樣就不用每次調(diào)用都去加驗(yàn)證信息了,。

[c-sharp] view plaincopy
  1. var url = "http://localhost:3433/TaskService/All";  
  2. var client = new HttpClient();  
  3. client.DefaultHeaders.Add("Authorization", "fangxing/123");  
  4. var resp = client.Get(url);  

* 這里使用的是 Microsoft.Http.HttpClient (WCF REST Starter Kit) 而非 System.Net.WebClient 

回頭看服務(wù)端代碼,,每個(gè)服務(wù)實(shí)現(xiàn)中都需要加上 CheckAuthorization() 是不是很煩?
OK,,我們知道這個(gè) REST WCF服務(wù)是承載在一個(gè)Web Application上的, 通過往 RouteTable 中注冊 WebServiceHostFactory 來激活服務(wù)對象的,。 那么只要對這個(gè) WebServiceHostFactory 做些“手腳”,,就可以實(shí)現(xiàn)服務(wù)端驗(yàn)證的統(tǒng)一攔截,代碼如下,。(一般的 WCF 也可以利用此方法對 MessageHeader 進(jìn)行攔截校驗(yàn))

[c-sharp] view plaincopy
  1. public class SecureWebServiceHostFactory : WebServiceHostFactory  
  2. {  
  3.     protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)  
  4.     {  
  5.         var host = base.CreateServiceHost(serviceType, baseAddresses);  
  6.         host.Authorization.ServiceAuthorizationManager = new MyServiceAuthorizationManager();  
  7.         return host;  
  8.     }  
  9.   
  10.     public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)  
  11.     {  
  12.         var host = base.CreateServiceHost(constructorString, baseAddresses);  
  13.         host.Authorization.ServiceAuthorizationManager = new MyServiceAuthorizationManager();  
  14.         return host;  
  15.     }  
  16. }  
  17.   
  18. public class MyServiceAuthorizationManager : ServiceAuthorizationManager  
  19. {  
  20.     protected override bool CheckAccessCore(OperationContext operationContext)  
  21.     {  
  22.         var ctx = WebOperationContext.Current;  
  23.         var auth = ctx.IncomingRequest.Headers[HttpRequestHeader.Authorization];  
  24.         if (string.IsNullOrEmpty(auth) || auth != "fangxing/123")  
  25.         {  
  26.             ctx.OutgoingResponse.StatusCode = HttpStatusCode.MethodNotAllowed;  
  27.             return false;  
  28.         }  
  29.         return true;  
  30.     }  
  31. }  


RegisterRoutes 里的工廠類也需要相應(yīng)的修改下:
[c-sharp] view plaincopy
  1. var securewebServiceHostFactory = new SecureWebServiceHostFactory();  
  2. RouteTable.Routes.Add(new ServiceRoute("TaskService",  
  3.     securewebServiceHostFactory, typeof(TaskService)));  


這樣服務(wù)端代碼就可以去掉 CheckAuthorization() 而把驗(yàn)證工作都交給 SecureWebServiceHostFactory 了,。

 

這種驗(yàn)證方式,其實(shí)也是現(xiàn)在 Windows Auzer Access Control 的原型,。 只不過這個(gè) Authoriztion 的服務(wù)是專門的Services罷了,。
1. 客戶端先從發(fā)布令牌的服務(wù)獲取令牌; 2. 客戶端拿著令牌提交到現(xiàn)在的服務(wù),; 3.服務(wù)端將客戶端令牌拿到發(fā)布令牌的服務(wù)上校驗(yàn),。


源碼下載:http://download.csdn.net/download/fangxinggood/3686322


【REST WCF系列】
RESTful WCF Services (1) (入門)
RESTful WCF Services (2) (實(shí)現(xiàn)增,刪,,改,,查)
RESTful WCF Services (3) (Raw Stream)
RESTful WCF Services (4) (Basic Security)
RESTful WCF Services (實(shí)例) (并發(fā)同步服務(wù) SyncService)

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多