午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 基于gin的golang web開發(fā)之認證利器jwt

基于gin的golang web開發(fā)之認證利器jwt

熱門標簽:赤峰電銷 利用地圖標注位置 貴州電話智能外呼系統(tǒng) 地圖區(qū)域圖標注后導出 杭州人工智能電銷機器人費用 谷歌美發(fā)店地圖標注 官渡電銷外呼管理系統(tǒng)怎么收費 江蘇呼叫中心外呼系統(tǒng)有效果嗎 400開頭電話怎樣申請

JSON Web Token(JWT)是一種很流行的跨域認證解決方案,JWT基于JSON可以在進行驗證的同時附帶身份信息,對于前后端分離項目很有幫助。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT由三部分組成,每個部分之間用點.隔開,分別稱為HEADER、PAYLOAD和VERIFY SIGNATURE。HEADER和PAYLOAD經(jīng)過base64解碼后為JSON明文。

  1. HEADER包含兩個字段,alg指明JWT的簽名算法,typ固定為JWT
  2. PAYLOAD中包含JWT的聲明信息,標準中定義了isssubaud等聲明字段,如果標準聲明不夠用的話,我們還可以增加自定義聲明。要注意兩點,第一PAYLOAD只是經(jīng)過base64編碼,幾乎就等于是明文,不要包含敏感信息。第二不要在PAYLOAD中放入過多的信息,因為驗證通過以后每一個請求都要包含JWT,信息太多的話會造成一些沒有必要的資源浪費。
  3. VERIFY SIGNATURE為使用HEADER中指定的算法生成的簽名。例如alg:HS256簽名算法

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),密鑰)

了解完JWT的基本原理之后,我們來看一下在gin中是怎么使用JWT的。

引入gin-jwt中間件

在Gin中使用jwt有個開源項目gin-jwt,這項目幾乎包含了我們要用到的一切。例如定義PAYLOAD中的聲明、授權驗證的方法、是否使用COOKIE等等。下面來看一下官網(wǎng)給出的例子。

package main

import (
	"log"
	"net/http"
	"os"
	"time"

	jwt "github.com/appleboy/gin-jwt/v2"
	"github.com/gin-gonic/gin"
)

type login struct {
	Username string `form:"username" json:"username" binding:"required"`
	Password string `form:"password" json:"password" binding:"required"`
}

var identityKey = "id"

func helloHandler(c *gin.Context) {
	claims := jwt.ExtractClaims(c)
	user, _ := c.Get(identityKey)
	c.JSON(200, gin.H{
		"userID":  claims[identityKey],
		"userName": user.(*User).UserName,
		"text":   "Hello World.",
	})
}

type User struct {
	UserName string
	FirstName string
	LastName string
}

func main() {
	port := os.Getenv("PORT")
	r := gin.New()
	r.Use(gin.Logger())
	r.Use(gin.Recovery())

	if port == "" {
		port = "8000"
	}

	authMiddleware, err := jwt.New(jwt.GinJWTMiddleware{
		Realm:    "test zone",
		Key:     []byte("secret key"),
		Timeout:   time.Hour,
		MaxRefresh: time.Hour,
		IdentityKey: identityKey,
		PayloadFunc: func(data interface{}) jwt.MapClaims {
			if v, ok := data.(*User); ok {
				return jwt.MapClaims{
					identityKey: v.UserName,
				}
			}
			return jwt.MapClaims{}
		},
		IdentityHandler: func(c *gin.Context) interface{} {
			claims := jwt.ExtractClaims(c)
			return User{
				UserName: claims[identityKey].(string),
			}
		},
		Authenticator: func(c *gin.Context) (interface{}, error) {
			var loginVals login
			if err := c.ShouldBind(loginVals); err != nil {
				return "", jwt.ErrMissingLoginValues
			}
			userID := loginVals.Username
			password := loginVals.Password

			if (userID == "admin"  password == "admin") || (userID == "test"  password == "test") {
				return User{
					UserName: userID,
					LastName: "Bo-Yi",
					FirstName: "Wu",
				}, nil
			}

			return nil, jwt.ErrFailedAuthentication
		},
		Authorizator: func(data interface{}, c *gin.Context) bool {
			if v, ok := data.(*User); ok  v.UserName == "admin" {
				return true
			}

			return false
		},
		Unauthorized: func(c *gin.Context, code int, message string) {
			c.JSON(code, gin.H{
				"code":  code,
				"message": message,
			})
		},

		TokenLookup: "header: Authorization, query: token, cookie: jwt",
		TokenHeadName: "Bearer",
		TimeFunc: time.Now,
	})

	if err != nil {
		log.Fatal("JWT Error:" + err.Error())
	}

	errInit := authMiddleware.MiddlewareInit()

	if errInit != nil {
		log.Fatal("authMiddleware.MiddlewareInit() Error:" + errInit.Error())
	}

	r.POST("/login", authMiddleware.LoginHandler)

	r.NoRoute(authMiddleware.MiddlewareFunc(), func(c *gin.Context) {
		claims := jwt.ExtractClaims(c)
		log.Printf("NoRoute claims: %#v\n", claims)
		c.JSON(404, gin.H{"code": "PAGE_NOT_FOUND", "message": "Page not found"})
	})

	auth := r.Group("/auth")
	auth.GET("/refresh_token", authMiddleware.RefreshHandler)
	auth.Use(authMiddleware.MiddlewareFunc())
	{
		auth.GET("/hello", helloHandler)
	}

	if err := http.ListenAndServe(":"+port, r); err != nil {
		log.Fatal(err)
	}
}

我們可以看到jwt.GinJWTMiddleware用于聲明一個中間件。PayloadFunc方法中給默認的PAYLOAD增加了id字段,取值為UserName。Authenticator認證器,我們可以在這里驗證用戶身份,參數(shù)為*gin.Context,所以在這里我們可以像寫Gin Handler那樣獲取到Http請求中的各種內容。Authorizator授權器可以判斷判斷當前JWT是否有權限繼續(xù)訪問。當然還可以設置像過期時間,密鑰,是否設置COOKIE等其他選項。

登錄Handler

以上例子中配置了路由r.POST("/login", authMiddleware.LoginHandler)下面我們來看一下登錄過程是怎樣的。

func (mw *GinJWTMiddleware) LoginHandler(c *gin.Context) {
	if mw.Authenticator == nil {
		mw.unauthorized(c, http.StatusInternalServerError, mw.HTTPStatusMessageFunc(ErrMissingAuthenticatorFunc, c))
		return
	}

	data, err := mw.Authenticator(c)

	if err != nil {
		mw.unauthorized(c, http.StatusUnauthorized, mw.HTTPStatusMessageFunc(err, c))
		return
	}

	// Create the token
	token := jwt.New(jwt.GetSigningMethod(mw.SigningAlgorithm))
	claims := token.Claims.(jwt.MapClaims)

	if mw.PayloadFunc != nil {
		for key, value := range mw.PayloadFunc(data) {
			claims[key] = value
		}
	}

	expire := mw.TimeFunc().Add(mw.Timeout)
	claims["exp"] = expire.Unix()
	claims["orig_iat"] = mw.TimeFunc().Unix()
	tokenString, err := mw.signedString(token)

	if err != nil {
		mw.unauthorized(c, http.StatusUnauthorized, mw.HTTPStatusMessageFunc(ErrFailedTokenCreation, c))
		return
	}

	// set cookie
	if mw.SendCookie {
		expireCookie := mw.TimeFunc().Add(mw.CookieMaxAge)
		maxage := int(expireCookie.Unix() - mw.TimeFunc().Unix())

		if mw.CookieSameSite != 0 {
			c.SetSameSite(mw.CookieSameSite)
		}

		c.SetCookie(
			mw.CookieName,
			tokenString,
			maxage,
			"/",
			mw.CookieDomain,
			mw.SecureCookie,
			mw.CookieHTTPOnly,
		)
	}

	mw.LoginResponse(c, http.StatusOK, tokenString, expire)
}

LoginHandler整體邏輯還是比較簡單的,檢查并調用前面設置的Authenticator方法,驗證成功的話生成一個新的JWT,調用PayloadFunc方法設置PAYLOAD的自定義字段,根據(jù)SendCookie判斷是否需要在HTTP中設置COOKIE,最后調用LoginResponse方法設置返回值。

使用中間件

jwt-gin包提供了一個標準的Gin中間件,我們可以在需要驗證JWT的路由上設置中間件。前面例子中對路由組/auth增加了JWT驗證auth.Use(authMiddleware.MiddlewareFunc())

func (mw *GinJWTMiddleware) MiddlewareFunc() gin.HandlerFunc {
	return func(c *gin.Context) {
		mw.middlewareImpl(c)
	}
}

func (mw *GinJWTMiddleware) middlewareImpl(c *gin.Context) {
	claims, err := mw.GetClaimsFromJWT(c)
	if err != nil {
		mw.unauthorized(c, http.StatusUnauthorized, mw.HTTPStatusMessageFunc(err, c))
		return
	}

	if claims["exp"] == nil {
		mw.unauthorized(c, http.StatusBadRequest, mw.HTTPStatusMessageFunc(ErrMissingExpField, c))
		return
	}

	if _, ok := claims["exp"].(float64); !ok {
		mw.unauthorized(c, http.StatusBadRequest, mw.HTTPStatusMessageFunc(ErrWrongFormatOfExp, c))
		return
	}

	if int64(claims["exp"].(float64))  mw.TimeFunc().Unix() {
		mw.unauthorized(c, http.StatusUnauthorized, mw.HTTPStatusMessageFunc(ErrExpiredToken, c))
		return
	}

	c.Set("JWT_PAYLOAD", claims)
	identity := mw.IdentityHandler(c)

	if identity != nil {
		c.Set(mw.IdentityKey, identity)
	}

	if !mw.Authorizator(identity, c) {
		mw.unauthorized(c, http.StatusForbidden, mw.HTTPStatusMessageFunc(ErrForbidden, c))
		return
	}

	c.Next()
}

GetClaimsFromJWT方法在當前上下文中獲取JWT,失敗的話返回未授權。接著會判斷JWT是否過期,最后前面設置的Authorizator方法驗證是否有權限繼續(xù)訪問。

到此這篇關于基于gin的golang web開發(fā)之認證利器jwt的文章就介紹到這了,更多相關gin的golang web開發(fā)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Gin golang web開發(fā)模型綁定實現(xiàn)過程解析
  • 基于gin的golang web開發(fā):路由示例詳解
  • golang websocket 服務端的實現(xiàn)
  • Golang實現(xiàn)web文件共享服務的示例代碼
  • golang搭建靜態(tài)web服務器的實現(xiàn)方法
  • golang基于websocket實現(xiàn)的簡易聊天室程序

標簽:松原 泰安 黔西 鷹潭 武漢 保定 宜春 河池

巨人網(wǎng)絡通訊聲明:本文標題《基于gin的golang web開發(fā)之認證利器jwt》,本文關鍵詞  基于,gin,的,golang,web,開,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于gin的golang web開發(fā)之認證利器jwt》相關的同類信息!
  • 本頁收集關于基于gin的golang web開發(fā)之認證利器jwt的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    99热久久这里只有精品| 国产一区二区在线视频观看| 亚州av在线播放| 亚洲午夜三级在线| 精品日本一线二线三线不卡| 8x拔播拔播x8国产精品| 老太脱裤让老头玩ⅹxxxx| 青青草免费av| 久久国产免费看| 亚洲精品国产品国语在线app| 亚洲视频免费一区| 国产精品swag| 不卡一区二区在线观看| 日韩激情一二三区| 欧美性猛交xxxx乱大交蜜桃| 欧美激情精品久久久久久黑人 | 成人在线激情视频| 日韩精品一区二区三区色欲av| 婷婷伊人五月天| 91美女在线视频| 亚洲国产欧美日韩精品| 午夜精品区一区二区三| 国产人成视频在线观看| 亚洲黄色在线观看视频| 欧美怡红院视频| 91九色极品视频| 想看黄色一级片| wwwwww在线观看| 欧美激情一区二区三区不卡| 久久久精品在线观看| 黄色www网站| 精品国产无码AV| 欧美日韩国产综合久久 | 国产呦萝稀缺另类资源| 69堂亚洲精品首页| 日韩欧美在线观看强乱免费| 亚欧精品视频一区二区三区| 久久伊99综合婷婷久久伊| 久久精品视频导航| 亚洲少妇第一页| 一区不卡在线观看| 亚洲h精品动漫在线观看| 91av一区二区三区| 欧美特级一级片| 91丨porny丨在线| 在线看日韩欧美| av观看免费在线| 成人午夜精品视频| 欧美三电影在线| 国产尤物99| 人人干人人干人人干| 一区二区成人在线| 国产一区在线免费观看| 天堂а√在线中文在线鲁大师| 国产欧美日韩三区| 成人黄色av网站| 极品盗摄国产盗摄合集| 国产精品美女久久久久久久| 91免费欧美精品| 国产精品九九九九九| 国产精品久久久久三级| 国产成人综合精品在线| 艳妇乳肉豪妇荡乳xxx| 国产高清成人在线| 日本a级片电影一区二区| 国产十八熟妇av成人一区| 久久久精品免费网站| 97在线精品国自产拍中文| 欧美成人乱码一二三四区免费| 国产98色在线|日韩| 青青在线视频一区二区三区| 亚洲AV成人无码精电影在线| 国产精品久久久久7777按摩| 国产精品免费一区二区三区在线观看| 亚洲精品午夜国产va久久成人| 亚洲一本大道在线| 黑人中文字幕一区二区三区| 国产稀缺精品盗摄盗拍| 中文字幕亚洲区| 国模精品一区二区三区| 国产永久免费视频| 久久激情视频久久| 波多野结衣a v在线| 午夜精品123| 亚洲一区二区精品在线观看| 亚洲aⅴ乱码精品成人区| 欧美理论电影在线播放| 老司机免费视频| 亚洲高清免费在线| 久艹在线免费观看| 久久深夜福利| 欧洲成人免费视频| 欧美日韩精品区| 精品日韩成人av| 国精产品一区一区三区免费视频| 国产精品高潮呻吟av| 久久久精品蜜桃| 国产精品区一区| 欧美精品亚洲精品日韩精品| 欧美日韩激情在线| 欧美女同在线观看| 久久久国产精品不卡| 欧美日韩在线播放一区二区| 中文在线免费观看| 日韩网站免费观看高清| 顶臀精品视频www| 亚洲精品一线二线三线| 欧美日韩人妻精品一区在线| 91国内精品野花午夜精品| 男人搞女人网站| 亚洲精品视频一区| 欧美xxxx吸乳| 国产亚洲婷婷免费| 欧美精品欧美精品| 国产一区二区日韩精品| 国产精品一区二区三区精品| 波多野结衣在线观看视频| 欧美日韩第一页| 国产在线视频99| 中文在线不卡视频| 免费一级a毛片夜夜看 | 日韩视频免费观看高清在线视频| 亚洲色图欧美另类| 欧美日韩国产系列| 受虐m奴xxx在线观看| 色呦呦国产精品| 午夜久久福利视频| 一区二区三区在线不卡| 亚洲少妇久久久| 一区二区三区中文字幕电影| 天堂av免费看| 26uuu国产电影一区二区| 久久久久一区二区三区| 奇米四色…亚洲| 国产精品日本一区二区 | 久久影院午夜片一区| 免费人成在线观看视频播放| 亚洲综合一二区| 欧美日韩理论片| 日韩视频国产视频| 青青草免费av| 精品视频9999| 国产黄频在线观看| 国产精品乱码| 95精品视频在线| 国产精品免费观看久久| 一区二区成人在线观看| 中文字幕成人在线视频| 欧美一区二区三区播放老司机| 91香蕉视频网| 国产性色av一区二区| 日韩免费在线视频观看| 韩剧1988在线观看免费完整版| 免费看黄色一级视频| 国产精品日韩二区| 国产欧美在线观看一区| 污污的视频免费| 亚洲成人精品久久久| 日本一级黄色录像| 午夜精品www| 丝袜诱惑亚洲看片| 黑人巨茎大战欧美白妇| 欧美性猛交xxxx免费看| 北京富婆泄欲对白| 日韩综合中文字幕| 男人天堂av网| 懂色av一区二区三区四区五区| 亚洲五月六月丁香激情| 小毛片在线观看| 久久久精品在线观看| 日韩国产欧美在线播放| 精品免费久久久久久久| 日韩欧美国产黄色| 国产亚洲成人av| 亚洲free性xxxx护士hd| 国产精品99久久久久久似苏梦涵| 久久无码高潮喷水| 亚洲精品福利在线| 又色又爽又黄无遮挡的免费视频| 久久久精彩视频| 亚洲黄网站在线观看| 久久福利小视频| 永久免费精品影视网站| 午夜在线观看视频18| 欧美主播一区二区三区美女 久久精品人 | 国产精品h视频| 欧美日韩国产免费一区二区| 午夜一级黄色片| 日本一二三区视频在线| 亚洲精品久久久久久久久久久久久| 伊人免费在线观看| 性色av一区二区三区在线观看| 少妇又紧又色又爽又刺激视频| 久久久久久亚洲精品不卡4k岛国 | 丝袜美腿精品国产二区| 毛片一区二区三区| 蜜臀av免费观看| 日韩亚洲欧美中文高清在线| 天堂中文资源在线观看| 欧美xxxxx在线视频| 中文字幕一区二区精品| 色婷婷激情五月| 99视频精品全部免费看| 亚洲国产精品va在线观看黑人| 色窝窝无码一区二区三区成人网站| 青草网在线观看| 国产亚洲视频在线观看| 麻豆精品一区二区综合av| 无码专区aaaaaa免费视频| 日韩av在线免费播放| 捆绑调教美女网站视频一区| 一级片免费在线观看视频| 久久精品久久久久久国产 免费| 成人av资源在线观看| 中文字幕天堂av| 国产精品丝袜久久久久久高清| 一区二区欧美精品| 中文字幕免费高清网站| 这里只有精品66| 欧美精品成人一区二区三区四区| 精品女同一区二区三区| 免费涩涩18网站入口| 综合136福利视频在线| 99久久精品免费看国产免费软件| 九一在线免费观看| 国内精品久久国产| 精品久久久久久久人人人人传媒| 日本女优在线视频一区二区| 久久久久亚洲AV成人无码国产| 国产乱肥老妇国产一区二| 一区二区三区在线视频播放| 国产小视频在线免费观看| 真人做人试看60分钟免费| 亚洲乱码国产乱码精品精天堂| 国产一区二区毛片| 最近中文字幕在线mv视频在线| 97久久人人超碰caoprom欧美| 欧美精品少妇一区二区三区| 男女男精品视频网| 国产高清成人久久| 好看的日韩精品| 亚洲视频免费一区| 国产精品视频一二三区 | 国产性生活网站| 亚洲中文字幕无码av永久| 91国自产精品中文字幕亚洲| 国产精品福利影院| 日产电影一区二区三区| 成人在线看视频| 91国内免费在线视频| 亚洲精品一二三| 人妻精品无码一区二区| 天天操精品视频| 国产一级二级三级精品| 制服丝袜亚洲色图| www.亚洲精品| 黄色一级视频在线观看| 日韩中文字幕在线视频观看| 欧美国产日本高清在线| 日本黄色一区二区| 国产成人丝袜美腿| 欧美成人精品欧美一级乱黄| av网站在线不卡| 国产一区二区不卡视频在线观看| 在线播放亚洲激情| 1区2区3区精品视频| 亚州男人的天堂| 天天舔天天操天天干| 亚洲欧美一区二区原创| 大胆欧美人体视频| 欧美日韩国产乱码电影| 久久久综合视频| 国内精品国产成人国产三级| 麻豆传媒在线看| 亚洲综合视频一区| 久久69精品久久久久久久电影好 | 国产精品拍天天在线| 欧美 日韩 国产 精品| 手机毛片在线观看| 4444在线观看| 国产精品一区二区久久精品| 亚洲免费av网址| 日韩欧美aaa| 久久久久国产精品人| 国产麻豆一精品一男同| 国产探花视频在线播放| 国产aaa一级片| 欧美日韩日本网| 国产69精品久久久| 精品国产一区二区三区久久久蜜月| 136国产福利精品导航| 看电视剧不卡顿的网站| 一区二区视频播放| 三级黄色片在线观看| 成人亚洲视频在线观看| 欧美一区观看| 国产精品福利在线| 爱福利视频一区| 日韩欧美国产精品一区| 天天av天天翘天天综合网色鬼国产| 国产一区二区0| 涩涩视频免费看| 日韩大片免费在线观看| 国产精品麻豆免费版现看视频| 一级黄色大片儿| 欧美 国产 日本| 美女av免费观看| 5g国产欧美日韩视频| www国产亚洲精品久久网站| 91精品国产一区二区三区蜜臀 | 欧美伦理视频在线观看| 免费看成人午夜电影| 国产精品久久久久久五月尺| 国产午夜精品视频免费不卡69堂| 91精品国产一区二区三区香蕉| 色婷婷av一区二区三区软件| 久久日韩精品一区二区五区| 图片区 小说区 区 亚洲五月| 天天综合网入口| 搡老熟女老女人一区二区| 黄色www网站| 欧美另类网站| 成人欧美一区二区三区黑人| 97色在线视频观看| 在线看国产精品| 亚洲国产精品系列| 一本到不卡免费一区二区| 亚洲一区二区三区四区在线观看| 亚洲国产成人一区二区三区| 国产精品色一区二区三区| 99久久精品国产麻豆演员表| 国产成人丝袜美腿| 天堂av在线一区| 美女久久一区| 三级网站免费观看| 少妇喷水在线观看| 韩国av在线免费观看| 超碰福利在线观看| 91资源在线视频| 四虎成人在线观看| 国产女主播喷水视频在线观看| 亚洲 欧美 成人| 久久免费在线观看视频| 亚洲精品天堂网| 波兰性xxxxx极品hd| 黄色三级视频片| 欧美 国产 精品| 久久久久资源| 一级日韩一区在线观看| 麻豆传媒一区| 亚洲综合网中心| 在线看成人av电影| 日本xxxxx18| 热99这里只有精品| 成年人网站免费视频| 色婷婷综合网站| 毛片毛片毛片毛片毛| 成人在线短视频| 熟妇高潮精品一区二区三区| 噜噜噜在线视频| 国产精品视频在| 久久午夜鲁丝片午夜精品| 成年免费在线观看| 在线观看日批视频| 日韩在线视频第一页| 免费精品99久久国产综合精品| 丝袜美腿亚洲一区二区图片| 国产成人午夜精品5599 | 国产福利片一区二区| 国产一二三av| 国产精品欧美日韩久久| 色播亚洲婷婷| 人妻熟女aⅴ一区二区三区汇编| 久久久久久国产精品视频 | 久久99久久98精品免观看软件| 日韩国产一区二| 久久美女高清视频| 亚洲精品免费在线| 91精品国产一区二区三区| 久久久久久国产精品久久| 咪咪色在线视频| 国产真实夫妇交换视频| 国产91在线|亚洲| 最近2019年好看中文字幕视频| 咪咪色在线视频| 久久国产视频精品| 亚洲最大色网站| 亚洲精品欧美日韩| 国产91丝袜美女在线播放| 国产精品1区2区3区在线观看| 欧美精品自拍偷拍| 成人h猎奇视频网站| 九九久久九九久久| 亚洲欧美国产中文| av男人的天堂av| a天堂在线视频| 亚洲中国最大av网站| 欧美成人高清视频| 欧美一区二区三区在线播放 | 欧美高清电影在线看| 欧美精品久久| 手机在线国产视频| 日韩在线观看第一页| 国产xxx精品视频大全| 制服丝袜成人动漫| 国产精品久久久久一区二区| 91丨九色丨蝌蚪| 免费成人av在线播放| 色综合网站在线| 亚州国产精品久久久|