久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

從Token到接口權(quán)限:Java后端微信API對接的權(quán)限控制實戰(zhàn)

從Token到接口權(quán)限:Java后端微信API對接的權(quán)限控制實戰(zhàn) 微信API對接這件事做Java后端的朋友應(yīng)該都有體會半數(shù)以上的聯(lián)調(diào)事故最后都出在Token上。不是微信返回的錯誤碼看不懂而是自己這套權(quán)限體系在并發(fā)、續(xù)期、多端登錄面前先垮了。我前后接過公眾號、小程序、企業(yè)微信第三方應(yīng)用從單機內(nèi)存緩存到分布式Redis從裸Token到JWT再到雙Token續(xù)簽踩過的坑攢了不少。這篇就把微信API開發(fā)里Java后端的接口權(quán)限控制和Token管理完整梳理一遍很多細節(jié)是官方文檔不寫、但線上環(huán)境一定會遇到的。1. 微信API對接中你面對的根本不是一種Token先把三種身份憑證分清楚很多人做微信開發(fā)時把Token當(dāng)成一個籠統(tǒng)概念這是后續(xù)所有混亂的根源。實際上在微信API場景下Java后端至少要管理三類完全不同的憑證它們的生命周期、存儲位置、失效策略各不相同。1.1 平臺級全局憑證公眾號/小程序的access_token這一類是微信開放平臺發(fā)放的全局調(diào)用憑證公眾號和小程序都有調(diào)用任何業(yè)務(wù)接口發(fā)消息、上傳素材、生成二維碼、獲取用戶列表等都必須攜帶它。特點是全局唯一、有效期7200秒兩小時、每天有調(diào)用次數(shù)上限公眾號是2000次通過IP白名單等方式可以提升到更高額度。關(guān)鍵點在于全局唯一。整個應(yīng)用只有一個access_token所有服務(wù)器節(jié)點、所有線程都要共享同一個值。如果你用本地內(nèi)存緩存每個節(jié)點各拿各的就會出現(xiàn)我這臺機器調(diào)接口成功、那臺機器調(diào)接口報40001的詭異現(xiàn)象。我在下面的章節(jié)會專門講緩存策略這里先記住一個結(jié)論微信的access_token必須是全局共享的Java后端一定要用Redis或類似中間件統(tǒng)一存放不能用JVM內(nèi)存。1.2 用戶級身份憑證網(wǎng)頁授權(quán)access_token/用戶憑證公眾號網(wǎng)頁授權(quán)、小程序登錄流程中用戶在授權(quán)后會拿到一個用戶維度的憑證。公眾號的網(wǎng)頁授權(quán)access_token有效期更短默認7200秒刷新用的refresh_token有效期長達30天而且每次刷新會作廢舊的refresh_token。小程序側(cè)的session_key則完全不公開給前端由code換回后只能保存在后端。這類憑證有個特點它和某個具體用戶綁定不是全局共享的。你可以把它存在Redis里key用userId維度設(shè)計設(shè)置與微信側(cè)一致的過期時間。很多人在這一步犯的錯是把用戶憑證和平臺憑證放在一起統(tǒng)一管理過期策略混用最后用戶明明還登錄著后端刷新時卻拿不到合法憑證去換新的導(dǎo)致所有用戶集體掉線。1.3 自建系統(tǒng)登錄態(tài)你的應(yīng)用自己的Token第三類是你在自己的Java后端里簽發(fā)的登錄態(tài)Token跟前兩類無關(guān)。用戶通過微信授權(quán)后你的后端確認了用戶身份然后自己發(fā)一個Token給前端后續(xù)所有請求都帶這個Token來訪問你的業(yè)務(wù)接口。這一類才是你在代碼里完全掌控的東西也是接口權(quán)限控制的主要抓手。我見過很多項目把這三類混為一談拿微信的access_token當(dāng)前端登錄態(tài)用的有拿session_key當(dāng)業(yè)務(wù)Token用的也有還有的自建Token直接照搬了微信7200秒的過期策略導(dǎo)致用戶每小時被迫重新登錄一次。正確的做法是三層隔離微信平臺憑證只用于后端調(diào)用微信API微信用戶憑證只用于換取用戶信息自建Token只用于你自家系統(tǒng)的會話管理。哪怕它們都叫Token存儲、續(xù)期、失效處理也要分開。2. 自建Token機制的設(shè)計取舍JWT、不透明Token和雙Token續(xù)簽自建Token是Java后端權(quán)限控制的基石但選型時很多人直接跟風(fēng)上了JWT或者干脆UUID一把梭上線后才發(fā)現(xiàn)問題。這套體系的核心指標(biāo)其實就三個可撤銷性、過期控制粒度、存儲開銷。2.1 JWT的適用邊界無狀態(tài)是優(yōu)點也是撤銷難的根源JWTJSON Web Token這幾年在Java圈熱度很高尤其是配合Spring Security的OAuth2體系。它最大的優(yōu)點是服務(wù)端無狀態(tài)Token本身攜帶用戶信息、角色、過期時間校驗時只需要驗簽不需要查數(shù)據(jù)庫或Redis。但微信API場景下JWT有一個致命軟肋無法主動撤銷。用戶注銷、被踢下線、管理員封禁賬號時只要Token還沒過期且簽名合法服務(wù)端就無法拒絕它。典型的妥協(xié)方案是引入Token黑名單Redis里存一份已撤銷Token的標(biāo)識但這就等于把狀態(tài)又引入了無狀態(tài)的優(yōu)勢大打折扣。我在一個電商小程序項目里用過純JWT方案運營后臺封禁一個惡意用戶后那家伙的Token還能再合法調(diào)用接口最多30分鐘直到我們把黑名單邏輯補上才解決。2.2 不透明Token一切盡在掌握中的常規(guī)選擇所謂不透明Token就是服務(wù)端生成一個隨機字符串UUID或SecureRandom生成存Rediskey是Token值value是用戶信息和權(quán)限快照過期時間由你自由設(shè)定。前端請求時后端從Redis查一次查到了就是合法請求查不到就是未登錄或已過期。這個方案在微信API場景里其實是最穩(wěn)的。理由很直接可以隨時刪除Redis里的key實現(xiàn)強制下線、踢人、封禁過期時間可以精確到秒還能通過Redis的TTL動態(tài)續(xù)期不需要引入JWT庫、密鑰管理、簽名算法代碼量小、出問題面窄唯一缺點是多一次Redis網(wǎng)絡(luò)開銷但對絕大多數(shù)業(yè)務(wù)來說這個成本可以忽略表JWT與不透明Token在微信API場景下的能力對比能力維度JWT不透明TokenRedis服務(wù)端狀態(tài)依賴無狀態(tài)不依賴存儲強依賴Redis主動撤銷踢人/封禁困難需要黑名單直接刪key即可過期時間精確控制依賴exp聲明不可動態(tài)改Redis TTL隨時可調(diào)跨端登錄/多設(shè)備管理難以區(qū)分同一賬號的多個Token可通過綁定標(biāo)識精確管理攜帶用戶信息內(nèi)嵌payload無需查詢需要查Redis獲取用戶信息實現(xiàn)復(fù)雜度需要引入庫、配置密鑰低純Redis操作2.3 雙Token機制access_token refresh_token的正確打開方式我現(xiàn)在的常規(guī)做法是雙Token配合使用access_token短時效通常2小時和微信平臺token對齊便于記憶每次請求攜帶校驗時查Redis驗證有效性refresh_token長時效7天到30天不等只在access_token過期時使用換取新的access_token交互流程是這樣的用戶登錄成功后后端同時簽發(fā)access_token和refresh_tokenaccess_token有效期2小時refresh_token有效期7天并持久化存儲。前端在收到401或約定的續(xù)簽狀態(tài)碼時攜帶refresh_token請求刷新接口后端校驗refresh_token有效后簽發(fā)新的access_token并返回給前端。如果refresh_token也過期了用戶才需要重新走微信授權(quán)登錄。這套機制的價值在于用戶體驗上一次登錄保持一周而安全上真正的核心憑證access_token始終是短時效的就算被截獲破壞窗口也控制在2小時內(nèi)。refresh_token本身的存儲要嚴格管理前端最好放在HttpOnly的Cookie里避免JavaScript讀取降低XSS竊取風(fēng)險。Java后端實現(xiàn)時refresh_token的簽發(fā)和校驗代碼和access_token類似但是存儲的Redis key要區(qū)分比如// access_token的key String accessKey user:token:access: userId : accessToken; // refresh_token的key String refreshKey user:token:refresh: userId : refreshToken;校驗邏輯上refresh_token的校驗要多一步確認它確實是被簽發(fā)給當(dāng)前用戶的同時對比Redis里存的refresh_token是否一致。這里有一個很隱蔽的坑如果你每次刷新時都重新生成了refresh_token也就是輪換那前一個refresh_token必須立即作廢否則就會有多個refresh_token同時有效用戶換設(shè)備時會出現(xiàn)連環(huán)失效的怪問題。我早期沒做輪換只刷新access_token不刷新refresh_token后來發(fā)現(xiàn)有些用戶的refresh_token被第三方截獲后長期有效嚇得我趕緊改成每次刷新都同時輪換兩個Token。3. 接口權(quán)限控制的落地代碼從攔截器到注解再到角色模型Token機制解決的是你是誰的問題權(quán)限控制解決的是你能干什么的問題。微信API后端里接口權(quán)限控制的常規(guī)實現(xiàn)路徑是攔截器解析Token → 注解聲明權(quán)限 → 權(quán)限校驗器判定角色 → 不通過則拒絕訪問。下面我逐步拆解。3.1 攔截器層的Token校驗Spring MVC里的統(tǒng)一入口Spring Boot下最直接的是實現(xiàn)HandlerInterceptor在preHandle里完成Token解析和用戶身份綁定。Component public class AuthInterceptor implements HandlerInterceptor { Autowired private StringRedisTemplate redisTemplate; private static final String USER_TOKEN_KEY user:token:access:; Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 如果請求的是非接口資源比如靜態(tài)資源直接放行 if (!(handler instanceof HandlerMethod)) { return true; } // 從Header獲取Token約定自定義Header名稱避免與標(biāo)準授權(quán)頭沖突 String token request.getHeader(X-Access-Token); if (StringUtils.isBlank(token)) { throw new BusinessException(401, 缺少訪問令牌); } // 從Redis查詢Token對應(yīng)的登錄態(tài)這一步同時完成了存在性和過期校驗 String userInfoJson redisTemplate.opsForValue().get(USER_TOKEN_KEY token); if (userInfoJson null) { throw new BusinessException(401, 登錄已過期請重新授權(quán)); } // 解析出用戶信息放入ThreadLocal或RequestAttribute供后續(xù)業(yè)務(wù)代碼使用 UserContext user JSON.parseObject(userInfoJson, UserContext.class); request.setAttribute(currentUser, user); return true; } }這段代碼有幾個容易漏掉的細節(jié)。第一HandlerMethod的判斷非常關(guān)鍵不加的話攔截器會把Spring Boot的/error端點或者其他非控制器請求也攔截掉導(dǎo)致報錯頁都無法正常顯示。第二錯誤處理上攔截器里拋出的異常要有一個全局異常處理器接收轉(zhuǎn)換成統(tǒng)一的JSON錯誤響應(yīng)否則前端收到的可能是Spring默認的500頁面而不是你約定的錯誤結(jié)構(gòu)。第三把用戶信息塞進request只是最基礎(chǔ)的做法追求性能的項目一般還會在解析成功后直接放入ThreadLocal但要注意在afterCompletion里清理ThreadLocal防止線程池復(fù)用導(dǎo)致用戶信息串號。3.2 自定義注解的權(quán)限聲明給接口打上權(quán)限標(biāo)簽光校驗Token還不夠接口還必須聲明自己需要什么權(quán)限。我用自研注解的方式在Controller方法上標(biāo)注需要的角色或權(quán)限碼。Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface RequirePermission { String[] value(); // 要求的權(quán)限碼如 order:create boolean requireAll() default false; // 多個權(quán)限是全部滿足還是任一滿足 }Controller里的用法PostMapping(/order) RequirePermission({order:create}) public ApiResultString createOrder(RequestBody OrderCreateReq req) { // 業(yè)務(wù)代碼 }這個注解的含義是只有持有order:create權(quán)限碼的用戶才能訪問/order創(chuàng)建訂單接口。權(quán)限碼的命名我推薦使用資源:操作的格式比單純數(shù)字編號可讀性強得多微信小程序的管理后臺里做菜單權(quán)限配置時也直白。3.3 角色-權(quán)限模型不做用戶維度冗長的權(quán)限列表用角色中轉(zhuǎn)最常用的權(quán)限模型是RBAC基于角色的訪問控制用戶掛角色、角色掛權(quán)限碼。用戶登錄后簽發(fā)Token時我把該用戶擁有的權(quán)限碼列表直接緩存進Redis這樣校驗時不需要每次去查庫。Component public class PermissionAspect { Autowired private StringRedisTemplate redisTemplate; Around(annotation(requirePermission)) public Object checkPermission(ProceedingJoinPoint joinPoint, RequirePermission requirePermission) throws Throwable { // 從攔截器階段綁定的用戶信息中取出用戶ID ServletRequestAttributes attrs (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request attrs.getRequest(); UserContext user (UserContext) request.getAttribute(currentUser); // 查出該用戶的權(quán)限碼集合優(yōu)先走Redis緩存兜底查數(shù)據(jù)庫 SetString userPermissions getCachedPermissions(user.getUserId()); String[] required requirePermission.value(); boolean pass requirePermission.requireAll() ? Arrays.stream(required).allMatch(userPermissions::contains) : Arrays.stream(required).anyMatch(userPermissions::contains); if (!pass) { throw new BusinessException(403, 無權(quán)限執(zhí)行該操作); } return joinPoint.proceed(); } }權(quán)限碼緩存需要確保一個核心邏輯用戶權(quán)限變更時必須能立即生效。我采用的方法是權(quán)限緩存key里帶一個版本號或直接在變更時刪除該用戶的權(quán)限緩存下次請求重新從數(shù)據(jù)庫加載。這里最大的教訓(xùn)是不要在權(quán)限緩存里加自動過期時間來保證更新除非你能接受最長過期時間內(nèi)的權(quán)限延遲。實際運營場景中給某用戶加個權(quán)限他10分鐘內(nèi)還是沒權(quán)限這種反饋已經(jīng)足夠讓你被投訴了。3.4 攔截器、切面、參數(shù)校驗的協(xié)作順序我的建議是責(zé)任鏈式組合第一個環(huán)是AuthInterceptor負責(zé)解析Token并綁定用戶第二個環(huán)是PermissionAspect負責(zé)基于注解做權(quán)限判定第三個環(huán)是Spring自帶的參數(shù)校驗。如果Token都沒有根本不需要做權(quán)限判定如果權(quán)限不夠也沒有必要做參數(shù)校驗和業(yè)務(wù)邏輯。這個順序不只是性能考量更是錯誤語義的分層——401表示你是誰的問題403表示你的權(quán)限夠不夠的問題400表示你的參數(shù)對不對的問題。前端可以根據(jù)狀態(tài)碼精確提示用戶進行不同的下一步操作。4. 微信側(cè)access_token的緩存與刷新并發(fā)場景下最容易翻車的環(huán)節(jié)前面三類Token中微信平臺級的access_token雖然不參與你的接口權(quán)限控制但它絕對是導(dǎo)致線上事故的重災(zāi)區(qū)。這一章單獨展開。4.1 全局access_token的Redis緩存方案與key設(shè)計公眾號/小程序的access_token互不通用所以Redis的key至少要把應(yīng)用類型帶進去。我的設(shè)計wechat:access_token:{appId}value直接存token字符串不存JSON因為沒什么別的元信息。調(diào)用微信API前先檢查Redis里有沒有這個key有就直接用沒有再調(diào)用微信的getAccessToken接口拉取并寫入Redis。public String getWechatAccessToken(String appId) { String key wechat:access_token: appId; String token redisTemplate.opsForValue().get(key); if (StringUtils.isNotBlank(token)) { return token; } // 加分布式鎖避免多個線程同時去拉取導(dǎo)致token互相覆蓋 String lockKey wechat:access_token:lock: appId; boolean locked redisTemplate.opsForValue().setIfAbsent(lockKey, 1, Duration.ofSeconds(10)); if (!locked) { // 沒搶到鎖的線程自旋等待通常對方會在幾百毫秒內(nèi)完成寫入 // 這里建議最多重試3次每次等待200毫秒再取不到就報錯 } try { // 雙重檢查搶到鎖后再次確認Redis里是否已有token token redisTemplate.opsForValue().get(key); if (StringUtils.isNotBlank(token)) { return token; } // 調(diào)用微信接口拉取新token token fetchFromWechat(appId); // 微信返回的expires_in通常是7200秒為了避免臨界點恰好過期 // 這里故意提前寫入比如實際TTL設(shè)置為7000秒 redisTemplate.opsForValue().set(key, token, Duration.ofSeconds(7000)); return token; } finally { redisTemplate.delete(lockKey); } }4.2 提前過期策略為什么把TTL設(shè)為7000秒而不是7200秒很多人把微信返回的expires_in原樣作為Redis的TTL這是隱患。原因有二一是網(wǎng)絡(luò)延遲和代碼執(zhí)行本身要消耗時間你從微信拿到token到寫入Redis之間可能已經(jīng)過去了零點幾秒二是當(dāng)token的實際剩余時間還有幾秒時你發(fā)起的請求如果恰好落在過期點上微信會返回40001錯誤碼invalid credential這時候你的程序還沒到觸發(fā)重新拉取的節(jié)點就會連續(xù)報錯。所以我會統(tǒng)一把TTL設(shè)置成比微信給定值少200秒相當(dāng)于一個安全余量。這不是精密的計算純粹是實戰(zhàn)中為了減少邊界條件問題而做的保守選擇。4.3 獲取token時的這個隱藏細節(jié)多個服務(wù)節(jié)點同時去拉取的連鎖反應(yīng)微信官方文檔里明確警告不可頻繁調(diào)用獲取token的接口否則會被封禁IP。線上應(yīng)用如果是多節(jié)點部署每個節(jié)點啟動時都會拉一次token寫進各自的內(nèi)存或同一個Redis里后寫的會把先寫的覆蓋掉。最危險的是如果你在不同節(jié)點上做了本地內(nèi)存緩存那么節(jié)點A拿到的token和節(jié)點B拿到的不一致當(dāng)微信側(cè)檢測到token被覆蓋獲取新token后舊token立即失效節(jié)點A的所有請求都會瞬間變成40001。處理辦法就是我上面代碼里展示的分布式鎖雙重檢查模式讓同一時間只有一個請求去微信拉token其他人復(fù)用。這個坑我在早期的單體應(yīng)用里沒遇到過一旦上了K8s多副本立刻就暴露了。4.4 與自建Token的關(guān)系你們之間少一個邊界還有一個很多人忽略的點微信的access_token和你自建的用戶Token雖然獨立管理但在接口上的調(diào)用時機是關(guān)聯(lián)的。用戶發(fā)起一次需要調(diào)微信API的操作時前端先帶自建Token請求你的后端你的后端再去調(diào)微信接口。如果微信access_token過期了哪怕用戶的自建Token完全正常這次業(yè)務(wù)也失敗了。所以我在后端封裝的微信API調(diào)用層里做了一個統(tǒng)一處理凡是調(diào)用微信接口返回40001且錯誤信息是access_token無效時自動刪除Redis里的舊token拉取新token并用新token重試一次這次請求。這個重試機制看似簡單實戰(zhàn)中能救回大量偶發(fā)的過期窗口問題。public String callWechatApi(String url, String body) { String token getWechatAccessToken(appId); String fullUrl url ?access_token token; ApiResult result httpClient.post(fullUrl, body); if (result.getErrcode() 40001) { // token失效清除緩存并重試 redisTemplate.delete(wechat:access_token: appId); token getWechatAccessToken(appId); fullUrl url ?access_token token; result httpClient.post(fullUrl, body); } return result; }但注意重試必須要有次數(shù)上限和日志記錄。如果微信側(cè)真的封禁了你的IP或者AppID重試一百次只會加重封禁程度。我通常只重試一次第二次仍是40001就直接拋錯并告警讓值班的人去查原因。5. 疑難雜癥排查實錄那些線上環(huán)境下才會遇到的Token問題最后一個章節(jié)集中復(fù)盤我在微信APIJava后端項目里真實遇到過的幾個疑難問題每一條都是排查半天甚至通宵換來的經(jīng)驗。5.1 現(xiàn)象用戶登錄后接口偶發(fā)401刷新頁面又正常復(fù)現(xiàn)路徑用戶通過微信小程序授權(quán)登錄后訪問一個接口偶發(fā)返回401用戶投訴后你讓前端強刷一次又正常了。這種偶發(fā)問題排查起來最惡心因為無法穩(wěn)定復(fù)現(xiàn)。根因前端在同一個頁面里并發(fā)發(fā)起了2-3個請求后端簽發(fā)的access_token只有一個而你在Token校驗過程中可能用了校驗后立即刪除Redis key的模式有些人為了嚴格確保Token只能用一次。并發(fā)請求同時到達第一個請求刪除了key第二個請求再查就查不到了于是401。正確的做法Token校驗不能有一次性語義除非你做的是一次性的掃碼接口。常規(guī)登錄態(tài)校驗只讀取Redis的值做比對絕不刪除。如果要做單點登錄只允許一個設(shè)備在線應(yīng)該用userId維度綁定最新的token而不是在每次請求時刪掉舊的。5.2 現(xiàn)象管理后臺操作正常但微信小程序端登錄總是提示登錄狀態(tài)已過期復(fù)現(xiàn)路徑后臺管理端用Web登錄一切正常小程序端用戶在7天周期內(nèi)頻繁被提示重新授權(quán)而且看起來沒什么規(guī)律。根因我在小程序端的登錄邏輯里要求前端必須在access_token過期前主動調(diào)用刷新接口而刷新接口依賴refresh_token但refresh_token的Redis過期時間設(shè)置成了和access_token一樣的2小時。前端拿著7天有效期的refresh_token去換新access_token時Redis里的refresh_token早就沒了所以刷新失敗只能重新走微信授權(quán)。這類問題的高發(fā)點在于代碼里出現(xiàn)了多個過期時間的字面常量寫的時候沒統(tǒng)一。我的規(guī)避辦法是在項目里建一個TokenPolicy配置類把所有過期時間集中管理并注釋標(biāo)明每一類Token的過期策略。一旦出現(xiàn)問題可以先查配置類而不是在代碼里到處找魔法數(shù)字。5.3 現(xiàn)象微信服務(wù)器回調(diào)通知處理失敗Java后端收不到事件推送復(fù)現(xiàn)路徑公眾號配置了服務(wù)器回調(diào)URL可是微信服務(wù)器推送的事件如用戶關(guān)注、支付成功通知后端一直沒收到或者收到了但是校驗簽名不通過。根因Token在這里指的不是前面說的認證Token而是你在微信公眾平臺配置的服務(wù)器配置里的Token它用于參與簽名校驗。這個Token是你自己設(shè)定的任意字符串微信推送消息時會在URL上帶上timestamp、nonce、signature參數(shù)你的后端需要用Tokentimestampnonce拼接后做SHA1哈希對比signature是否一致。很多人在這里把自建的用戶Token跟這個回調(diào)Token搞混把回調(diào)校驗邏輯里用的Token從配置文件里換掉了然后所有回調(diào)都被拒。排查思路如果你確認URL和事件推送都正常但簽名一直校驗失敗先看你是不是真的從請求參數(shù)里拿了timestamp和nonce而不是從配置文件里的某個定時任務(wù)里拿的值。另外微信簽名校驗有個比較坑的地方timestamp和nonce參數(shù)名與你自己的參數(shù)有可能沖突如果你在框架層做了統(tǒng)一參數(shù)處理可能把它們改名了導(dǎo)致校驗時拿到的不是微信原始值。5.4 現(xiàn)象JWT Token過期后前端拿refresh_token去續(xù)期偶爾成功偶爾失敗復(fù)現(xiàn)路徑使用雙Token機制前端在access_token過期后調(diào)用刷新接口發(fā)現(xiàn)大約10%的概率會失敗失敗時返回401用戶重新登錄后恢復(fù)。根因我用的是JWT作為access_tokenrefresh_token存儲在Redis。刷新接口的邏輯是先校驗refresh_token在Redis中有效然后簽發(fā)一個新的JWT access_token同時對refresh_token也做了輪換重新生成并更新Redis。輪換后的舊refresh_token會被刪除。問題出在并發(fā)場景如果前端在兩個請求里幾乎同時調(diào)用了刷新接口比如頁面恢復(fù)了多個掛起的請求第一個請求輪換了refresh_token第二個請求帶著舊refresh_token再來舊的已經(jīng)被刪了于是校驗失敗。解決方案有幾個層面前端必須對刷新接口做唯一化處理同一時刻只允許一個刷新請求在途其他請求等待其結(jié)果后復(fù)用新的access_token后端可以引入短期并發(fā)容忍比如刷新接口在檢測到舊refresh_token已失效時再查一下Redis里是否有新refresh_token與當(dāng)前用戶關(guān)聯(lián)如果新Token剛生成時間戳在幾秒內(nèi)允許拿著舊token也換取一次同樣的新token這個問題的根本矛盾是輪換語義和并發(fā)容忍之間的沖突。微信的refresh_token機制里也明確說了能多次使用就是為了容忍網(wǎng)絡(luò)重試。我當(dāng)時把刷新接口改成校驗通過則必定返回當(dāng)前有效的access_token而不是必須接受攜帶的那個refresh_token才算數(shù)徹底解決了偶發(fā)失敗。5.5 調(diào)試接口時怎么快速驗證你的Token體系是否健康最后分享一個調(diào)試技巧微信API開發(fā)里接口權(quán)限控制和Token管理的問題很多時候不是邏輯錯了而是不知道當(dāng)前系統(tǒng)里的Token處于什么狀態(tài)。我的做法是在后端寫一個只有運維權(quán)限能訪問的診斷接口一鍵輸出當(dāng)前登錄用戶數(shù)、Token過期分布、Redis命中率、微信access_token剩余有效期、最近1小時401/40001錯誤統(tǒng)計。這個接口不需要太花哨用幾個Redis命令加一個簡單聚合就能完成但排查問題時效率翻倍。GetMapping(/internal/auth/health) public ApiResultMapString, Object authHealth() { MapString, Object report new HashMap(); // 自建Token總數(shù) report.put(onlineUserCount, redisTemplate.keys(user:token:access:*).size()); // 微信access_token剩余有效期 String token redisTemplate.opsForValue().get(wechat:access_token: appId); Long ttl redisTemplate.getExpire(wechat:access_token: appId); report.put(wechatTokenTtl, ttl); // 最近N小時的401錯誤統(tǒng)計從日志聚合此處省略實現(xiàn) return ApiResult.success(report); }這個診斷接口一定要限制在內(nèi)網(wǎng)或加獨立的強Token保護否則等于把系統(tǒng)內(nèi)部狀態(tài)暴露給攻擊者。我一般直接禁止外網(wǎng)映射訪問。微信API和Java后端配合下的Token管理說到底是一個分層分工的問題微信自己的憑證管好時效和緩存自建Token管好安全與權(quán)限兩者通過刷新重試機制銜接。把每一層的邊界畫清楚很多看似玄學(xué)的問題其實都能從某一層的Token生命周期管理不嚴謹里找到答案。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
秋霞鲁丝午夜无码一区二区三| 九九性爱网| 欧美精品人妻视频| 亚洲天堂人妻熟妇视频| 五月天啪啪| 超碰99在线| 久久久久久久久久久久黄色| 淮穴色AV| 超碰97起碰| 草草影院最新网址| 伊人操| 好舒服视频| 97久久精品亚洲| 国产成人无码啪| 国产精品视频在线观看| 中亚黄色三级大片| 老熟女熟妇| 91人妻尻屄视频| 色网站导航大全| 熟女91网| 欧美亚洲清纯| 中文子幕一二三| 国产精品小视频一区二区三区| a v网站在线播放| 免费家庭乱伦视频| 国产成人亚洲精品无| 麻豆色约约| 99re8超碰| 久久免费精彩视频| 超碰成人免费| 久久鲁干| 人人操人人狠狠操| 国产一区二区三区精品观看啪| 51国产午夜精品视频| 夜夜骑夜夜操| 曰韩人妻中文字幕在线 | 国产熟女一区二区| 9美女超碰在线免费观看| 午夜后入| 伊人亚洲综合| 亚洲午夜精品久久久中文影院| 91欧美综合在线| 青青草国产亚洲精品久久| 婷婷伊人| 密桃99999| 99色色网| 农村妇女一级二级三级视频| 乱色视频中文字幕| 五月丁香激情综合| 亚洲在线A| 精品中文一区二区| 亚洲欧美综合图片| 男女一进一出视频久久| 国产精品福利资源在线尤物| 精品久久无码午夜福利| 东北丰满熟女国产一区| 日本熟妇人妻中出视频| www五月| 蜜桃传媒一区二区亚洲| 爱爱动态试试看6 0秒| 亚洲最大的黄色电影网站。| 色香91| 97精品人妻一二三四| 国产高清MV操逼视频| 国产真乱mangent| 粉嫩av在线一区二区| 首页中文字幕中文字幕免费| 中文一区在线视频| 97色婷婷| 青草香蕉网| 日韩中文字幕2020| 久久99九九九九6666免费观看软件| 色九九综合AV| 亚洲人妻在线精品| 亚洲欧美日韩精品久| 九九伊人网| 国产熟女少妇一区| 亚洲一区制服诱惑| 免费操逼91| 欧美人人曰人人操人人射射| 性爱av在线免费观看| 五月丁香综合| 久久久精品九| 91精品微拍福利| 国产 亚洲 丝袜 制服| 91九色首页| 丝袜内射| 91综合网在线| 91精品无码人妻系列| 九九热免费视频| 丝袜狠狠草尤物人妻av91| 亚州熟妇精品| 超碰97欧美| 亚洲日本成人动漫| 丝袜美女诱惑 91 视频| 伊人热综合| 夜夜草网站| 操逼精品视频| 91在线视频国产网站| 色欲蜜臀AV| 青青草九九九九九| 久久久无码精品人妻二区 | 成人无遮挡毛片免费看| 激情丁香婷婷| 美女网站黄页| 日本三级一区二区 在线| 99亚洲精品| www色日本| 国产天天骚| 中文字幕在线免费观看 | 91蜜臀熟女| 色悠久久久av| 岛国激情视频软件| 国产高清不卡视频| 2024黄色视频| 五月婷婷影院| 97亚洲中文| 第一高清av中文字幕| 97色涩| 九九九九九精品| 日韩免费看黄片| 丁香婷婷激情五月天无毒不卡| 日本女人久久久| wwwcaobibi| 色超碰综合| 欧美激情性久久久久久| 国产欧美后入| 无码高清专| 日韩无码AB| 情趣丝袜无码操逼视频| 国产精品。| 加勒比在线视频一区二区三区 | 欧美乱伦专区| 丰满人妻一区二区三区在线| 欧美日韩操逼动图| 热热色青青草| 九九热在线视频| 国产精品伦理| 欧美丝袜激情| 中文字幕狠狠玩| 婷婷五月天色网| www网站黄| 亚洲少妇视频| 丰满搜索结果 -第18页- 久久高清无码| 麻豆久久精品亚洲精品88| 日本人体九九九九九九| 欧美Ⅴ性爱| 青青草色情网站视频| 高清在线不卡一区二区 视频| 丝袜综合| 国产在线精品偷| 久久久日本电影| 欧洲无码一区二区| 色嗨嗨在线| AV天堂因数| 国产精品久久久久久夜夜夜| 日韩av一级黄片| 久久久无码精品人妻二区 | 欧美激情色婷婷花野真衣一区二区| 中文字幕精品一区二区精| 欧美日韩系列| 美骚妇av高清在线| 制服乱伦| 以及麻豆国产入口在线观看免费| 中文一区二区| 观看免费区二区三区二| 极品美女福利在线观看| 国产肏逼网站| 殴美色网| 欧美与日韩97| 成人AV素股で擦久久| 国产精品黄色三级av| 久久久久久十| 中文字幕女同在线| 国产精品白虎| 久99视频| www国产天美久久久| 欧美色交| 淫骚熟女一区二区三区| 久久国产三区| 无码自拍SM| 午夜国产成人精品视频 | 欧美日韩成人在线| 麻豆国产96在线| 国产午夜在线观看视频| 色噜噜狠狠色综无码久久合欧美| 插插综合网天天影视网| 九九九九九九九九九九精品视频| 97久精品| 亚洲色图大香| 人人扣人人操| 超碰99在线观看| 日本国产高清色www视频在线| 97 色综合| 亚洲系列欧美| 久久伦理视频久久大香蕉视频| 插入综合网| 伊人久久婷婷| 99碰碰| 欧美日韩操逼嗦吊| 欧美强奸一区二区诱惑| 在线看片国产精品每日更新| 国产日韩在线播放av| 精品无码欧美三级| AV麻豆免费一区| 九九九九热| 97爱亚洲| 97国产精品视频| 91狠狠综合久久| 中文字幕青青草| 中韩中文字幕在线观看| 午夜九九九九九九| 99国产精品| 一级一性爱免费视频| 色综合一区二区三区| 婷婷10月天青娱乐| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 伊人欧美大香蕉视频| 久久色AV线| 日本三级韩国三级美三级91| 一本大道青青| 99re这里只有精品9| 天天做天天爱| 一区二区三区成人高清视频| 欧美人妻精品一区二区| 国产无马av| 五月综合激情| 91偷拍欧美亚洲| 婷婷五月天无码| 夜夜做夜夜爽精品视频| 搡老女人老91妇女老熟女| 亚洲无992tv| 激情小说图片亚洲首页| 亚洲欧洲综合成人av一区| 逼操网站| 中文字幕啊啊啊在线观看视频| 懂色AV一区二区三区| juliaann精品熟女一区| 国产丸一视频| 欧美超碰在线| 精品亚洲国产成人av网站| 天天日天天干天天整| 骚逼高潮久久精品| 久久视网78| 中文日韩欧美熟| 天天综合中文字幕 91| 一级做受视频免费是看美女| 精品国产丝袜一区二区三区乱码| 五月天丁香网| 欧色性第一页| 97在线免费观看视频| 日本欧美韩国国产在线| 亚洲精品国产精品乱码不99| 91 国产丝袜在线放观看 | 国产女人高潮嗷嗷嗷叫小说| 国产最新AV| 午夜福利在线视频1000| 亚洲一区二区中文字幕| 操逼免费视频无码国产| 青青草日本无码| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 新版天堂中文资源8在线| 婷婷久草一区二区三区| 欧美专区17页| 欧美日韩日产免费网站看| 丁香五月天啪啪| 国产日韩人人| 成人小说另类在线| 色香阁在线| 欧美激情一| 亚洲成人精品在线一区| 99热这里只有精品99| 黑人与人妻| av网站免费看| 天天插天天干| 综合熟妇一区二区三区| 操逼啊啊啊91| 久草在| 国内精品嫩模A∨私拍小视频| 五月天色综合| 成人一二三区| 男人的天堂亚洲| 欧美伊人电影| 欧美在线干| 99re在线视频国产| 国产精品69人妻无码久久久| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 欧美 亚洲 偷拍自拍| 女生自91网站| 日本高清免费一本视频在线观看| 色狠狠一区二区三区香蕉| 久久久无码av精| 久色99999| 亚洲av国产av综合av卡| 伊人国产视频| 草草影院最新网址| 无卡一区=区| 日本 色 导航| 免费成人在线熟妇网| 天天谢天天干| 97在线观看免费视频l| 国产精品久久妻无码网站| 国模一区二区三区| 高清有码一区二区| 亚洲AV无码久久精品蜜桃小说| 国产91福利小视频在线观看| 国产高清不卡视频| 国模不卡| 抽插一区二区视频| 99精品久久| 人妻第一页| 这里只有精品久久| 免费成人自拍视频在线| 欧美伦乱爱| 黄色网址在线免费观看| 另类欧美综合| 干b在线性社区| 精品成人亚洲午夜电影| 色亚州人久干视频在线观看免费版| 少妇3P性爱自拍| 国产一区二区久久| 91中文在线| 午夜操一操| 久久夜嗨| 日本免费亚洲欧美| www熟女乱伦com| 91九九九小逼| 成人看片网站| 先锋色眉乱伦资源| 欧洲综合色图| 福利大香蕉| 人妻天堂综合网| 狠狠色噜噜狠狠狠狠2018| 国产美女口爆吞精| 怡红院视频在线| 久久男人精品| 99国产精品| 亚州熟妇精品| 国产精品一区人妻精品阁在线| 性久久久| 9久久精品| 色天堂综合| 久操大香蕉| yaouchengrenav| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 蜜臀av一区二区三区免费观看| 久久久亚洲Av| 欧州91高潮| 欧美熟女丝袜| 婷婷香网站| 伊人天堂在线| 乱伦系列一区二区| 乱伦熟女专区| 99夜夜操| 色哟哟AV| 中文字幕AV片| 啊啊啊快操我视频| 天天日B狠狠操| 亚卅熟女乱色| 国产精品自在自拍视频| 国产又黄又爽又刺激久久久久久| 久久久无码精品人妻二区| 青青草日本中文字幕| 91大学精品激情戏| 欧亚在线视频| 亚洲日韩美女中文字幕乱| 女人综合网| 台湾佬中文娱乐网久久久久久久久久com| 亚州精人品大香蕉| 99无码视频| 99热在线观看| 亚洲高清无码在线桃色| 亚洲国产一区二区入口| 日韩综合成人免费视频| 成人小说另类在线| 久久国产AⅤ| 神马麻豆福利院| 久久精品国产97欧美精品亚洲| 天天做天天爱天天爽AV| 午夜欧美J进J出白浆流出久久久| 亚洲午夜免费狠狠干| 亚洲成?V人片在线观看福利| 午夜精品视频777| 一级特级aaaa毛片免费观看 | 婷婷丁香成人| 曰韩av中文字幕专区| 中文字幕亚洲永久精品| 午夜福利av电影在线| 99老司机精品视频在线观看| 成人aⅴ一区二区三区| 69少妇一区二区| 中国操逼无码| 香蕉久久AⅤ...| 国产又色又粗又黄又爽| 国产精品视频自拍在线| 老司机射| 久久人人爽人人爽人人片Ⅴ| 99热亚洲| 丝袜狠狠草尤物人妻av91| 国产怡红院| 求求你操操我| 97综合久第一页| 后入日本1234| 99999亚洲| 国产美女高潮| 午夜a成v人电影| 精品人妻一区二区三区四区石在线 | 无码丰满熟妇一区二区浪潮AV| 亚川综合视频| 久久久久亚洲Aⅴ无码| 手机看片1025| 夜夜嗨AV一区天天| 操死我了嗯嗯嗯| 91日日夜夜| 欧美人妖内射| 在线观看一级α片刺激高潮视频| 日韩视频啪啪| 偷窥自拍亚洲色图| 精品少妇人妻| 97久久国产| 亚洲AV无码乱码| 久久欲| 亚洲一区日韩| 久久婷婷在线观看视频| 久久影视二区三区行押| 免费国产视频| 亚洲91在线播放影院| 午夜黄色免费在线观看| 欧美色三级片91| 久久99草| 午夜精品久久久| 欧美麻豆成人同性GⅤ在线| 激情婷婷| 亚洲欧洲无码一区夜| 色女免费在线观看视频网址| 婷婷激情四射| 这里是精品| 求求你操操我| 九九超碰综合网| 精品 码产区一区二-1080P高清在线www-B029AV | 丁香五月综合| 青青伊人久久| 成人精品无码| 欧美国产日韩高清在线| 中文字幕片| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 乱论91| 920日本午夜免费| 嗯嗯啊好大| 熟妇色99| 色九区| 91黑丝操| 中日亚韩免费视频| 亚洲美女精品| 97干97色| 色性综合| 亚洲毛片基地专区| 中文字幕性感少妇av| 九九夜精品九九在线| 欧美热图99| 亚欧成人中文字幕一区| 新精精品久久精品| 色狠狠 - 百度| 欧美性爱一内片一区二区三区| 中文字幕青青草| 91碰超| 97天天综合网| 摸奶性爱视频网站在线免费播放| 久热伊人99re| 激情五月天中文字幕色| 女同在线视频一区| 亚洲毛片基地专区| 99少妇精品视频| 美女91在线| 不卡啪啪视频| 97 国产精品| 日本国产欧美高清在线| 天海翼久久| www.久久最新地址| 91n免费处女| 亚洲精品影视老司机| 人妻酒店出差被中出免费在线播放| 欧美色网| 情色五月天久久久| 一区二区三区黄色片a| 大香蕉国产中文自拍| 小视频国产| 亚熟hd视频在线| 韩国黄片aaaa| 91精品国产长腿丝袜美女| 1769精品一区二区三区| 精品久久97| 小泽玛利亚一二三| 天天草天天日| 中国小夫妻勾搭露脸淫荡对白| 久久久久亚洲av综合波多野制衣| 欧美第一页| 欧美性爱五月天| 欧美碰碰综合色| 大香蕉 222| 在线色导航| 91九色丰满高潮| a久久| 明星性猛交ⅹxxx乱大交| 91色图片| 免费一级毛片在线视频观看| 欧美在线啊啊| 综合天天网| www九九热| 久久AV无码AV| 在线情色电影 91大| 久久婷婷视频| 成人无码在线超碰网| 久久↗↗| 女色视频社区| 婷婷视频在线免费观看| 性色aV一区二区三区噜噜| 中国黑人三级片网站上区| 思思在线免费视频| 91丨国产丨白浆秘 洗澡动漫| www.男人天堂| 美国美女AV在线| 亚洲av综合色区无码一| 亚洲久久久| 9999九九九久久久| 九九热精品在线| 在线中文字幕极品av| 久久久亚洲| 欧美性Fer办公室秘书| 国产精品肉丝自拍| 色色五月婷婷| 深夜激情无码| A级毛片在线看免费| 日韩欧美麻豆| 青青欧洲黑| 一二三啪啪专区| 久久美女福利是上海美女| 欧美大波激情xxxx| 超碰2017| 久久久久成人网| 东京热99999| 色噜噜人妻丝袜AV资源| 久久天天性久久伊人| 人人看人人摸人人色| 秋霞网—男女啪啪亚洲免费体验区 | 精品视频久久久久九九九九9999| 国产白嫩漂亮KTV在线| 999久久久免费精品国产牛牛| 欧色网址| 人妻夜爽夜夜爽| 偷拍片久久| 天天摸夜夜操视频| 男生女生啊啊啊啊| 九月AV| 亚洲熟妇乱女区二区三区| 久久99久久99久久99人受| 日韩,欧美,中文在线| 亚洲阿v天堂无码z2018| 一个色导综合| 激情小说图片亚洲首页| 久久性爱视频免费看| 国产农村妇女精品| 91在线视频国产网站| 精品福利| 色波多| 岛国免费视频在线| 国产成人 综合亚洲 天堂| 日韩三级在线观看网站| 日本人妻丰满熟妇久久久久久| 久久狠狠色噜噜狠狠狠狠97| 国产兽交视频在线播放| 免费a级毛片av无码久久精品中文字幕| 精品人妻一区二区三区在| 一区二区高清视频| 视频国产成人精品日本亚洲18| 欧美人与动性人交a| 亚洲影院无码在线| 日韩黄色av中文字幕| 欧美一区二区三区互相| 国产东北女人在线视频| 亚洲天堂7777| 狠狠色婷婷777| 丁香啪啪| 91在线美女| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美性暴力猛交XXXX| 亚洲中文字幕噜噜噜久久久| 色综合中文字幕不卡| 夜夜高潮夜夜爽| 欧美在线l亚洲| 91精品婷婷国产综合久久| 色淫网站优优视频| 91国产操逼视频| 日韩激情啪啪啪| 国产成人精品日本亚洲语言| 天天肏美女| 91天天爱| 国产精品久久久久久久久久久久久久吹 | 春色综合网| 91大学精品激情戏| 丝袜性亚洲| 欧美激情亚洲情色| 蜜臀久久99精品久久久| 99re公开精品免费视频| 69人妻精品一区二区绯色| 老师充足的奶水小说| 国产热av| 国内毛片欧美香蕉精品| 天天草天天干天天日| 欧美日韩情色一区二区| 婷婷九月国产| 欧美黄色手机在线观看| 动漫爆乳3D奶水一区在线观看| 久久99国产综合精品女同| 91超碰在线播放| 免费AV中文网在线观看| 国产 丝袜 欧美中文 另类| 激情小说五月天| 久草男人天堂| 日韩性爱小视频| 欧美 亚洲 偷拍自拍| 动漫区日韩区欧美区| 欧美激情视频一区二区| 91丨熟女丨丰满熟女| 日本精品国产视频| 亚洲日韩国产精品| 9l视频自拍9l九色成人| 亚洲的天堂网| 中文字幕精品一区二| 五月天婷婷欧美三区| 欧美特黄视频网站| 亚洲精品国产熟女久久久久久| AV色天香在线| 超碰97 线线 在现| 五月婷婷色色| 东京热伊久| 艹少妇网站| 久干网| 欧美性爱无码一区二区三区| 欧美日韩222| 超碰91在线| 天天天天操| 十八禁黄色| 天堂种子在线www网资源| 激情五月天校园春色网| 色就色综合| 麻豆一区在线| 国产一区二区三区白丝| 国产91精品久久久久久久网曝门| 伊人国产成人av网站| 日韩亚洲美女一区久久| 日日爱99| 久久久久久久少妇| 丁香婷婷五月| 超硑97精品| 欧美五十路熟| 久久久久网站-538在线视频-欧美永久乱码 | 天天日日舔舔| 日韩无码人妻| 91色爽欧美| 在线观看高清AV| 在线观看视频91| 日本操逼视频导航| 亚洲久久天堂| 91在线|亚| 91综合色| 国产成人主播| 亚洲国产高清福利视频| 78精品在线| av天天在线观看| V A在线| 色大师网站www永久网站视频| 亚洲AV无码AV吞精久久久久| 日韩无码精品综合久久| 美欧老女人97| 日韩欧美亚洲一区二区三区影院| 亚洲高潮影院| 蜜臀精品1区2区| 性爱视频无打码在线观看| 男人的天堂在线| 性爱av在线免费观看| 少妇淫妇久久久久久久| 国产精品久久9| xxx0国产在线播放| 五十路三区在线| 亚洲淫乱骚妇AV| 国产精品视频白浆免费| 少妇久久久久久| 男人网站婷婷| 大香交伊人网| 涩涩这里只有精品视频| 91久久婷婷| 伊人一区二区三区| 久操精品网| 国产狂喷潮在线精品| 一区二区播放| 欧美综合加勒比在线| 亚洲色 国产 欧美 日韩| 欧美AB在线| 91成人社区| 亚洲午夜免费狠狠干| av一区二区三区四区| 久伊人网78| 日韩一区二区熟女| 在线观看日韩av不卡| 男女一进一出视频久久| AV男人天堂网| 久久精品老司| 盗摄 精品 另类 一区| 国产中文字幕曰本毛片| 免费a v| 96国产精品| 蜜臀久久久国产| 亚洲有薄码区日本系列中文字幕| 亚洲国产成人精品无码专区| 91P0RNY大屁股人妻| 人妻蜜桃臀| 激情综合网一盗摄| 国产a级精品| 91校园春色长篇| 国产91久久九九免费精品无码| 国产真乱mangent| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 一道α片欧美| 亚洲天堂男| 一区超碰一区| 久久视频少妇美女| 欧美 牲| 乱码熟妇人妻久久久| 一本道综合色图| 九九久久综合| 天堂种子在线www网资源| 欧美精品23| 思思热在线视频免费| 2020中文字幕在线观看| 亚洲精品蜜桃久久久| 97在线欧| 欧美,日韩,中文,另类| 久久机热| 啊啊在线| 在线天堂资源亚洲| 九t超碰| 超碰99re| 天天综合~91| 97天天日| 欧洲黄色网| 51久久夜色精品国产麻豆| a片在线播放| 日本黄色精品专区网站| AV一区观看| 国产精品毛片?v一区二区三区| 免费啪啪av| 探花在线免费观看视频国产一区| 成人三一级一片aaa| 国产精品女久久久久av爽| 永久免费发布性爱网| AV污污污污| 欧美一区二区三区日韩| 毛片电影一区二区三区| 欧美夜夜狠| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 熟妇在线视频一区二区| 性站| 四虎AV影视国产精品亚洲精品| 亚洲熟久久| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 亚洲男人天堂手机版| 欧成人精品H无码| 伊人操你| 人人干人人操人人..com| 欧美在线播放aaaa| 青青草九九九九九| 成人热久久精品| 国产女主播视频在线观看| 日日骚网站| 中日韩免费看男女操逼大全| 久久人人爽爽人人爽人人片αV| 操逼网站视频漫画国产| 天堂av2019| 精品999日本| 传媒在线观看一区二区三区| 国产精品一二三区18| 二男一女成人A片| 久久综合99| 老汉网| 久草精品在线| 天天色天天干天天爱| 日韩无码专区| 1二区9| 啊啊啊免费视频| 激情小说成人日本无码一| 91在线色综合| 亚洲欧洲无码一区夜| 鸥美中出| www黄片免费看com| 国产精品对白内射| 色97国产69香蕉| 国产在线视频二区| 夂久色| 99精品在线| 午夜一级免费毛片| 蜜臀久久99精品久久综合| 曰韩香蕉97| 超碰97人人cao| 婷婷伊人| 中文熟女五十乱码在线| 亚洲一区日韩精品| 偷拍伦理视频| 欧美三四五区| 久久久无码av精| 91在线色| 国产一国产一级毛片古装| www.av在线观看| 夜夜操中文字幕| 国产成人超碰在线| 午夜精品99久久久久传媒| 蜜桃香蕉久草精品在线| 无码国产Av| 人妻精品一区二区全免费| 另类图片天天影视| 婷婷午夜| 综合网少妇| 精品一区二区亚洲国产| 国产视频第2页| 韩国一级婬片A片无码天美| 欧美亚洲激情小说| 日韩有码专区| 欧洲色色| 亚州性色| 国产精品交换一区二区| 99久久99九九99九九九| 日韩性爱高清免费视频| 五月天亚洲网| 人、人、摸,人、人、草| 日日嗨AV一区二区夜夜| 逼操网站| 超碰在97| 国产美女mm131爽爽爽爽| 亚洲熟女乱综合一区二区三区| 成人免费视瓶| 亚洲天堂自拍| 超清福利精品视频在线| 丝袜综合| 超碰成人公开| 日韩色图 一区二区| 国产麻豆一级精品视频| 91高清日| www.99热| 一区二区三区美女超清| 久久免费看高潮毛片韩国| 超碰在线欧美性爱激情| 亚州 综合 色图| 乳欲人妻办公室奶水| 人妻超碰青青草98| 丁香五月激情啪啪| 加勒比伊人| 97 视频在线| 一级特级aaaa毛片免费观看| 一摸二插三插| 日韩精品99999| 黄色免费网| av72网| 久久婷婷精品| 午夜丁香| 1240青青草一区二区三区视频天爱| 4141514逼喷水三级片| 国产精品爱欲| 一二区在线观看视频| 日本91白丝| 人妻偷拍一区二区三区| a人片中文字幕一区二区| 大香蕉乱伦视频网| 青娱乐休闲视频在线观看| 天天舔天天日天天射| 国产乱伦一二三区| 极品销魂美女一区二区| 秋霞福利网| wwwss在线观看| 国产精品日韩在线一区| 亚洲做性| 综合网亚| 99热综合| 国产91乱伦| 一区二区视频在看| 亚洲综合性网址| 99性爱| 亚洲成人免费中文字幕| 97碰碰色| 国产第二页| 国产在线76页| 日韩去日本高清在| 成年人黄色视频免费| 99这里只有精品| 九九成人精品| 69超碰综合| 國產尤物AV尤物在線觀看| 中文字幕欧美日韩三级| 欧洲亚洲综合| 日本一片一区| 俺去也婷婷| 亚洲国产精品成人无码久久久| 99re这里只有精品9| 999 久久久| 暖暖精品二区三区观看| 国产精品视频精品一二| 国产黄色视频久久| 国产一区在线播放| 超碰9 7女人| 久久99草| 2019AV天堂| 国产成人亚洲精品自产在线| 99久久精品国产高潮| 翔田千里AⅤHD无码| 久久久久久久97| 另类老少妇| 亚拍在线| 久草精品视频| 91新在线欧美| 有码免费观看| 色精品极品| 久久午夜伦| 激情综合五月丁香| 激情五月天社区| 中文字幕交换人妻| 操逼片国产| 青娱乐欧美激情一区二区| 国产精品日本无码A片| 熟女人妻精品一区二区视频| 欧美色亚洲色| 97中文字幕一区| 99热国产精品| 亚洲加勒比色图| 制服丝袜第二页| 中文一区在线日| 欧美天堂亚洲电影院一区在线播放| 亚洲人在线成线成人| 97亚洲国产影视| 久久精品免费| 精品国产网站| 亚洲自拍欧美国产首页网曝| 狠肏骚人妻| 任我爽视频在线观看| 久久9久9久99久9久9| 久久久久久性爱片| 大鸡吧尹人在线| 青青草在线视频人人想人人上| 国产精品乱人伊人网| 色婷婷综合久久久久中文一区二区| 91超碰人人| 91新在线欧美| 综合97亚洲| 97操综合| 亚州欧美在线| 中文字幕99999| 日韩有码 一区二区三区| 欧美性生活男人的天堂| 国产一级内射无挡观看| 美女写真| 99爱爱| 91女神在线视频| 伊人操操| 精品久操| 日本不卡五区| 日韩性爱1级片视频| 欧美激情中文字幕另类小说| 91超级碰碰碰| 国产精品视频电影| 色香伊人| 亚洲熟女人妻中文字幕一区二区| 97视频在线| 自拍视频一区在线观看| 久久99网站| 大香蕉伊人亚洲| 98超碰日本| 青青青在线高清视频在线一二三四区 | 欧美啪啪色吧在线| 91视频伊人| 国模精品娜娜一二三区| 91天天日| 大但人体久久久久| 日本色色色网站免费看不卡| 在线a v| 久久男人的天堂国产| 九一精品牛牛一区二区| 情色图区| 内射老妇BBWX0C0CK| 熟女视频久久| 欧色综合| 麻豆熟妇乱妇熟色A片在线看| 亚洲无码 国产无码| 国产福利小视频高清在线观看| 懂色AV一区二区三区| 国产噜噜噜噜噜久久久久久久久| 亚洲欧美在线丝袜| 很黄很色的视频在线观看| 五月丁香六月激情| 超碰98综合网| 欧美一级A一级a爱片久久| 人人操人人摸人| 99热精品青草在线 | 极品色www影院| 精品乱子一区二区三区99| 亚洲情色 自拍| 久久久亚洲高清不打码| 中文字幕二区日韩天堂| 大香蕉日韩欧美| 人人摸.人人色| 亚洲 欧美 中文 日韩超碰| 97超碰色中文字幕| 91香蕉视频在线观看免费| 首页亚洲国产高跟丝袜诱惑视频| 加勒比五月天| 国产黄色在线播放观看| 夜夜爽77777| 黄色成年| 欧美啪啪女女| 久久久九九| 91九色蝌蚪在线观看| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 欧美超碰人妻97| 国内毛片热久久思思热| 五月天婷婷色| 麻豆熟妇乱妇熟色A片在线看| 免费在线黄片视频| 女人的天堂大香蕉网| 黄色免费网| 亚洲男人天堂网久久| 亚洲久热| 亚洲性综合11| 亚洲无码久久久久久久| 福利一级版子| 97在线观看播放视频| 情色五月天久久久| 欧美呦呦性爱| 亚洲码和欧洲精品激情系列| 91久久久亚洲| 伊人五月天激情| 亚洲国产精品99久久久| 超碰在线在公开超碰在线在公开| 亚洲一区二区 麻豆传媒| 国产成人91一区二区三区| 亚洲av夫妻操穴网| 欧美91在线| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 夜夜一区二区| 蜜臀久久99精品久久久久久成人小说 | 欧美色图人妻| 国产综合永久精品日韩鬼片| 欧美在线视频观看一二三四区高清 | 天天操天天插| 国产精品第一页国产大屁股视频免费区| 欧美后进式| 国产综合日韩伦理| 诱惑人妻欧美一区在线播放| 成人一级性爱| 天天天堂影视日韩亚洲91| 日韩乱伦视频| 91性网| 久久久久久久久久久久久久久乱码| 国产成人亚洲精品无码最新在线| 蜜臀99999| 日本视频在线观看污污污| 淫穴高潮色图| 99这里都是精品| 一道α片欧美| 岛国不卡超碰护士AV在线播放| av资源在线观看少妇| 国语少妇精| 久久偷拍人| 色欲日韩欧美在线一区| 91色宗合| 夜夜狠狠躁日日躁色视频| 天天干天天操天天干天天操| 亚洲图片 欧美电影| 花野真衣| 天天操天天射天天日| 伊人久大| 国产高清1234区| 91社区拍啪人妻| 四虎AV在线播放| 2019天天操天天爽天天拍| 一级久久久久久久久久久 | 亚洲。日韩。欧美| 青青伊人这里只有精品| 夜夜欧美| 日韩天天本| 67914亚洲精品| 欧美成人四级在线播放| 欧美成人精品欧美一级乱黄一区二…| 久久久久久久久久久97| 国产精品久久久久久 百度| 亚洲精品91| 亚洲资源网| 粉嫩国产精品久久粉嫩| 超97在线精品视频| 99国产女人| 香蕉大久久久| 蜜臀久久99精品久久久久免费观| 日本午夜精品理论片A级APP发布| 麻豆久久一区二区三区| 欧美极品少妇| 69综合网| 亚洲日产专区| 午夜福利免费精品视频| 欧美福利视频啊啊啊啊| 91在线一起| 97资源免费视频| 极品五月天噜噜| 91精品久久久久久77777| 8x福利精品第一福利视频导航| 日本在线伊人啪啪| 9ⅰ久久久天天| 亚洲情色在线| 啊啊啊啊视频免费| 99综合视频一体| 干婷婷综合网| 日本不卡高清视频| 操啊国产| 97超碰人妻| 久久超碰com| 成人资源中文字幕在线观看| julia中文字幕在线观看| 91 在线亚洲| www.婷婷六月天| 亚洲精品人妻吞精av| 国产精品极品美女视频| 综合影院永久入口国产| 无码天堂| 99无码| 天天肏天天干| 超碰诱惑| 亚洲 欧美 第一页 | 久操91视频| 亚洲色欧美| 极品国产内射| 天堂无码| 懂色Av| 新亚洲无码| 欧美操人视频| 色婷婷六月丁香七月婷婷| 欧美精品久久96人妻无码| 精品综合久久久久久五月天| 91美女视频在线观看| 超碰欧美97| 另类图片综合| 性色AV蜜色av色欲av| 操逼操2| PMv在线观看| 亚洲 小说 欧美 激情 另类| 国内精品嫩模A∨私拍小视频| 亚洲色婷婷久久91| 日本潮催一卡操| 高清一区AV无码| 加勒比在线视频一区二区三区 | 亚洲综合校园春色| 久草这里只有精品 | 亚热日本熟女| 九一性生活免费视频|