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

聊聊微服務架構中的用戶認證方案

開發 架構
今天主要涉及三方面內容,首先咱們回顧了基于 Session 的有狀態用戶認證解決方案,其次介紹了 JWT 與 JJWT 的使用,最后講解了利用 JWT 實現微服務架構認證的兩種方案,對產生的新問題也進行了梳理。

今天來聊聊微服務中一個重要的話題:如何設計微服務架構下的用戶認證方案。今天主要涉及三個方面的內容:

  • 傳統的用戶認證方案;
  • JWT 與 JJWT;
  • 基于網關的統一用戶認證。

傳統的用戶認證方案

我們直奔主題,什么是用戶認證呢?對于大多數與用戶相關的操作,軟件系統首先要確認用戶的身份,因此會提供一個用戶登錄功能。用戶輸入用戶名、密碼等信息,后臺系統對其進行校驗的操作就是用戶認證。用戶認證的形式有多種,最常見的有輸入用戶名密碼、手機驗證碼、人臉識別、指紋識別等,但其目的都是為了確認用戶的身份并與之提供服務。

圖片

用戶認證

在傳統的單體單點應用時代,我們會開發用戶認證的服務類,從登錄界面提交的用戶名密碼等信息通過用戶認證類進行校驗,然后獲取該用戶對象將其保存在 Tomcat 的 Session 中,如下所示:

圖片

單點應用認證方案

隨著系統流量的增高,單點應用以無法支撐業務運行,應用出現高延遲、宕機等狀況,此時很多公司會將應用改為 Nginx 軟負載集群,通過水平擴展提高系統的性能,于是應用架構就變成了這個樣子。

圖片

Java Web 應用集群

雖然改造后系統性能顯著提高,但你發現了么,因為之前用戶登錄的會話數據都保存在本地,當 Nginx 將請求轉發到其他節點后,因為其他節點沒有此會話數據,系統就會認為沒有登錄過,請求的業務就會被拒絕。從使用者的角度會變成一刷新頁面后,系統就讓我重新登錄,這個使用體驗非常糟糕。

我們來分析下,這個問題的根本原因在于利用 Session 本地保存用戶數據會讓 Java Web 應用變成有狀態的,在集群環境下必須保證每一個 Tomcat 節點的會話狀態一致的才不會出問題。因此基于 Redis 的分布式會話存儲方案應運而生,在原有架構后端增加 Redis 服務器,將用戶會話統一轉存至 Redis 中,因為該會話數據是集中存儲的,所以不會出現數據一致性的問題。

圖片

Redis 統一存儲用戶會話

但是,傳統方案在互聯網環境下就會遇到瓶頸,Redis 充當了會話數據源,這也意味著 Redis 承擔了所有的外部壓力,在互聯網數以億計的龐大用戶群規模下,如果出現突發流量洪峰,Redis 能否經受考驗就會成為系統的關鍵風險,稍有差池系統就會崩潰。

那如何解決呢?其實還有一種巧妙的設計,在用戶認證成功,后用戶數據不再存儲在后端,而改為在客戶端存儲,客戶端每一次發送請求時附帶用戶數據到 Web 應用端,Java 應用讀取用戶數據進行業務處理,因為用戶數據分散存儲在客戶端中,因此并不會對后端產生額外的負擔,此時認證架構會變成下面的情況。

圖片

客戶端存儲用戶信息

當用戶認證成功后,在客戶端的 Cookie、LocalStorage 會持有當前用戶數據,在 Tomcat 接收到請求后便可獲取用戶數據進行業務處理。但細心的你肯定也發現,用戶的敏感數據是未經過加密的,在存儲與傳輸過程中隨時都有泄密的風險,決不能使用明文,必須要對其進行加密。

那如何進行加密處理呢?當然,你可以自己寫加解密類,但更通用的做法是使用 JWT 這種標準的加密方案進行數據存儲與傳輸。

Json Web Token(JWT)介紹

無論是微服務架構,還是前后端分離應用,在客戶端存儲并加密數據時有一個通用的方案:Json Web Token(JWT),JWT是一個經過加密的,包含用戶信息的且具有時效性的固定格式字符串。下面這是一個標準的JWT字符串。

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJ1c2VySWRcIjoyLFwidXNlcm5hbWVcIjpcImxpc2lcIixcIm5hbWVcIjpcIuadjuWbm1wiLFwiZ3JhZGVcIjpcInZpcFwifSJ9.NT8QBdoK4S-PbnhS0msJAqL0FG2aruvlsBSyG226HiU

這段加密字符串由三部分組成,中間由點“.”分隔,具體含義如下。

  • 第一部分 標頭(Header):標頭通常由兩部分組成:令牌的類型(即 JWT)和所使用的簽名算法,例如 HMAC SHA256 或 RSA,下面是標頭的原文:
{  
"alg": "HS256",
"typ": "JWT"
}

然后,此 JSON 被 Base64 編碼以形成 JWT 的第一部分。

eyJhbGciOiJIUzI1NiJ9
  • 第二部分 載荷(Payload):載荷就是實際的用戶數據以及其他自定義數據。載荷原文如下所示。
{  
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

然后對原文進行 Base64 編碼形成 JWT 的第二部分。

eyJzdWIiOiJ7XCJ1c2VySWRcIjoyLFwidXNlcm5hbWVcIjpcImxpc2lcIixcIm5hbWVcIjpcIuadjuWbm1wiLFwiZ3JhZGVcIjpcInZpcFwifSJ9
  • 第三部分 簽名(Sign):簽名就是通過前面兩部分標頭+載荷+私鑰再配合指定的算法,生成用于校驗 JWT 是否有效的特殊字符串,簽名的生成規則如下。
HMACSHA256(base64UrlEncode(header) + "." +  base64UrlEncode(payload),  secret)

生成的簽名字符串為:

NT8QBdoK4S-PbnhS0msJAqL0FG2aruvlsBSyG226HiU

將以上三部分通過“.”連接在一起,就是 JWT 的標準格式了。

JWT 的創建與校驗

此時,你肯定有疑問 JWT 是如何生成的,又是如何完成有效性校驗呢?因為 JWT 的格式與算法是固定的,在 Java 就有非常多的優秀開源項目幫我們實現了JWT 的創建與驗簽,其中最具代表性的產品就是 JJWT。JJWT 是一個提供端到端的 JWT 創建和驗證的 Java 庫,它的官網是:https://github.com/jwtk/jjwt,有興趣的話你可以到官網閱讀它的源碼。

JJWT 的使用是非常簡單的,下面我們用代碼進行說明,關鍵代碼我已做好注釋。

  • 第一步,pom.xml 引入 JJWT 的 Maven 依賴。
<dependency>  
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>

<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
  • 第二步,編寫創建 JWT 的測試用例,模擬真實環境 UserID 為 123 號的用戶登錄后的 JWT 生成過程。
@SpringBootTest  
public class JwtTestor {
/**
* 創建Token
*/
@Test
public void createJwt(){
//私鑰字符串
String key = "1234567890_1234567890_1234567890";
//1.對秘鑰做BASE64編碼
String base64 = new BASE64Encoder().encode(key.getBytes());
//2.生成秘鑰對象,會根據base64長度自動選擇相應的 HMAC 算法
SecretKey secretKey = Keys.hmacShaKeyFor(base64.getBytes());
//3.利用JJWT生成Token
String data = "{\"userId\":123}"; //載荷數據
String jwt = Jwts.builder().setSubject(data).signWith(secretKey).compact();
System.out.println(jwt);
}
}

運行結果產生 JWT 字符串如下:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJ1c2VySWRcIjoxMjN9In0.1p_VTN46sukRJTYFxUg93CmfR3nJZRBm99ZK0e3d9Hw
  • 第三步,驗簽代碼,從 JWT 中提取 123 號用戶數據。這里要保證 JWT 字符串、key 私鑰與生成時保持一致。否則就會拋出驗簽失敗 JwtException。
/**  
* 校驗及提取JWT數據
*/
@Test
public void checkJwt(){
String jwt = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJ1c2VySWRcIjoxMjN9In0.1p_VTN46sukRJTYFxUg93CmfR3nJZRBm99ZK0e3d9Hw";
//私鑰
String key = "1234567890_1234567890_1234567890";
//1.對秘鑰做BASE64編碼
String base64 = new BASE64Encoder().encode(key.getBytes());
//2.生成秘鑰對象,會根據base64長度自動選擇相應的 HMAC 算法
SecretKey secretKey = Keys.hmacShaKeyFor(base64.getBytes());
//3.驗證Token
try {
//生成JWT解析器
JwtParser parser = Jwts.parserBuilder().setSigningKey(secretKey).build();
//解析JWT
Jws<Claims> claimsJws = parser.parseClaimsJws(jwt);
//得到載荷中的用戶數據
String subject = claimsJws.getBody().getSubject();
System.out.println(subject);
}catch (JwtException e){
//所有關于Jwt校驗的異常都繼承自JwtException
System.out.println("Jwt校驗失敗");
e.printStackTrace();
}
}

運行結果如下:

{"userId":123}

以上便是 JWT 的生成與校驗代碼,你會發現在加解密過程中,服務器私鑰 key 是保障 JWT 安全的命脈。對于這個私鑰在生產環境它不能寫死在代碼中,而是加密后保存在 Nacos 配置中心統一存儲,同時定期更換私鑰以防止關鍵信息泄露。

講到這應該你已掌握 JWT 的基本用法,但是在微服務架構下又該如何設計用戶認證體系呢?

基于網關的統一用戶認證

關于網關統一用戶認證和鑒權可以看陳某之前的文章:實戰干貨!Spring Cloud Gateway 整合 OAuth2.0 實現分布式統一認證授權!

下面我們結合場景講解 JWT 在微服務架構下的認證過程。這里我將介紹兩種方案:

  • 服務端自主驗簽方案;
  • API 網關統一驗簽方案。

服務端自主驗簽方案

首先咱們來看服務端驗簽的架構圖。

圖片

服務端自主驗簽方案

首先梳理下執行流程:

  • 第一步,認證中心微服務負責用戶認證任務,在啟動時從 Nacos 配置中心抽取 JWT 加密用私鑰;
  • 第二步,用戶在登錄頁輸入用戶名密碼,客戶端向認證中心服務發起認證請求:
http://usercenter/login #認證中心用戶認證(登錄)地址
  • 第三步,認證中心服務根據輸入在用戶數據庫中進行認證校驗,如果校驗成功則返回認證中心將生成用戶的JSON數據并創建對應的 JWT 返回給客戶端,下面是認證中心返回的數據樣本;
{  
"code": "0",
"message": "success",
"data": {
"user": {
"userId": 1,
"username": "zhangsan",
},
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJ1c2VySWRcIjoxLFwidXNlcm5hbWVcIjpcInpoYW5nc2FuXCIsXCJuYW1lXCI6XCLlvKDkuIlcIixcImdyYWRlXCI6XCJub3JtYWxcIn0ifQ.1HtfszarTxLrqPktDkzArTEc4ah5VO7QaOOJqmSeXEM"
}
}
  • 第四步,在收到上述 JSON 數據后,客戶端將其中 token 數據保存在 cookie 或者本地緩存中;
  • 第五步,隨后客戶端向具體某個微服務發起新的請求,這個 JWT 都會附加在請求頭或者 cookie 中發往 API 網關,網關根據路由規則將請求與jwt數據轉發至具體的微服務。中間過程網關不對 JWT 做任何處理;
  • 第六步,微服務接收到請求后,發現請求附帶 JWT 數據,于是將 JWT 再次轉發給用戶認證服務,此時用戶認證服務對 JWT 進行驗簽,驗簽成功提取其中用戶編號,查詢用戶認證與授權的詳細數據,數據結構如下所示:
{  
"code": "0",
"message": "success",
"data": {
"user": { #用戶詳細數據
"userId": 1,
"username": "zhangsan",
"name": "張三",
"grade": "normal"
"age": 18,
"idno" : 130.......,
...
},
"authorization":{ #權限數據
"role" : "admin",
"permissions" : [{"addUser","delUser","..."}]
}
}
}
  • 第七步,具體的微服務收到上述 JSON 后,對當前執行的操作進行判斷,檢查是否擁有執行權限,權限檢查通過執行業務代碼,權限檢查失敗返回錯誤響應。

到此從登錄創建 JWT 到驗簽后執行業務代碼的完整流程已經完成。

下面咱們來聊一聊第二種方案:

API 網關統一驗簽方案

圖片

API 網關統一驗簽方案

API 網關統一驗簽與服務端驗簽最大的區別是在 API 網關層面就發起 JWT 的驗簽請求,之后路由過程中附加的是從認證中心返回的用戶與權限數據,其他的操作步驟與方案一是完全相同的。

在這你可能又會有疑惑,為什么要設計兩種不同的方案呢?其實這對應了不同的應用場景:

服務端驗簽的時機是在業務代碼執行前,控制的粒度更細。比如微服務 A 提供了“商品查詢”與“創建訂單”兩個功能,前者不需要登錄用戶就可以使用,因此不需要向認證中心額外發起驗簽工作;而后者是登錄后的功能,因此必須驗簽后才可執行。因為服務端驗簽是方法層面上的,所以可以精確控制方法是否驗簽。但也有不足,正是因為驗簽是在方法前執行,所以需要在所有業務方法上聲明是否需要額外驗簽,盡管這個工作可以通過 Spring AOP+注解的方式無侵入實現,但這也無疑需要程序員額外關注,分散了開發業務的精力。

相應的,服務端驗簽的缺點反而成為 API 網關驗簽的優勢。API 網關不關心后端的服務邏輯,只要請求附帶 JWT,就自動向認證中心進行驗簽。這種簡單粗暴的策略確實讓模塊耦合有所降低,處理起來也更簡單,但也帶來了性能問題,因為只要請求包含 JWT 就會產生認證中心的遠程通信。如果前端工程師沒有對 JWT 進行精確控制,很可能帶來大量多余的認證操作,系統性能肯定會受到影響。

那在項目中到底如何選擇呢?服務端驗簽控制力度更細,適合應用在低延遲、高并發的應用,例如導航、實時交易系統、軍事應用。而 API 統一網關則更適合用在傳統的企業應用,可以讓程序員專心開發業務邏輯,同時程序也更容易維護。

全新的挑戰

雖然 JWT 看似很美,在實施落地過程中也會遇到一些特有的問題,例如:

WT 生成后失效期是固定的,很多業務中需要客戶端在不改變 JWT 的前提下,實現 JWT 的“續簽”功能,但這單靠 JWT 自身特性是無法做到的,因為 JWT 的設計本身就不允許生成完全相同的字符串。為了解決這個問題,很多項目在生成的 JWT 設為“永久生效”,架構師利用 Redis 的 Expire 過期特性在后端控制 JWT 的時效性。這么做雖然讓 JWT 本身變得有狀態,但這可能也是在各種權衡后的“最優解”。類似的,例如:強制 JWT 立即失效、動態 JWT 有效期都可以使用這個辦法解決。

圖片

某個 JWT 在 3600 秒后過期

對于上面兩種認證方案,還有優化的空間,比如在服務A第一次對某個 JWT 進行驗簽后獲取用戶與權限數據,那在 JWT 的有效期內便可將數據在本地內存或者 Redis 中進行緩存,這樣下一次同樣的 JWT 訪問時直接從緩存中提取即可,可以節省大量服務間通信時間。但引入緩存后你也要時刻關注緩存與用戶數據的一致性問題,是要性能還是要數據可靠,這又是一個架構師需要面對的抉擇。

小結

今天主要涉及三方面內容,首先咱們回顧了基于 Session 的有狀態用戶認證解決方案,其次介紹了 JWT 與 JJWT 的使用,最后講解了利用 JWT 實現微服務架構認證的兩種方案,對產生的新問題也進行了梳理。

在多年的架構生涯中,我自己也在不斷感慨,架構是一門取舍的藝術,沒有完美的架構,只有適合的場景,希望未來同學們可以多學習一些前沿技術,興許隨著技術發展沒準魚和熊掌真的可以兼得呢。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2024-07-31 09:09:20

2022-11-02 08:31:53

BFF架構App

2024-12-27 10:12:28

2022-08-04 08:46:16

單體架構微服務事務管理

2021-02-07 09:05:56

微服務結構云原生

2023-01-29 09:06:24

微服務劃分關聯

2023-12-15 09:57:13

微服務鏈路服務

2023-09-05 08:53:51

2021-07-20 08:03:43

微服務應用程序

2025-03-11 10:58:00

2022-11-08 08:35:53

架構微服務移動

2018-12-06 14:56:46

微服務隔離熔斷

2018-05-09 08:18:26

微服務改造架構

2020-11-26 18:18:21

微服務業務規模技術

2024-04-19 08:49:50

微服務RPC事件驅動

2025-02-10 02:20:00

微服務SOA架構

2023-07-28 09:23:24

微服務架構

2019-09-29 10:29:02

緩存模式微服務架構

2022-12-31 14:51:48

微服務Golang

2024-03-18 08:48:52

Spring多端認證微服務
點贊
收藏

51CTO技術棧公眾號

亚洲成色999久久网站| 亚洲视频 欧洲视频| 欧美孕妇与黑人孕交| 国产一二三四五区| 综合久草视频| 亚洲国产精品久久久男人的天堂| 蜜桃av久久久亚洲精品| 人妻中文字幕一区二区三区| 这里只有精品在线| 亚洲精品福利视频| 午夜剧场高清版免费观看 | 国产精品久久久久久久久久久久久久久 | 国产高清在线免费观看| 日韩欧美ww| 欧美一区二区三区四区视频 | 人成网站在线观看| 韩国亚洲精品| 一区二区在线视频| 麻豆传媒在线看| 成人性生活视频| 亚洲综合激情小说| 亚洲一区三区在线观看| 黄色av网址在线| 久久国产日韩欧美精品| 欧美又大又粗又长| 国产在线观看你懂的| 99精品全国免费观看视频软件| 亚洲精品久久久久久下一站 | 玖玖精品一区| 欧洲另类一二三四区| 日本午夜激情视频| 伊人影院在线视频| 国产精品欧美一级免费| 欧美精品一区二区三区在线四季 | 一区二区自拍偷拍| 男人的天堂亚洲| 欧美—级高清免费播放| 无码黑人精品一区二区| 欧美日一区二区| 日韩精品极品视频免费观看| 美女扒开腿免费视频| www.久久爱.com| 欧美日韩午夜影院| 人人干人人干人人| 香蕉久久免费电影| 色综合天天综合色综合av| 成人在线观看你懂的| 欧美黑人猛交的在线视频| 国产精品久久看| 在线视频欧美一区| 亚洲欧美视频一区二区| 国产精品私人影院| 亚洲韩国在线| 欧美日本一道| 综合久久给合久久狠狠狠97色| 日韩免费毛片| h网站视频在线观看| 国产欧美一区二区精品性色超碰| 欧美日韩国产综合在线| 青青青免费视频在线2| 91亚洲精品一区二区乱码| 国产欧美在线一区二区| 色播色播色播色播色播在线 | 亚洲精品在线免费播放| 欧美成人精品一区二区综合免费| 日本伊人久久| 亚洲国产精品人久久电影| 亚洲av无码一区东京热久久| 欧美福利在线播放网址导航| 日韩二区三区在线| 黑人巨大精品欧美| 精品午夜久久| 日韩小视频网址| 欧美卡一卡二卡三| 亚洲精品裸体| 国产成人精品av| 在线免费看91| 国产成a人亚洲精| 国内一区二区三区在线视频| 日韩二区三区| 国产精品理论片在线观看| 浴室偷拍美女洗澡456在线| 女囚岛在线观看| 天天色图综合网| 欧美午夜aaaaaa免费视频| 国产精品1区在线| 日韩国产欧美区| 超碰人人人人人人人| 这里只有精品在线| 奇米4444一区二区三区| 国产精品乱码久久久| 成人一区二区视频| 日韩高清dvd| 日本资源在线| 在线视频一区二区三区| 中文字幕乱妇无码av在线| 无码少妇一区二区三区| 日韩视频中文字幕| 国产尤物在线视频| 国产真实乱偷精品视频免| 精品国产免费久久久久久尖叫| 久热av在线| 亚洲一区影音先锋| 99re精彩视频| 私拍精品福利视频在线一区| 久久久国产精品x99av | 欧美色精品天天在线观看视频| a级大片免费看| 精品日韩免费| 2019中文字幕在线免费观看| 国产内射老熟女aaaa∵| 久久婷婷久久一区二区三区| 久久免费一级片| jizz欧美| 亚洲欧美日本另类| 国产一级片播放| 另类调教123区| 免费成人深夜夜行视频| 最爽无遮挡行房视频在线| 色爱区综合激月婷婷| 国产精久久久久| 国产高清一区| 日韩美女免费观看| 四虎永久在线观看| 亚洲一区二区黄色| 自拍一级黄色片| 99久久夜色精品国产亚洲96| 日韩av理论片| 三级视频在线播放| 天天亚洲美女在线视频| 天天躁日日躁狠狠躁av麻豆男男| 久久久久久久久丰满| 国产精品久久久久久久电影| 青青草观看免费视频在线| 亚洲妇熟xx妇色黄| 男人的天堂免费| 亚洲色图国产| 91老司机精品视频| 自拍视频在线| 欧美精品在线观看播放| 国产免费美女视频| 激情文学综合插| 桥本有菜av在线| 国产精品美女久久久久人| 久久精品国产成人精品| 亚洲中文字幕一区二区| 国产精品日韩成人| 在线观看高清免费视频| 日韩精品久久| 国产日韩欧美在线播放| 久草免费在线| 日韩一区二区三区视频| 欧美成人精品欧美一| 国产剧情在线观看一区二区| 美女av免费观看| 大香伊人久久精品一区二区| 韩国欧美亚洲国产| 性感美女视频一二三| 欧美日韩免费在线观看| av黄色免费网站| 麻豆国产精品777777在线| 国产四区在线观看| 999在线精品| 97免费视频在线| 男人的天堂av高清在线| 在线观看视频一区| 中文字幕精品亚洲| 国产麻豆9l精品三级站| 免费在线黄网站| 亚洲人亚洲人色久| 国产精品视频内| av黄色在线| 亚洲电影免费观看| 黄色一级视频免费看| 欧美激情一二三区| 97超碰人人看| 夜夜嗨网站十八久久| 欧美重口乱码一区二区| 欧美美女福利视频| 欧美极品少妇xxxxⅹ喷水| 凸凹人妻人人澡人人添| 在线精品视频一区二区| 日韩欧美国产成人精品免费| 福利一区福利二区| 国产视频一区二区视频| 亚洲精品小说| 免费亚洲精品视频| 2020国产精品小视频| 欧美激情2020午夜免费观看| 日韩在线免费看| 6080亚洲精品一区二区| 久热这里只有精品6| 国产精品区一区二区三| 亚洲一级Av无码毛片久久精品| 日本午夜精品视频在线观看| 中文字幕av导航| 亚洲瘦老头同性70tv| 亚洲一区二区自拍| 亚洲精品一级二级| 欧美国产精品日韩| fc2在线中文字幕| 精品国产网站在线观看| 一区二区不卡视频在线观看| 亚洲成人精品影院| 国产麻豆视频在线观看| 91丨porny丨在线| 成人免费黄色av| 蜜桃av一区二区三区| 成人免费观看cn| 五月综合激情| 视频一区二区三| 亚洲动漫精品| 爱情岛论坛亚洲入口| 国产成人免费精品| 日本亚洲欧洲色α| 99riav视频在线观看| 久久福利网址导航| av网在线观看| 亚洲欧美日韩中文视频| 免费a级片在线观看| 在线91免费看| 怡红院成永久免费人全部视频| 婷婷久久综合九色综合绿巨人 | 亚洲国产精品自拍| 97成人资源站| 亚洲欧洲精品一区二区三区不卡| aaaaa级少妇高潮大片免费看| 高清av一区二区| 欧美性猛交乱大交| 国产一区二区在线电影| 国产九九热视频| 日韩综合小视频| 91黄色小网站| 亚洲综合二区| 成人毛片视频网站| 日韩午夜精品| 精品国产一二三四区| 伊人久久大香线蕉av超碰演员| 中文视频一区视频二区视频三区| 欧美色婷婷久久99精品红桃| 欧美日韩成人一区二区三区| 天天做夜夜做人人爱精品 | 成人福利在线| 亚洲天堂免费视频| 日韩a在线观看| 亚洲精品视频免费在线观看| 四虎在线观看| 亚洲精品视频久久| 美女做暖暖视频免费在线观看全部网址91| 亚洲国产小视频| 香蕉视频免费看| 亚洲桃花岛网站| 在线免费看黄网站| 色琪琪综合男人的天堂aⅴ视频| av在线播放网| 俺去亚洲欧洲欧美日韩| а√天堂8资源在线官网| 欧美成年人网站| 福利在线导航136| 亚州国产精品久久久| 在线能看的av网址| 国产91精品视频在线观看| 天天综合网天天| 国产精品三级久久久久久电影| 日韩欧国产精品一区综合无码| 91亚洲永久免费精品| 亚洲网址在线观看| 激情小说综合网| 综合干狼人综合首页| 亚洲福利av| 欧美精品一卡| 国产免费观看高清视频| 日韩国产欧美在线播放| 亚洲黄色片免费| 成人h动漫精品| 亚洲欧洲久久久| 亚洲人成在线播放网站岛国| 国产精彩视频在线观看| 一本久久精品一区二区| 91一区二区视频| 亚洲国产91色在线| 牛牛澡牛牛爽一区二区| 菠萝蜜影院一区二区免费| 搞黄网站在线看| 国产精品视频地址| 91精品丝袜国产高跟在线| 看欧美日韩国产| 97精品中文字幕| 欧美视频在线观看视频| 青青草国产精品亚洲专区无| xxxxwww一片| 日本一区二区视频在线| 免费在线观看国产精品| 色婷婷av一区二区三区大白胸| 国产免费视频一区二区三区| 日韩精品在线电影| 国产黄色小视频在线| 日本精品久久久久影院| 成人污污www网站免费丝瓜| 国产午夜精品一区| 亚洲精品小说| 北条麻妃av高潮尖叫在线观看| 国产精品系列在线播放| www.久久国产| 亚洲一区二区三区四区五区黄| 欧美成人一区二区视频| 日韩电影免费在线观看中文字幕 | 久久综合在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美一级片在线视频| 色猫猫国产区一区二在线视频| a级片在线视频| 综合久久五月天| 国偷自产一区二区免费视频| 97久久人人超碰caoprom欧美| 成人亚洲一区| 麻豆av免费在线| 成人精品国产福利| 国产免费无码一区二区视频| 欧美三级视频在线观看| 色视频精品视频在线观看| 久久久久久999| 免费一区二区三区在线视频| 亚洲福利av| 日本成人中文字幕| 日本少妇高潮喷水xxxxxxx| 亚洲国产精品自拍| 高清毛片aaaaaaaaa片| 久久精品这里热有精品| 国产国产一区| 午夜精品一区二区三区在线观看| 亚洲在线黄色| 青青草视频成人| 五月综合激情网| 欧美 日韩 人妻 高清 中文| 大胆人体色综合| 欧美a级大片在线| 妞干网这里只有精品| 久久99最新地址| 久久人妻无码aⅴ毛片a片app| 欧美色窝79yyyycom| 成人在线二区| 国产精品久久久久久久久久东京| 蜜桃一区二区三区| 欧美日韩亚洲一二三| 久久这里只有精品首页| 国产成人无码一区二区在线播放| 日韩毛片在线看| 国产日韩电影| 亚洲精品一区二区毛豆| 麻豆国产欧美一区二区三区| 99久久久免费精品| 欧美一级精品在线| 日本动漫同人动漫在线观看| 国产精品一区二区三区免费| 国产欧美欧美| 波多野结衣 在线| 欧美性大战久久久久久久| 日本中文字幕在线观看| 成人h视频在线观看播放| 一区二区三区午夜视频| 日韩高清一二三区| 亚洲电影中文字幕在线观看| 四虎电影院在线观看| 国产精品r级在线| 91亚洲国产成人久久精品| 日韩高清在线一区二区| 亚洲在线视频一区| 神马精品久久| 国产精品揄拍500视频| 亚洲精品a级片| 波多野结衣一二三区| 91久久线看在观草草青青| 欧美另类极品| 国产精品.com| 日韩极品在线观看| www.99re7| 亚洲精品少妇网址| **欧美日韩在线| 国内自拍在线观看| 国产精品久久久久婷婷二区次| www日本高清视频| 欧洲日韩成人av| 亚洲a在线视频| 超碰97在线资源站| 欧美日韩精品系列| 久久电影网站| 欧洲一区二区在线观看| 国产乱人伦精品一区二区在线观看| 国产一级做a爰片在线看免费| 国产午夜精品一区二区三区 | 男人久久天堂| 一区二区冒白浆视频| www.欧美日韩国产在线| 亚洲天堂一二三| 国内偷自视频区视频综合| 色天天综合网| 美女又爽又黄视频毛茸茸| 91精品国产aⅴ一区二区| 在线视频cao|