精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

WCF安全之基于自定義聲明授權策略

開發 開發工具
本文將介紹WCF安全之基于自定義聲明授權策略,有時我們需要做到對不同的用戶授予不同的操作契約的訪問,這就是本文討論的重點。

背景

我們認為WCF可以使用自定的義的用戶名密碼方式限制對服務的訪問和加密,有可能存在這樣一種情況,比如一個協定中存在多個操作,即一個服務契約中包含多個操作契約,如果我們還希望在同一用戶訪問當前服務契約的時候,更進一步,可以讓我們做到對不同的用戶授予不同的操作契約的訪問,直白一點,比如有兩個用戶admin、admin2,admin可以訪問服務契約中的兩個操作契約,但是admin2只能訪問其中一個,本示例將實現這種需求,在以下的示例中,服務:IUserData 中包含三個操作契約,我們將對admin、admin2 這兩個用戶授予不同的操作契約的訪問權限,在客戶使用不同的用戶調用服務后,服務器將打印當前的請求服務的用戶、請求的資源、服務器對聲明的檢查、檢查結果等數據。

開始

首先我們建立一個自定義的基于服務授權訪問檢查的管理器,CustomServiceAuthorizationManager,首先看代碼:

  1. public class CustomServiceAuthorizationManager : ServiceAuthorizationManager  
  2.     {  
  3.         protected override bool CheckAccessCore(OperationContext operationContext)        
  4.         {  
  5.             string action = operationContext.RequestContext.RequestMessage.Headers.Action;  
  6.             Console.ForegroundColor = ConsoleColor.Red;  
  7.             Console.WriteLine("/--分割線--嘎嘎-------------------------------------------/");  
  8.             Console.ForegroundColor = ConsoleColor.White;  
  9.             Console.WriteLine("請求的資源,URI:{0}", action);  
  10.             foreach (ClaimSet cs in operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets)  
  11.             {                 
  12.                 if (cs.Issuer == ClaimSet.System)//如果此聲明是應用程序頒發的。  
  13.                 {  
  14.                     foreach (Claim claim in cs.FindClaims("net.tcp://UserDataService.IUserData/", Rights.PossessProperty))  
  15.                     {  
  16.                         Console.WriteLine("服務器聲明檢查,URI:{0}", action);  
  17.                         if (claim.Resource.ToString() == action)  
  18.                         {  
  19.                             Console.WriteLine("通過,URI:{0}", action);  
  20.                             return true;  
  21.                         }  
  22.                     }  
  23.                 }  
  24.             }  
  25.             Console.WriteLine("不通過,URI:{0}", action);  
  26.             return false;  

1、在上面的代碼中,我們首先建立了一個繼承自 System.ServiceModel.ServiceAuthorizationManager,并重寫了其CheckAccessCore的檢查方法,或者有朋友會問,為什么不直接使用ServiceAuthorizationManager類呢?是的,沒錯,ServiceAuthorizationManager是提供自定義授權訪問檢查的類,但是,ServiceAuthorizationManager類本身并不對任何聲明進行評估,換句話說,此類不執行任何基于自定義聲明授權的檢查,在默認情況下,所有服務都是可以訪問的,顯示,這不符合我們本次示例的業務需求。

2、ServiceAuthorizationManager類共有三個可供重寫的方法,分別為:

(1)bool CheckAccess(OperationContext operationContext)

(2)bool CheckAccess(OperationContext operationContext, ref Message message)

(3)bool CheckAccessCore(OperationContext operationContext) 


但是,實際上,前兩個方法都是通過調用bool CheckAccessCore(OperationContext operationContext)  來實現對自定義授權聲明的評估,所以,我們應該直接重寫CheckAccessCore而不是前兩個方法。

3、在重寫的CheckAccessCore方法內,首先通過當前操作的上下文對象獲得了當前客戶端所請求的資源定位符Action,接著,馬上調用自定義授權聲明頒發管理器,把當前用戶的授權策略聲明集添加到服務安全上下文,并檢查此授權策略聲明集是否為當前應用程序所頒發,如果是當前應用程序所頒發,則查找當前授權策略聲明中一個名為:“net.tcp://UserDataService.IUserData/”的聲明,最后,服務器再檢查如果用戶所請求的資源存在于此聲明中,剛授權通過,否則服務將拒絕客戶端所請求的資源。

自定義授權策略聲明集管理器


1、為了完成此次基于自定義授權策略聲明的服務器授權檢查, 我們需要構造自已的授權策略聲明集管理器,代碼如下:

  1. CustomAuthorizationPolicy  
  2. public class CustomAuthorizationPolicy : IAuthorizationPolicy  
  3.     {  
  4.         string id = string.Empty;  
  5.         public CustomAuthorizationPolicy()  
  6.         {  
  7.             id = new Guid().ToString();//每個聲明集都是一個唯一的  
  8.         }  
  9.  
  10.         /// <summary> 
  11.         /// 評估用戶是否符合基于此授權策略的聲明  
  12.         /// </summary> 
  13.         /// <param name="evaluationContext"></param> 
  14.         /// <param name="state"></param> 
  15.         /// <returns></returns> 
  16.         public bool Evaluate(EvaluationContext evaluationContext, ref object state)  
  17.         {  
  18.             bool flag = false;  
  19.             bool r_state = false;  
  20.             if (state == null) {tate = r_state;} else  { r_state = Convert.ToBoolean(state);}  
  21.             if (!r_state)  
  22.             {  
  23.                 IList<Claim> claims = new List<Claim>();//實體聲明集  
  24.                 foreach (ClaimSet cs in evaluationContext.ClaimSets)  
  25.                 {  
  26.                     foreach (Claim claim in cs.FindClaims(ClaimTypes.Name, Rights.PossessProperty))  
  27.                     {                         
  28.                         Console.WriteLine("用戶:{0}", claim.Resource);  
  29.                         foreach (string str in GetOprationList(claim.Resource.ToString()))  
  30.                         {  
  31.                             claims.Add(new Claim("net.tcp://UserDataService.IUserData/", str, Rights.PossessProperty));  
  32.                             Console.WriteLine("授權的資源:{0}", str);  
  33.                         }                         
  34.                     }  
  35.                 }  
  36.                 evaluationContext.AddClaimSet(this, new DefaultClaimSet(Issuer, claims));r_state = true;flag = true;  
  37.             }  
  38.             else{flag = true;}  
  39.             return flag;  
  40.         }  
  41.  
  42.         /// <summary> 
  43.         /// 賦予用戶聲明權限  
  44.         /// </summary> 
  45.         /// <param name="username"></param> 
  46.         /// <returns></returns> 
  47.         private static IEnumerable<string> GetOprationList(string username)  
  48.         {  
  49.             IList<string> lists = new List<string>();  
  50.             if (username == "admin")  
  51.             {  
  52.                 lists.Add("net.tcp://UserService.IUserData/GetData");  
  53.                 lists.Add("net.tcp://UserService.IUserData/GetUserExtensionXElement");  
  54.             }  
  55.             else if (username == "admin2")  
  56.             {  
  57.                 lists.Add("net.tcp://UserService.IUserData/GetData");  
  58.             }  
  59.             return lists;  
  60.         }  
  61.  
  62.         #region IAuthorizationComponent 成員/屬性實現  
  63.         public ClaimSet Issuer  
  64.         {  
  65.             get { return ClaimSet.System; }  
  66.         }  
  67.         public string Id  
  68.         {  
  69.             get { return id; }  
  70.         }  
  71.         #endregion  
  72.     } 

2、首先,我們建立了一個類CustomAuthorizationPolicy繼承自IAuthorizationPolicy接口,IAuthorizationPolicy中定義了一組用于對用戶進行授權的規則,規則相當簡單,除了兩個屬性和一個授權規則檢查的方法,再沒有其它。

3、在類的一開始,我們給每個即將進行授權的客戶定義了一個聲明集,并給了一個唯一的標識(GUID),

4、實現了bool Evaluate(EvaluationContext evaluationContext, ref object state),在 Evaluate中,我們通過當前經過評估的授權策略的結果上下文對象獲取了一個ClaimSets對象,ClaimSets包含了一組經過評估的獲取與授權策略關聯的聲明集,實際上,包含了客戶端調用服務前添加的用戶名,這個用戶名是經過了上一章的自定義用戶名密碼訪問服務的驗證程序驗證后的用戶名,所以,我們可基于此用戶名對其權限進行分配,即給他一個可訪問服務操作的聲明。

5、添加聲明,在上面的代碼中,有一個方法:IEnumerable<string> GetOprationList(string username),在第4點中, bool Evaluate方法傳入一個用戶名,然后,GetOprationList方法將對這個用戶進行檢查并給其添加預先定義的聲明,當然,這個檢查你可以在持久化介質中做,比如數據庫,你大可將你的所有服務操作都做成基于角色的訪問的聲明,現在這里只是一個示例,所以沒有必要做得很靈活,當然,我也不推薦你那樣做,除非真有必要,我覺得效率上會有很大的問題。

6、不論這個用戶的權限如何,最后, Evaluate方法都會在將一個默認的聲明添加到當前當前經過評估的授權策略的結果上下文對象中,

這一句:evaluationContext.AddClaimSet(this, new DefaultClaimSet(Issuer, claims));

7、然后,再由前面定義的服務授權策略管理器對這個聲明和用戶所請求的資源進行檢查,以決定是否對該用戶所請求的資源授予其訪問權限。

配置授權策略管理器和授權聲明集管理器

1、在上面的代碼完成以后,我們還需要在服務器配置文件中進行相應的設置,好讓我們的代碼正常工作,配置比較簡單,如下:

  1. <behaviors> 
  2.       <serviceBehaviors> 
  3.           <serviceCredentials> 
  4.             <serviceCertificate findValue="192168168151service" 
  5.                                  x509FindType="FindBySubjectName" 
  6.                                  storeLocation="LocalMachine" 
  7.                                  storeName="My"/> 
  8.             <userNameAuthentication  customUserNamePasswordValidatorType="UserDataServcie.CustomUserPassword,UserDataServcie" userNamePasswordValidationMode="Custom"/> 
  9.           </serviceCredentials> 
  10.           <serviceAuthorization serviceAuthorizationManagerType="UserDataServcie.CustomServiceAuthorizationManager,UserDataServcie"> 
  11.             <authorizationPolicies> 
  12.               <add policyType="UserDataServcie.CustomAuthorizationPolicy,UserDataServcie"/> 
  13.             </authorizationPolicies> 
  14.           </serviceAuthorization> 
  15. </behavior> 

2、其中紅色部分是對 授權策略管理器和授權聲明集的配置,相當的簡單,現在讓我們來測試一下,客戶端代碼如下:

            

  1. UserDataClient client = new UserDataClient();  
  2.             //模擬admin用戶調用  
  3.             client.ClientCredentials.UserName.UserName = "admin";  
  4.             client.ClientCredentials.UserName.Password = "admin";  
  5.             Console.WriteLine("正在開始調用GetData方法");  
  6.             string msg = client.GetData(100);  
  7.             Console.WriteLine("調用結果:{0}", msg);  
  8.             Console.WriteLine("正在開始調用GetUserExtensionXElement方法");  
  9.             XElement xe = client.GetUserExtensionXElement(null);  
  10.             Console.WriteLine("調用成功,開始打印消息.");  
  11.             Console.ForegroundColor = ConsoleColor.Red;  
  12.             Console.WriteLine("==================================");  
  13.             Console.WriteLine(xe.Value);  
  14.             client.Close();  
  15.             //模擬admin2用戶調用  
  16.             client = new UserDataClient();  
  17.             Console.WriteLine("-----------------------------------------------------------------");  
  18.             client.ClientCredentials.UserName.UserName = "admin2";  
  19.             client.ClientCredentials.UserName.Password = "admin";  
  20.             Console.WriteLine("正在開始調用GetData方法");  
  21.             string msg2 = client.GetData(200);  
  22.             Console.WriteLine("調用結果:{0}", msg2);  
  23.             Console.WriteLine("正在開始調用GetUserExtensionXElement方法");  
  24.             XElement xe2 = client.GetUserExtensionXElement(null); 

3、為了讓大家對服務器授權檢查是否成功有一個具體的認識,默認情況下,如果授權不通過,服務器將拋出一個SecurityAccessDeniedException異常,告訴客戶端,此調用未經服務器授權。我們也捕獲一下,并打印到控制臺:           

  1. XElement xele = null;  
  2.             try  
  3.             {  
  4.                 xele = base.Channel.GetUserExtensionXElement(xe);  
  5.             }  
  6.             catch (SecurityAccessDeniedException ex)  
  7.             {  
  8.                 Console.WriteLine(ex.Message);  
  9.             } 

結果

1、客戶端調用

2、服務器對客戶端進行聲明檢查

3、從上面的結果可以看出:

我們對admin用戶授予了對服務的兩個操作的聲明,所以兩個方法的服務調用都通過,

但是admin2用戶只授予了對服務的一個的聲明,所以當第其調用第二個操作的時候,授權未通過。

從這里可以看出,WCF對于安全配置提供了非常靈活的方式,讓我們可以隨心所欲的對服務訪問進行授權,但是,并不是所有的安全策略用上,服務才是安全的,還是那句話,有多大量,吃多大碗飯,別浪費了,呵呵~~

博文作者:梁規曉博客(http://www.cnblogs.com/viter/)!

【編輯推薦】

  1. 使用ASP.NET AJAX調用WCF服務項模板
  2. 詳解自定義托管宿主WCF解決方案開發配置過程
  3. 詳解WCF可擴展框架中的行為擴展
  4. WCF中通過Dispose有效實現重用
  5. WCF開發基礎
責任編輯:彭凡 來源: cnblogs
相關推薦

2009-11-09 16:06:53

WCF自定義集合

2022-11-01 11:15:56

接口策略模式

2010-03-01 11:10:41

WCF綁定元素

2010-02-25 11:23:29

WCF返回自定義格式

2010-02-25 16:27:44

WCF擴展點

2010-03-01 09:56:21

WCF自定義集合類型

2010-02-24 14:59:52

WCF自定義過濾器

2021-08-09 10:31:33

自定義授權響應

2021-07-11 17:17:08

.NET 授權自定義

2022-04-01 15:59:22

SQLPostgreSQL審計

2009-12-22 11:29:27

WCF自定義集合類型

2010-03-02 18:01:07

WCF自定義消息篩選器

2023-08-10 17:14:52

鴻蒙自定義彈窗

2022-06-20 15:43:45

switch開關鴻蒙

2015-02-11 17:49:35

Android源碼自定義控件

2022-07-15 16:45:35

slider滑塊組件鴻蒙

2021-10-26 10:07:02

鴻蒙HarmonyOS應用

2022-06-30 14:02:07

鴻蒙開發消息彈窗組件

2011-08-02 11:17:13

iOS開發 View

2025-05-15 07:11:51

點贊
收藏

51CTO技術棧公眾號

69成人在线| 亚洲综合精品国产一区二区三区 | 成人夜晚看av| 国产亚洲欧美久久久久 | 久久久久久久久影视| 色欲av永久无码精品无码蜜桃| 久久精品主播| 欧美精品一区三区| 人妻av无码一区二区三区| 99久热在线精品视频观看| 欧美日韩一区二区免费在线观看| 一区二区三区四区视频在线| 天天操天天干天天操| 黑人巨大精品欧美一区| 欧美一区二区三区免费观看| 婷婷社区五月天| 精品一区在线| 精品久久久久久最新网址| 中文字幕第100页| 国产一二三在线| 亚洲欧美国产毛片在线| 欧美人与物videos另类| 亚洲第一页在线观看| 久久草av在线| 日韩美女激情视频| 国产精品二区一区二区aⅴ| 欧美电影免费| 亚洲视频在线观看免费| av2014天堂网| 日韩视频一二区| 欧美日韩成人一区二区| 各处沟厕大尺度偷拍女厕嘘嘘| 制服丝袜在线播放| 一区在线观看免费| 日韩欧美一区二区三区四区五区| 手机看片福利在线| 东方欧美亚洲色图在线| 2019国产精品视频| 97精品人妻一区二区三区在线 | 99精品视频国产| 日本黄色一区| 欧美性色综合网| 欧美 激情 在线| 欧美私密网站| 黄色精品在线看| 久久久久久久久久网| 久久久久黄久久免费漫画| 亚洲激情六月丁香| 男人草女人视频| 最新av在线播放| 亚洲黄色录像片| 女人床在线观看| 超碰人人在线| 亚洲欧美电影院| 中文字幕色呦呦| 图片区小说区亚洲| 亚洲在线视频免费观看| 日韩精品在线观看av| 色老头在线观看| 亚洲一区中文日韩| 黄色国产一级视频| 美脚恋feet久草欧美| 日本国产一区二区| 日韩中文字幕a| 电影91久久久| 欧美电影免费提供在线观看| 成人区人妻精品一区二| 琪琪久久久久日韩精品| 亚洲色图美腿丝袜| 国产精品69久久久久孕妇欧美| 色综合久久网| 美女撒尿一区二区三区| av资源吧首页| 丝袜亚洲精品中文字幕一区| 国产精品自拍偷拍| 国内老熟妇对白hdxxxx| 成年人午夜久久久| 日韩欧美亚洲在线| av在线播放国产| 午夜激情一区二区三区| www.国产区| 国产一区二区三区免费观看在线| 日韩美女主播在线视频一区二区三区| xxxwww国产| 成人羞羞网站入口| 欧美黑人xxxx| 黄色污污网站在线观看| 国产一区二区三区四区五区入口 | 国产精品第二页| 国产一区二区网站| 成人av在线播放网址| 日本最新一区二区三区视频观看| 国产网友自拍视频导航网站在线观看| 性感美女极品91精品| 精品亚洲一区二区三区四区| 91九色鹿精品国产综合久久香蕉| 精品夜色国产国偷在线| 亚洲av鲁丝一区二区三区| 亚洲少妇诱惑| 亚洲直播在线一区| 国产在线小视频| 亚洲国产乱码最新视频| 亚洲欧洲日本精品| 亚洲福利网站| 欧美激情欧美狂野欧美精品| 亚洲大尺度在线观看| 大美女一区二区三区| 无码免费一区二区三区免费播放 | 日本少妇毛茸茸| 久久久久久久久久久久久久| 热门国产精品亚洲第一区在线| 国产成人精品亚洲精品色欲| 国产片一区二区| 日韩精品―中文字幕| 麻豆精品一区| 爽爽爽爽爽爽爽成人免费观看| 成人毛片18女人毛片| 国产精品亚洲专一区二区三区| 亚洲区一区二区三区| 天天综合av| 亚洲电影在线观看| 欧美在线视频第一页| 免费欧美在线视频| 日韩久久不卡| 国产精品一区二区av影院萌芽| 精品国产乱子伦一区| 91麻豆免费视频网站| 精品一区二区三区视频在线观看| 日韩欧美精品一区二区| 美女网站在线看| 精品福利一区二区三区 | 日本综合在线| 91福利小视频| 国产精品无码一区二区三区| 国产日韩欧美一区| 国产伦精品一区二区三毛| 中文字幕资源网在线观看| 在线播放中文一区| 波多野结衣欲乱| 美女爽到高潮91| 手机看片福利永久国产日韩| 中文字幕成在线观看| 国产视频自拍一区| 日韩欧美在线观看免费| 久久女同互慰一区二区三区| 免费在线a视频| 亚洲另类春色校园小说| 青草热久免费精品视频 | 国产精品对白久久久久粗| 欧美日韩第一视频| www.香蕉视频| 亚洲成av人片在线观看无码| 亚洲 欧美 日韩在线| 亚洲经典视频在线观看| 精品日韩美女| 你懂得影院夜精品a| 在线视频日韩精品| 国产视频第二页| 亚洲一级不卡视频| 国产白袜脚足j棉袜在线观看 | 亚洲一级二级三级| 丰满少妇一区二区三区| 日韩av中文字幕一区二区 | 欧美一区久久| 国产精品日韩一区二区三区| 三妻四妾的电影电视剧在线观看| 亚洲免费精彩视频| 国产精品sm调教免费专区| 国产精品三级电影| 台湾佬美性中文| 一区二区精品| 图片区小说区区亚洲五月| 国产一区二区三区免费观看在线 | 日本免费黄色小视频| 久草在线综合| 国产精国产精品| 1区2区3区在线视频| 亚洲精品成人免费| 日韩中文字幕在线观看视频| 国产精品欧美经典| 又大又长粗又爽又黄少妇视频| 在线亚洲一区| 一区不卡字幕| 欧美日韩一区二区三区四区不卡 | 97精品人妻一区二区三区香蕉| 亚洲在线视频一区| 性の欲びの女javhd| 国产91对白在线观看九色| 激情网站五月天| 欧美三区不卡| 日韩一区国产在线观看| 亚洲免费一区三区| 国产suv精品一区二区三区88区| 国产网站在线免费观看| 亚洲欧洲美洲在线综合| a级片在线视频| 一本大道久久a久久综合| 潘金莲一级黄色片| 久久新电视剧免费观看| 黑人无套内谢中国美女| 日本va欧美va精品| 精品视频免费在线播放| 亚洲啊v在线观看| 欧美日韩国产不卡在线看| 97久久超碰| 91久久精品一区| 最新日韩三级| 久久久亚洲网站| 国产不卡在线| 国产一区二区三区视频在线观看| 免费国产精品视频| 日韩欧美国产综合| 一级淫片免费看| 91福利资源站| 成人午夜视频在线播放| 亚洲成人av电影在线| 波多野结衣亚洲色图| 国产精品区一区二区三区| 欧美丰满少妇人妻精品| 国产成人在线视频网站| 欧美一级特黄aaa| 蜜臀久久99精品久久久画质超高清| 91精品国产91久久久久麻豆 主演| 香蕉视频官网在线观看日本一区二区| 日韩精品第一页| 久草在线成人| 久久99精品久久久久久久久久| 一区二区在线免费播放| 91久久综合亚洲鲁鲁五月天| 国产乱子精品一区二区在线观看| 国产成人黄色av| 日本免费久久| 日韩免费视频在线观看| 自拍偷拍欧美视频| 国产99久久久欧美黑人| a一区二区三区| 日产精品久久久一区二区福利| 草草在线视频| 欧美综合第一页| 一区二区精品伦理...| 欧美一级免费看| 国产黄大片在线观看| 欧美一级成年大片在线观看| 交100部在线观看| 欧美一级大片视频| 日本成人伦理电影| 国产精品日韩在线一区| 亚洲男人在线| 亚洲一区精品电影| 伊人精品综合| 久久国产精品99久久久久久丝袜| 天堂综合网久久| 日韩av一区二区三区美女毛片| 精品免费av| 手机成人av在线| 亚洲无线视频| 日韩精品―中文字幕| 日日夜夜精品视频天天综合网| 国产精品天天av精麻传媒| 免费在线观看日韩欧美| 天天操精品视频| 成人免费毛片片v| 白白色免费视频| 国产精品超碰97尤物18| 久久久久香蕉视频| 一本久久精品一区二区| 国产一区二区三区在线观看| 精品久久久久久亚洲综合网| 日本电影一区二区在线观看| 中文字幕一区二区精品| 三级福利片在线观看| 1769国内精品视频在线播放| 456成人影院在线观看| 91亚洲精华国产精华| 看全色黄大色大片免费久久久| 欧美日韩精品免费看| 91精品精品| 国产91对白刺激露脸在线观看| 美女视频网站久久| a级片在线观看视频| 久久精品免费在线观看| 国产精品 欧美激情| 欧美日韩亚洲91| 亚洲天堂中文网| 亚洲高清福利视频| 在线观看h片| 久久久久久久久亚洲| 精品176极品一区| 国严精品久久久久久亚洲影视| 日韩精品1区| 97视频在线免费| 美女在线观看视频一区二区| 日本泡妞xxxx免费视频软件| 国产香蕉久久精品综合网| 免费在线观看日韩| 欧美视频三区在线播放| 亚洲欧美强伦一区二区| 色哟哟网站入口亚洲精品| 波多野结衣久久| 成人黄色在线免费| 国产精品欧美在线观看| 欧美做暖暖视频| 蜜乳av一区二区| 公侵犯人妻一区二区三区| 亚洲最新在线观看| 亚洲在线观看av| 亚洲美女www午夜| 国精产品一区一区三区mba下载| 国产精品亚洲欧美导航| 偷窥自拍亚洲色图精选| 丁香六月激情婷婷| 国产裸体歌舞团一区二区| 日本成人午夜影院| 黑人巨大精品欧美一区免费视频 | 国产亚洲欧洲在线| 色黄视频在线观看| 国产日韩三区| 欧美日韩爆操| 精产国品一区二区三区| 最新日韩av在线| 中国a一片一级一片| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 成人性生活视频免费看| 国产成人精品在线看| 日本天堂中文字幕| 欧美一区二区三区四区五区 | 国产亚洲视频一区| 欧美国产精品一区二区| 夜夜爽妓女8888视频免费观看| 日韩电影网在线| 乱人伦视频在线| 国产富婆一区二区三区 | 色哟哟精品视频| 国产欧美日韩精品在线| 中文字幕xxxx| 亚洲欧美激情视频| 欧美黑人一区| 日本一区二区三区视频免费看| 葵司免费一区二区三区四区五区| 免费看黄色aaaaaa 片| 色综合久久综合网欧美综合网| 五月婷婷六月色| 57pao精品| 怕怕欧美视频免费大全| 欧美精品成人网| 欧美韩国日本一区| 在线播放成人av| 久久久国产精品视频| 久久中文字幕一区二区| 黄色a级片免费看| 不卡一卡二卡三乱码免费网站| 日韩三级视频在线播放| 亚洲护士老师的毛茸茸最新章节| 国产va在线视频| 欧美一区视久久| 丝袜美腿亚洲一区二区图片| 任你操精品视频| 欧美一区二区三区系列电影| 不卡av免费观看| 欧美一区二区三区四区五区六区| 日日骚欧美日韩| 黄视频网站免费看| 精品福利一二区| 国产欧美一区二区三区精品酒店| 亚洲国产精品视频一区| 国产毛片精品国产一区二区三区| 国产性猛交普通话对白| 亚洲九九九在线观看| 日韩黄色三级在线观看| 国产爆乳无码一区二区麻豆| www国产成人| 一级黄色片在线| 久久免费成人精品视频| 国产日产一区| 麻豆传媒在线看| 欧美丝袜一区二区| 成人在线视频亚洲| 精品乱子伦一区二区三区| 青青青爽久久午夜综合久久午夜| 在线观看成人毛片| 亚洲人在线视频| 日韩精品一区二区三区中文在线 | 亚洲视频视频在线| 日韩精品免费视频一区二区三区 | 精品无码国模私拍视频| 日本一区二区成人在线| 丰满大乳国产精品| 国产精品久久9| 亚洲精品欧美| 成人精品一二三区| 日韩av影视在线| 国产乱码精品一区二区三区亚洲人| 噜噜噜久久亚洲精品国产品麻豆| 国产精品嫩草影院av蜜臀| 色婷婷视频在线| 成人久久一区二区| 久久久久.com| 精品成人免费视频| 久久国产精品首页| 精品香蕉视频|