<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [WCF權限控制]基于Windows用戶組的授權方式[下篇]

      為了讓讀者對基于Windows用戶組的授權具有深刻的認識,接下來我們通過一個簡單的事例來講解在真正的應用中該授權模式如何使用。對于接下來演示的事例,我們將采用Windows認證和授權。至于授權的最終實現,我們采用的是在服務方法上面應用PrincipalPermissionAttribute特性方式的聲明式授權。[源代碼從這里下載]

      目錄:
      步驟一、創建測試帳號
      步驟二、創建服務契約和服務
      步驟三、寄宿服務
      步驟四、創建客戶端程序

      步驟一、創建測試帳號

      在創建事例解決方案之前我們先完成相應的準備工作,創建兩個測試用的Windows帳號。假設兩個帳號的名稱分別為Foo和Bar,密碼為Password。然后將帳號Foo添加到管理員(Administrators)用戶組中

      步驟二、創建服務契約和服務

      我們依然沿用我們再熟悉不過的計算服務的例子,解決方案依然按照如下圖所示的結構來設計。整個解決方式包括四個項目:Contracts、Services、Hosting和Client。對于這樣的結構我們已經了解得夠多了,在這里沒有必要再贅言敘述了。

      clip_image001

      在實例解決方案的整個結構建立之后,我們分別在Contracts和Services項目中定義服務契約接口和服務類型。下面是契約接口ICalculator和服務CalculatorService的定義。而在CalculatorService類的Add方法中應用了PrincipalPermissionAttribute特性,并將Roles屬性設置成了Adminstrators,意味著該服務操作只能被管理員用戶組中的用戶調用。

      ICalculator:

         1: using System.ServiceModel;
         2: namespace Artech.WcfServices.Contracts
         3: {    
         4:     [ServiceContract(Namespace = "http://www.artech.com/")]
         5:     public interface ICalculator
         6:     {
         7:         [OperationContract]
         8:         double Add(double x, double y);
         9:     }   
        10: }

      CalculatorService:

         1: using System.Security.Permissions;
         2: using Artech.WcfServices.Contracts;
         3: namespace Artech.WcfServices.Services
         4: {   
         5:     public class CalculatorService : ICalculator
         6:     {
         7:         [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
         8:         public double Add(double x, double y)
         9:         {           
        10:             return x + y;
        11:         }
        12:     }
        13: } 

      步驟三、寄宿服務

      現在通過Hosting這個控制臺程序對上面創建的服務進行寄宿。下面給出的是整個寄宿程序的配置。從該配置我們可以看到,服務唯一的終結點采用的綁定類型為WS2007HttpBinding。而在默認的情況下,WS2007HttpBinding采用Message安全模式和Windows認證方式。此外,基于UseWindowsGroups安全主體權限模式的ServiceAuthorization服務行為被應用到了該服務上。

         1: <?xml version="1.0"?>
         2: <configuration>
         3:   <system.serviceModel>    
         4:     <services>
         5:       <service name="Artech.WcfServices.Services.CalculatorService" behaviorConfiguration="useWindowsGroupsAuthorization">
         6:         <endpoint address="http://127.0.0.1/calculatorservice" binding="ws2007HttpBinding" 
         7: contract="Artech.WcfServices.Contracts.ICalculator"/>
         8:       </service>
         9:     </services>
        10:     <behaviors>
        11:       <serviceBehaviors>
        12:         <behavior  name="useWindowsGroupsAuthorization">
        13:           <serviceAuthorization principalPermissionMode="UseWindowsGroups"/>
        14:         </behavior>
        15:       </serviceBehaviors>
        16:     </behaviors>
        17:   </system.serviceModel>
        18: </configuration>

      而服務寄宿的程序依然簡潔如故,僅僅包括正對寄宿服務類型的ServiceHost的創建和開啟而已。

         1: using System.ServiceModel;
         2: using Artech.WcfServices.Services;
         3: using System;
         4: namespace Artech.WcfServices.Hosting
         5: {
         6:     public class Program
         7:     {
         8:         static void Main(string[] args)
         9:         {
        10:             using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
        11:             {
        12:                 host.Open();
        13:                 Console.Read();
        14:             }
        15:         }
        16:       }
        17:   }

      步驟四、創建客戶端程序

      來到整個實例的最后一個步驟,我們將服務調用的客戶程序定義在Client項目中。整個實例演示的目的在于確認針對服務操作Add的授權根據Windows用戶組進行的,我們只需要關注被授權的服務操作是否被成功調用。為此,我寫了如下一個簡單的輔助性的方法Invoke。如果服務操作被成功執行,輸出“服務調用成功”,如果拋出異常則輸出“服務調用失敗”。

         1: static void Invoke(ICalculator calculator)
         2: {
         3:     try
         4:     {
         5:         calculator.Add(1,2);
         6:         Console.WriteLine("服務調用成功...");
         7:     }
         8:     catch (Exception ex)
         9:     {
        10:         Console.WriteLine("服務調用失敗...");
        11:     }
        12: }

      下面演示了完整的客戶端程序和響應的配置。整個程序體現了兩次針對相同服務操作的調用,而兩次服務調用采用的客戶端憑證分別是基于之前創建的兩個Windows帳號Foo和Bar。

      客戶端程序:

         1: using System.Net;
         2: using System.ServiceModel;
         3: using Artech.WcfServices.Contracts;
         4: namespace Artech.WcfServices.Clients
         5: {
         6:     class Program
         7:     {
         8:         static void Main(string[] args)
         9:         {
        10:  
        11:             ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorService");
        12:             NetworkCredential credential = channelFactory.Credentials.Windows.ClientCredential;
        13:             credential.UserName = "Foo";
        14:             credential.Password = "Password";
        15:             ICalculator calculator = channelFactory.CreateChannel();
        16:             Invoke(calculator);
        17:  
        18:             channelFactory = new ChannelFactory<ICalculator>("calculatorService");
        19:             credential = channelFactory.Credentials.Windows.ClientCredential;
        20:             credential.UserName = "Bar";
        21:             credential.Password = "Password";
        22:             calculator = channelFactory.CreateChannel();
        23:             Invoke(calculator);
        24:  
        25:             Console.Read();
        26:         }
        27:  
        28:     }
        29: }

      配置:

         1: <?xml version="1.0"?>
         2: <configuration>
         3:   <system.serviceModel>  
         4:     <client>
         5:       <endpoint name="calculatorService" address="http://127.0.0.1/calculatorservice" binding="ws2007HttpBinding" 
         6: contract="Artech.WcfServices.Contracts.ICalculator"/>
         7:     </client>   
         8:   </system.serviceModel>
         9: </configuration>

      由于調用的服務操作需要具有管理員權限采用調用,所以以Foo名義進行調用是沒有為題的,但是對于帳號Bar,由于權限不足將會調用失敗。而客戶端輸出的結果反映了這一點。

         1: 服務調用成功...
         2: 服務調用失敗...

      : 對于這個事例演示來說,服務操作只有具有管理員權限方能被正常調用。雖然我們創建的Windows帳號Foo在管理員用戶組中,但是如果你使用Vista、Windows Server 2008和Windows 7這三種操作系統,在UAC開啟的情況下,即使你以管理員運行我們的演示程序,Foo也不具有管理員權限。所以,你需要關閉UAC采用得到正確的執行結果,否則兩次調用都是輸出“服務調用失敗...”。

      [WCF權限控制]基于Windows用戶組的授權方式[上篇]
      [WCF權限控制]基于Windows用戶組的授權方式[下篇]

      posted @ 2011-07-02 22:58  Artech  閱讀(5711)  評論(23)    收藏  舉報
      主站蜘蛛池模板: 久久婷婷五月综合97色直播| 99久久无码一区人妻a黑| 亚洲欧美日韩第一页| 国内极度色诱视频网站| 亚洲男女羞羞无遮挡久久丫| 久久久久无码精品国产h动漫| 97亚洲色欲色欲综合网| 丁香五月激情综合色婷婷| 国产99视频精品免费视频76| 日本大片免A费观看视频三区| 日韩精品中文字幕第二页| 99久久精品免费看国产电影| 国产区成人精品视频| 成人片黄网站色大片免费| 黄色国产精品一区二区三区| 熟女一区二区中文字幕| 日夜啪啪一区二区三区| 精品熟女日韩中文十区| 无码人妻一区二区三区四区AV| 精品国产粉嫩一区二区三区| 人妻在线中文字幕| 亚洲色av天天天天天天| 赫章县| 国产精品自偷一区在线观看| 久久午夜无码免费| 亚洲人成电影在线天堂色| 亚洲一区二区三区水蜜桃| 亚洲粉嫩av一区二区黑人| 亚洲色大成网站www在线| 桐梓县| 午夜免费福利小电影| 免费国产高清在线精品一区| 最新国产精品拍自在线播放| 日韩毛片在线视频x| 草裙社区精品视频播放| 日韩精品一区二区三免费| 国产中文字幕一区二区| 伊人久久大香线蕉成人| 3d全彩无码啪啪本子全彩| 国产成人AV男人的天堂| 国产精品 无码专区|