99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜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)問題。這套體系的核心指標其實就三個可撤銷性、過期控制粒度、存儲開銷。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的標識但這就等于把狀態(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可通過綁定標識精確管理攜帶用戶信息內(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名稱避免與標準授權(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)限標簽光校驗Token還不夠接口還必須聲明自己需要什么權(quán)限。我用自研注解的方式在Controller方法上標注需要的角色或權(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配置類把所有過期時間集中管理并注釋標明每一類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
返回資訊列表
天天成人综合视频| 欧洲亚洲最新精品| 96丁香六月婷婷蜜桃综合久久| 久久久99视频| 久久五月婷婷电影| 九九美女视频| 婷婷激情四射| 丝袜大香蕉| 色五月综合激情| 成人午夜无码视频| 激情婷婷五月天日本系列| 五月婷婷天天色| 五月婷婷影| 色五月欧美| 久久香蕉网| yazhoujiqingav| 色5月丁香婷婷| 五月丁香亚洲校园欧美| 91九色中文字幕女在线观看| 九九热青草| 伊人婷婷色| 成人欧美一区二区三区在线观看| 久九色| 九月丁香久久网| 一区二区三区视频| 丁香五月六月久久综合| 色综合久久综合中文综合网| 五月天丁香啪啪啪啪| 九九热在线精品视频| 色色色色色色网| 久热只有这里有精品| 九九美女视频| 九九久久玖玖爱| 荡乳尤物3HP1V5| 熟女网站久久| 激情五月丁香社区| 欧洲一区二区| 97一区二区| 久热AA| 日本颜色视频人人爱| 九九综合色综合| 68热超碰在线| 色在线免费观看| 五月天丁香网| 国产精品久久久丁香五月八戒视频| 综合激情在线| 欧美久久网| www99精品亚| 99色在线视频| 婷婷在线播放| 日本欧美成人片AAAA| 婷婷99狠狠| 亚洲成人av在线播放| 99久久免费性爱视频`| 狠狠干在线| 97色碰碰公开视频| 婷婷亚州综合| 51精品国内探花| 91 影音先锋| 婷婷成人视频| 91婷婷色 | 丁香五月六月综合激情| 久久a热| 丁香婷婷啪啪啪| 亚洲五月婷婷在线| 99热精在线九九久久保| 4399欧美另类视频| 91精品久久久久久久| www,com,五月色色| 高清不卡一区| 色久婷婷网| 综合性爱网| 亚洲V国产V欧美V久久久久久| 五月婷婷色| 97色色色| 操碰色一区就去操| 一本色道久久综合狠狠躁小说| 亚洲视频1区| 极品少妇婷婷五月| 久久五月婷婷丁香| 婷婷久久午夜网| 天天做天天爱高潮片| 久草九一| 久久5 9视频免费观看| 亚洲综合五月天婷婷| 国产免费一区二区三州老师F1…… | 免费播放片大片| 五月天色区| 开心五月婷婷在线视频免费观看| 激情99在线视频| 天天做天天要天天爽| 久久综合热17c| www.色婷婷。com| 日逼免费视频| 亚洲色婷婷五月天| 色色色99| 九九热超碰| 大香蕉五月天婷婷| 丁香婷婷久久五月天| 久久的爱大香蕉| 色九亚洲| 久久草人妻| 五月婷婷狠天天色综合| 精品爆操| 7777激情基地| 都市激情小说婷婷| 五月丁香婷草| 久久激情视频| 人人操人| 五月婷狠狠| 五月丁香婷婷综合网色欲| 岛囯综合激情网| 人人叉久| 婷婷 激情 五月| 五月丁香花激情综合网| 开心激情五月天网| 国产成人精品一区二三区熟女在线| 超碰日韩人妻在线| 99在线免费视频播放| 超碰资源在线| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 成人AV在线电影| 天天日天天色| 丁香五月婷婷偷拍| 无码毛片992367| 国产片色| 婷婷另类小说| 香蕉婷婷色五月| 国内婷婷丁香社区在线播放| 婷婷香五月天| 狠狠爱综合网| 色情激情五月婷婷| 亚洲五月婷婷在线| 超碰99在线观看| 日韩久久系列| 五月丁香怕啪啪| 丁香九月婷婷色| 日日夜夜婷婷| se婷97| www.久久爱| 婷婷中文字幕版| 色99在线视频| 丁香婷婷婷| 九色激情网| 久久精品国产色| 久久久婷婷五月亚洲97号色| 五月婷婷9| 色狠狠999综合| 我爱va亚洲va52| 五月丁香六月婷婷综合伊人| 欧美顶级少妇做爰HD| 九月综合| 色吧婷婷| 国产精品电影网| 久热这里精品免费| 天天干一干| 99se丁香| 性色99| 丁香五月激情五月开心五月| 五月婷婷激情啪啪| 婷婷激情5月| 丁香婷婷91在线观看视频| 婷婷五月色播| 婷婷五月天性爱视频| 成人网站免费在线播放| 夜夜爽天天爽| 久久久久久久久久久月丁| 91热er| 99ri国产在线| 中文字幕av在线播放| 操射国产日本| 91啪啪啪啪| 丁香六月伊人| 伊人久久丁香狠狠婷婷综合香蕉| 激情欧美婷婷| 色哟哟www| 亚洲天堂无码| 9 1超碰九色| 国产99久| 狠狠干夜夜干| www.91九色| 激情五月,色五月| 日日杆天天| 久久久久久久11111111111| 99热99久久| a69在线视频| 另类综合色| 国产国产乱老熟女视频网站97| 99热在线精品播放| 色婷婷大香蕉| 操婷婷久久| 色播五月丁香综合| 综合久久狠狠| 色综合色色色| 碰人人97| 国产熟女一区二区三区五月婷| 色婷婷偷拍| 99热这里只有精品4| 色婷婷色和| 色综合五月在线| 九月激情网| 人妻综合网| www99xxxx五月丁| 99在线精品视频| 久热 91| 丁香九月激情久久| 日韩成人综合网| 婷婷涩涩五月天| 婷婷欧美激情综合| 超碰99成人在线| 九九99视频| 综合久久伊人| 偷拍五月丁香| 综合久久激情久久| 91色在线| 色婷婷成人做爰A片免费看网站 | 五月婷婷乱| 91av成人| 九九色综合网| 色五月婷婷激情五月| 丁香五月婷婷老师网站| 开心五月婷婷| 丁香婷婷激情五月| 97爱综合| 色色色网站| 五月丁香久久色| www.99情趣网| 人人干天天舔| 午夜日日| 日日夜夜青青草| 婷色五月| 色五月婷婷九月| 日本综合色色| 精品人妻在线免费观看| 婷婷亚洲五月色综合| 精品无码片| 色色色在线观看| 亚洲 日韩色色| 五月天sesese| 人草人人| 国产欧美婷婷五月| 五月色情| 婷婷激情社区| 丁香六月天AV| 色综啪啪| 国产亚洲99久久精品| 狠狠激情五月天| 91超碰在线播放| 69超碰在线| 激情婷婷五月天日本系列 | 久久激丁香| 97亚洲婷婷| 五月色欧洲| 91狠狠综合网| 69色婷婷| 婷婷五月激情综合网| 超碰99在线观看| 五月丁香久久丝袜啪啪| 欧美婷婷五月无砖| 久久99免费视屏| 婷婷五月天丁香综合网| 婷婷五月天网| 五月丁香 啪啪| 伊人久久艹| 色在线免费观看| 久热这里只有| 九九热中文| 99re这里只有精品国产99| 色五月大| 国产精产国品一二三在观看 | 操逼三区| 五月婷婷丁香综合| 日批在线看| 国产免费一区二区在线A片视频| 无码免费人妻A片AAA毛片西瓜| 久热人妻| www.91.com黄| 性爱视频久久| 激情五月开心五月丁香五月| 色色色色综合网| 99视频在线观看网址| 9热超碰| 五月天啪啪视频| 色5月丁香婷婷| 欧美色小说婷婷| 第四色网婷婷| 国产肥白大熟妇BBBB视频| 五月激情啪啪| 爱射综合| 久久久婷| 国产亚洲精品久久一区二区三区| 成年人丁香五月| 免费播放99性爱视频| 日本三级片片| 99草在线免费观看视频| 久久爱综合| 青草青草视频2免费观看| 欧美一级色| 久久婷婷六月综合综合色| 丁香五月婷婷天激情| 天天激情综合| 丁香久久五月天视频在线观看| 久久视这里只有精品| 中文字幕不卡+婷婷五月| 亚洲视色| 操操操av| 亚州日本欧州韩美高青高潮一| 日本欧美成人片AAAA| 五月丁香影院| 亚洲色色图片| 五月天天丁香婷婷| 9999热在线观看| 激情综合视频| 色婷婷91激情小说| 色444综合网| 日韩成人AV在线播放| 五月婷婷婷| 一区二区成人电影| 综合狠狠伊人| 天天婷婷天天| 日本五月视频| 网站免费一站二站| 久久精品99| 99热网址| 这里只有视频精品| 婷丁五月| 久热这里只有精品性色AV| 亚洲色涩视频| 天天日日天天| 热99这里只是精品| 婷婷六月天亚州| 五月网激情| 婷婷五月天成人动漫 | 丁香婷婷色情| 激情五月综亚网| 伊人色欲五月天| 99er免费在线观看| 99热在线成人网站| 亚洲精品视频在线| 丁香婷婷老熟女综合网| av在线中文| 密黄站| 99在线观看| 秋霞三级影视资源| 激情丁香五月婷婷| 熟妇人妻中文字幕无码老熟妇| 婷婷丁香91综合| bukadeavzaixian| 日本va欧美va精品发布视频 | 99aese| 欧美婷婷精品激情| www.色五月.com| 久久9热| 激情五月天色播| 五月婷婷 婷婷五月 一区二区 久久久| 久久五月天丁香| a在线免费v| 日本啪啪天堂| 狠狠88综合久久久久噜噜噜| 五月亭亭直播| 中文成人在线| 99A级片| 天天操夜夜玩!| 99热97| 久久 婷婷 五月天| 婷婷色狠狠| 久久亚洲婷婷| 天天操婷婷| 色人久久| 色99免费视频中文| 思思热久久久久思思热| 婷婷操逼| 激情文学 综合 色| 色久九| 乱岳熟女50岁| 麻豆雪千夏| 成人无码免费一区二区中文| 黑人无码一区| 五月激情啪啪啪| 亚洲欧美国产高清vA在线播放| 偷拍99在线视频观看| 日韩99精品| 五月婷婷丁香五月亚洲色| 精典久久| 爱iii做iiii日| 六月婷婷av| 婷婷六月天国产综合| 五月天婷婷伊人| 丁香六月激情国产| 日本久久99| 精品少妇蜜臀91| 激情五月色婷婷| 九月婷婷综合八月丁香在线观看| 丁香五月天激情五月天激情五月天激情网| 色天天综合| 思思视频这里是精品| 97资源欧美日韩大香蕉超碰一区| 玖玖99婷婷| 激情五月婷婷综合网| 亚洲婷婷激情综合激情999精品| 中文字幕在线人妻| 97av在线视频| 逼逼AV| 丁香六月AV| 少妇真实被内射视频三四区| 91九九| www色婷婷| 久久久九九视频精品18| 5月丁香六月婷婷| 97五月天| xx综合网| 青草青草视频2免费观看| 久久xxxx| 操九色| 怡红院91a√| 亚洲激情精品| 99热亚州综合| 欧美成人色婷婷| 五月婷婷性爱网| 伊人久久婷婷| 综合色色婷婷| 久久精品性爱视频,| 九九操操| 婷婷五月小说色综合| 97碰| 91九色无码日韩 | 黄网在线免费观看| 久婷五月| 天天做天天爱天天玩| 超级碰 久久9| 丁香五月天激情综合网| 九九精品丁香花| 99热青青草| 色99网| 97久人人| 97自拍视频在线| 久久精品91视频| va亚洲中文在线| 激情五月瑟瑟| 9热视频在线观看| 日本久久高清| 欧美激情性做爰免费视频| 色婷婷电影| 9久精品| 天天操天天爽天天爱| 双性美人被调教到喷水A片| 天天狠狠插| 99视频在线9| 欧美亚洲操逼| 在线91日韩| 婷婷五月天亚洲综合| 大香蕉久艹| 日日夜夜干| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | 99热最新国内| 色色免费网战视频| 超碰人人91| 99精品久久久| 五月丁香网中文字幕| 成人国产欧美大片一区| 天天操比比| 骚逼视频一区2区| 99精彩视频| 久久色五月天| 国产99久久久国产精品免费看| 5月色亭亭视频| 精品99*| 嫩BBB槡BBBB搡BBBB视频| 婷婷五月激情综合啪啪| 天天婷婷综合亚洲亚洲| 五月天基地| 狠狠狠狠狠狠| 精品久久99码| 婷婷另类开心| 丁香婷婷色情| 国产乱人偷精品人妻A片| 婷婷色网站| 99爽视频| 内射 无码 伊人| 狠狠色狠狠| 操逼在线视频| 久久伊人婷婷| 九97免费视频| 91中文在线| 人人爽天天爽| 91干视频| 日日操夜夜操中国无码| 色综合激情| 五月婷婷网五月在线| 999热在线视频| 亚洲综合五月天婷婷| 黄网免费看| 开心五月婷| www色五月| 婷婷深爱五月丁香网| 久久婷婷丁香视频网| 91Chinese在线| 激情小说五月天| 日韩按摩二区| www.激情在线| 99re在线精品视频| 丁香婷婷五月人体| 99热精品在线| 色五月六月| 开心深爱五月天| 色99色| 国产精品人成A片一区二区| 强伦轩人妻一区二区电影| 亚洲色色色色| 五月婷婷综合激情| 99综合视频在线| 激情五月色综合网| 啪啪操网| 熟妇高潮一区av| 99热这里只有精品中文字幕| 久99综合婷婷| z色五月播播久久| 99久久99热这里只有精品| 激情五月天综合网| 99久久婷| 亚洲AV网站在线观看| 亚洲综合激情五月| 五月天婷婷自拍图片在线观看| 91ncm视频| 看逼中文字幕| 五月婷婷狠狠久久| 五月婷婷性爱网| 性欧美大战久久久久久久83| 丁香五月成人| 欧美大肥婆大肥BBBBB| 五月色网| 天天摸色吧天天摸色吧| 天天爽日日爽夜夜爽| 综合色网站| 人妻中文av| 免费无码毛片一区二区A片| 九九伊人网| 噜噜五月天综合| 色噜噜狠狠色综合成人网| 五月丁香网站| 成人性爱无码| 激情亚洲色图片丁香综合| 婷久久| 91在线日本| 伊人玖玖精品| 91日本在线观看| 97人人干人人操| 日韩高清成人| 亚洲xx网| 亚洲精品国产setv| 久久久8| 五月天精品视频| 精品五月天| 久久机热/这里只有精品| 色五月激情婷婷| 激情五月天婷婷五月天| 中文字幕无码人妻少妇免费视频| 亚洲V国产V欧美V久久久久久| 五月丁香啪啪| 色一色综合| 九月色婷婷婷| 在线视频99| 啪啪激情综合| 日韩操人| 五月丁香婷婷综合激情基地| 久久精品66| 开心婷婷五月天激情网| 一月婷婷色色| 少妇大叫太大太粗太爽了A片| 四川BBB搡BBB搡多人乱亂| 99热在线极品极品| 99五月婷| 噜一噜免费视频| 日日鲁鲁夜夜爽爽| 深爱婷婷网| 91人人网| 国外亚洲成AV人片在线观看| 一片AV片免费播放| 日本熟妇精品99| 欧美成人无码高清一区二区三区| 这里只有精品99视频| A网在线欧洲| 97视频.干com| 亚洲中文字幕在线观看| 欧美婷婷九月| 5月婷婷综合| 婷婷综合激情五月综合| 色综合五月| 久久精彩视频| 五月色婷丁香| 五月份婷婷| 国产五月天激情小说| 人人爱人人添| 狠狠狠狠狠狠狠狠| 欧美日韩国产一二区| 九热久| 天天射综合网天天插| 久久在线人妻| 亭亭色色五月天| Av狠狠色丁香婷| 五月伊人网| 五月婷婷深爱六月| 婷婷五月天黄色| 六月丁花香啪啪激情欧美| 婷婷丁香六月| 91干99| 久久视网36| 丁香五月婷婷欧美成人色图| 思思re99视频在线观看| 亚洲精品久久久久久久久久吃药| 午夜丁香六月婷| 狠狠色丁婷婷日日,伊人激情综合网| 色婷婷五月天激情在线观看| 国产精品久久欧美久久一区| 激情六月婷婷| 天天撸天天干天天插| 婷婷操逼| 久久 中文 日本| 婷婷五月欧美| 五月天婷婷在看| 丁香五月婷久久| 久久ww| 久久涩视频| 另类图片激情五月| 国产欧洲欧洲精品久久| 国产69久久久欧美黑人A片| 天天肏在线观看| 丁香五月激情视频| 专区无日本视频高清8| 情色婷婷五月天| 99热这里只有精品最新网址| 国产亚洲精品久久久久久郑州 | 超碰人人操人人干| 五月久视频| 7EzOBIhNq85TO| 色五月大香蕉| www.五月婷婷久久.com| 色玖玖玖| 天天插天天干天天舔| 九九99久久| 久久久99视频| 碰97久久| 涩五月丝袜婷婷| 婷婷五月综合啪| 婷婷六月天| 思思99热热热99| 99精品热视频| 六月婷婷综合久久| www.婷婷| 日本天堂免费99| 色中色综合| 亚洲欧洲美女在线观| 手机看片日日做夜夜| 五月天婷婷在线播放免费| 97久久人人人干| YJLZZJLZZ亚洲乱熟无码| 婷婷五月免费视频| 六月成人网| 综合xx网| 亚洲乱码日产精品BD| 丁香五月婷婷啪啪啪| 色婷婷五月色| 超碰91av| 久久婷婷综合五月天| 狠狠干综合| 5月丁香啪啪啪| 中美日韩成人在线| 色婷婷小说| 97超碰综合| WWW.99热| 久久婷婷五月天激情四射| www.久久综合| 婷婷婷久久久| AV在线观看网站| 99色综合网| www.日日夜夜.com| 五月天天天操天天爽夜夜操| 婷婷五月天激情网| VA婷婷| 99噜噜噜在线播放| 狠狠操在线视频| 免费色婷婷| 综合网天天| 操97免费超级视频| 综合色播| 色播丁香五月婷婷操:屄| 婷婷丁香五月天激情| www99精品| 丁香五月社区| 天天擼久久擼在线| 玖玖爱导航| 97操视频| 免费99情趣网视频| 一级内射毛片| 色五月激情五月开心五月| 99热播放| 99热久久这里只有精品| 色五月激情婷婷| 免费V片在线| 人人操99| 色综合九九色综合88| 色5月婷婷| 婷婷色系婷色| 一本九九色| 中美日韩成人在线| 人妻中文在线| 婷婷激情五月呦呦| 欧美色色色色色色色色色色| 午夜理论片最新午夜理论剧| 九九色黄色| 大香蕉久久久久| 丁香六月色情| AV动漫不卡无码免费| 大香蕉综合| 激情性五月天免费小说视频| 五月丁香成年黄色| 天天精品视频免费观看| 婷婷六月天激情影院| 91色在线 | 日韩| 色哟哟精品| 午夜精品777| 色偷偷色婷婷| 99丁香婷婷综合网| 伊人五月综合网| 中文字幕在线日亚洲9| 五月丁香婷婷色啪| 97人人操人人爽| 五月天婷婷伊人| 久热99热| JlZZJlZZ8JlZZ亚洲熟女| 五月在线| 国产欧美日韩一区二区三区| 9精品视频在线观看| 无码少妇高潮喷水A片免费| 六月丁香中文字幕| 丁香六月无码| 色色色综合色| 亚洲岛国电影| 大香蕉九九| XX久久| 婷婷五月六月激情| 激情久久丁香| 色综合99无码 | 中文字幕av久久爽一区| 五月丁香AV在线| 99热99| 亚洲亚洲人成综合网络| 婷婷色色网| 熟女激情五月天 | 深爱激情四射| 综合大香蕉| 久久综合综合综合| 久久国产一区二区三区| 六月婷婷综合| 久久婷婷色综合| 婷婷干五月综合在线播放| 国产99精品免费视频| 色播婷婷大香蕉| 丁香六月婷婷社区| 超碰免费大香蕉| 啪到高潮激情丁香五月| 免费试看小视频 99| 欧韩性爱| 精品久久99| 热婷婷在线视频| 色五月色综合| 亚洲精品色| 五月亭亭开心网| 天天搞天天色综合| 开心五月综合激情综合五月| 99精品热视频| 香蕉婷婷色五月| 激情婷婷九月| 欧美啪啪五月天| 99国产精品久久久久久久久久久| 五月天婷婷丁香| 久久激情五月婷婷| 99综合99| 另类国产综合| xxx综合在线| 丁香五月婷婷六月婷| 国产VA播放| 69热在线| 快乐婷婷五月天| 亚洲免费观看高清完整版AV线| 五月婷婷之综合激情在线| 超碰人人在线观看| 大地资源色婷婷视频在线| 久久五月丁香| 人妻AV中文系列| 99在线精品免费视频| 婷婷五月天伊人| 色婷婷小说| 激情五月天网| 五月花激情| 五月天婷婷激情| 九九热在线精品视频| 另类图片五月天| 色情五月天A片| 婷婷五月天xxx| 开心五月激情站| 国产色色在线| 亚洲色婷婷激情| 六月丁香深深爱| 欧美va亚洲va在线播放| 欧美色色色色色色色| 国色天香伊人狠狠色| 五月婷婷之美女图片| 千人斩操逼| 五月丁香啪啪综合网| 狠狠搞亚洲| 五月天啪啪啪| 99啪| A久久| 影音先锋 萱萱| 精品视频网| 久久免费操| 丁香八月综合激情| 日韩黄色网络| 亚洲人成网亚洲欧洲无码久久| 五月久久婷婷| 26uuu.| 五月花综合视频| 成人AV中文字幕| 26uuu欧美日本| 强辱丰满人妻HD中文字幕| 5Www色5夜| 久久精品五月天| 久操b网| 快色t v在线入口| 99成人| 丁香婷婷激情| 亚洲中文字幕在线观看| 色婷婷色丁香色欲av| 丁香影院五月综合| 丁香激情网| 伊人狠狠狠综合| 日撸夜撸日操| 美女美女美女三级色天天天天天| 五月婷婷影| 久/久精品99看9| 香蕉人妻AV久久久久天天| 综合久久综合综合| 午夜婷婷丁香| 婷婷丁香五月亚洲免费| 色婷婷免费观看| 久久精品A片777777| 婷婷色基地在线看 | 婷婷五月色色| 天天摸天天舔天天爽| 欧美xx激情视频在线观看| 丁香啪啪| 国产毛片精品一区二区色欲黄A片| 婷婷五月综合亚洲| 久久婷婷激情| 内射 无码 伊人| 97色片| 午夜电影网VA内射| 亚洲人妻AV| 亚洲无码性爱| 综合狠狠伊人| 99这里只有精品| 午夜天堂一区人妻| 激情五月综合网最新| 深爱五月亚洲| 99视频内射三四| 大香蕉伊然在亚洲90| 99久热这里只有精品视频删减版| 狠狠激情五月天| 高清无码网址| 91精产一区三区免费观看| 婷婷深爱五月亚洲综合| 99网99热| 五月天开心色色网| 丁香五月婷婷亚洲人| 99热国内| 另类专区在线观看| 狠狠色噜噜色狠狠狠综合色| 久久这里在精品视频| 91玖玖| 久久久久五月丁香| 国产26uuu视频| 一级性爱视频| 久久在线92| 天天摸天天日天天舔| 亚洲操操| 啪啪综合网| 97色女人在线| 99热只有精品在线| 思思久日精品视频| 国产精品国产成人国产三级| 亚洲成人在线免费| 丁香婷婷偷拍| 天天色视频| 91n啪啪| 呦呦v线| 99色在线| 亚洲欧美婷婷五月色综合| 成年人丁香五月| 91夫妻网站九色| 五月天久久婷婷婷| 丁香五月天激情综合| 91精品无码| 五月丁香婷婷婷激情爱爱| 99超级超级超级碰| 欧美成人精品一区二区 | 久久9热| 人人操av| 永久热91| 久机视频这只有精品| 婷婷五月丁香基| 91婷婷五月天综合视频| 激情开心五月天| 综合色五月天| 91爱操| 五月丁香精品| 丁香六月婷婷开心| 超碰激情网| 亚洲婷婷六月天| 在线理论片| 综合五月亭亭9| 欧美交换配乱吟粗大25P| 精品夜夜澡人妻无码AV| 丁香婷婷激情综合五月激情| 午夜婷婷| 亚洲激情丁香五月天色| 欧美日韩成人在线网站| 丁香六月啪啪啪| 美女网黄| 超碰99在线观看| 玖玖在线视频| 超碰99热| 久久五月丁香| 狠狠擼综合| 国产AV影片| 激情五月天www| 成人中文网| 五月激情丁香| 大香蕉久久久久久久久| 玖玖在线资源视频| 欧美成人猛片AAAAAAA| 亚洲五月婷婷| 亚洲中文字幕AV| 五月婷婷,狠狠操| 狠狠色大香蕉| 玖玖综合色| AV人人操| 五月丁香视频色色| 久热99热| 综合激情伊人影视在线| 国产日韩欧美| 五月天全国最大成人网| 五月天激情亚洲| 丁香五月婷婷五月天| 九九热10| 五月丁香免费视频| 99激| 色色六月| 五月婷婷成人| 色综合久久88色综合天天99| 欧美五月婷婷| 啪啪激情综合| 五月综合激情婷婷六月色窝| 色情五月天A片| 99九九玖玖| 91久久久久久久| 日本成人噜噜噜噜噜| 丁香五月成人自拍| 色综合丁香| 色视五月天婷婷| 97人人操com| 超碰在线人妻| 99久久成人| 操婷婷久久| 婷婷涩涩五月天| 成人网站在线观看视频| 婷婷五月色激情欧美激情| 久久人妻www| 成人做爰A片免费看网站找不到了 噼里啪啦在线观看免费完整版视频 | 久久一级AV| 另类丁香综合| 亚洲人妻一区二区| 99丁香五月| 亚洲色图欧美色图日本视频| 国产婷婷五月| 丁香五月AV综合| 五月婷婷激情五月| 98国产精品综合一区二区三区| 久久色吧| 婷婷丁香五月天在线| 99精品久久| 久久视频婷婷视频| 婷婷久久网| 色www久视频| 丁香五月婷婷啪| 欧美日本日韩| 五月丁香六月色婷| 99久久er| 六月丁香啪啪| 91热er| 成人丁香五月| 精品99这里有| 双性美人被调教到喷水A片| 亚洲成人婷婷| 丁香色六月| 日良久久| 色色丁香五月天| 婷婷5月天激情综合| 国产亚洲精品AAAAAAA片| 色色色综合视频| 国产成人精品一区二三区熟女在线| 99久久99久久综合| 久久九九免费大视频| 婷婷天堂综合| 播丁香五月婷婷欧美| 五月丁香婷婷激情在线| 成人综合网站| 久久亚洲婷婷| 亚洲激情网| 中文在线成人| 久久性爱视频网站| 欧美成人AAA片一区国产精品| 婷婷久久五月天丁香| 五月丁香六月婷婷综合网站| 天天天天天久久久久久| 色色综合网www| 97人妻碰碰中文无码久热丝袜| 色综合网综合| 大香蕉人人网| 亚洲天堂婷婷| 人妻中文在线| av在线中文| 日婷婷久久开心| 五月丁香六月欧美| 五月丁香 啪啪| 人人爱国产| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | www.狠狠色.com| 丁香六月| 色婷大香蕉| 欧美激情综合五月色丁香| 67194中文字幕| 久久五月天色| 色婷婷亚洲婷婷| 超碰av在| 国产特级毛片AAAAAAA高清| 亚洲这里只有精品| 武则天精品久久| 狼人狠狠操| 五月天伊人| 亚洲天天| 婷婷五月天开心网| 26uuu成人网| 99黄色| 五月丁香婷婷激情久久| 91精品熟女| 五月天色婷好好| 久久久久久久丁香五月天婷婷| 91丨九色丨白浆秘| 九热久| 日本99在线| 99热精品中文字幕| 日本一道久久| 六月婷婷五月天| 五月六月婷| 色婷婷婷婷| 激情六月丁香综合| 秋霞黄色一级久久| 电影蜘蛛女| 噜噜噜噜在线| 婷婷激情六月天视频| 婷婷十月丁香| 俺也去在线视频 | 欧美成人AAA片一区国产精品| 五月丁香六月激情| 无码激情AAAAA片-区区| 99ER热精品视频| 99热在线观看| 国产黄大片在线观看画质优化| www.99热视频| 亚洲无码yw| 丁香六月激情综合| 婷婷婷久久久| 亚洲精品视频在线| 欧美久热| 亚洲宗合激情| av免费在线看不卡无毒| 香蕉曰比| 91超碰在线播放| 欧美综合五月丁香六月婷| 欧美婷婷| 国产精产国品一二三在观看| 激情小说视频图片| 色五月婷婷在线| 五月丁香综合色婷婷| www.seqingwuyuetian| 超爽内射| 亚洲六月色婷婷| 性色欲情 网站| 天天拍夜夜爽| 99这里只有| caop在线视频| 久久婷婷视频| 五月天丁香久久综合 | 色婷婷中文在线| 色婷婷电影网| 六月天婷婷| 99热在线观看成人| 1024欧美看片| 九月婷婷激情| Av狠狠色丁香婷| 成人婷婷桔色| 九九热经典视频在线观看| 丁香久色| 五月丁香六月婷婷亚洲| 激情小说婷婷| 丁香五月色网| 91精品91久久久中77777| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 激情丁香五月AV| 色色吧综合| 丁香婷婷五月综合色情| www.五月天婷婷姐姐| 丁香五月偷拍| 99热偷拍| 久色中文| 久久丁香五月| www久久99| 色婷婷无吗| 日日爱678| 九九热视频精品| 久久婷婷五月| 五月激情综合网| 久草视频大香蕉99| 99久久婷婷精品视频| 色综合中文| 亚洲综合婷婷五月| 色播五月天激情| 免费观看18视频网站| 99热国产婷婷| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 欧美,日韩成人在线| 久久视这里只有精品| 免费五月婷婷网| 激情综合婷婷| 视频久久9| 丁香五月宝贝激情网| 玖玖资源在线视频| 五月丁香六月| 亚洲综合草草| 5月丁香六月婷婷| 99热天堂| 六月丁花香啪啪激情欧美| 久久色婷婷| 丁香五月天啪啪激情综和网 | 丁香五月久久| 久久免费高| 天天摸天天舔在线视频| 六月丁香好婷婷| 五月丁香网站| 久久婷婷大香蕉| 五月婷婷五月天天| 婷婷五月激情欧美| 丁香六月婷婷久久亚洲天堂| 国产67194| 欧美黄色韩日网| 国产美女无遮挡裸体毛片A片| 六月色播| 欧美色频| 日本色超碰| 天天干天天操天天干天天操天天干天天操| 五月婷婷激情网| 91久久综合亚洲噜噜成人在线| 丁香五月在线看| 一本色道久久88综合日韩精品| 久综合九| 色激情五月| 伊人网色婷婷五月天| 99爱最新免费视频在线观看| 日本狠狠色| 激情综合网址| 97色色色| 色色色五月婷| 99re思思热这里| 亚洲操人| 天天色综合天天| 九九视频这里只有精品| 97人人搞| 色色色9| 色99久草在线| 五月天色裸体视频| 国产性爱在线| 丁香亭亭久久| 久久综合中文字幕| 欧美日比视频| 色丁香五月婷婷| 五月丁香婷婷99| 激情综合色播| 国产性爱在线| 五月天影院婷婷在线观看| 日本乱子人伦在线视频| 色一区高清| 思思热在线视频观看精品| 在线超碰91| 青草激情在线| 日日做A爰片久久毛片A片英语| 激情深爱婷婷网| 婷婷色六月| 天天看片日日夜夜| 精品婷婷| 这里只有精品视频在线观看免费| 99精品在线观看| 日本va欧美va精品发布视频| 伊人婷婷五月天| AV网站免费在线| 99九九在线精品热动漫| 五月婷久久| 婷婷开心激情五月激情网| 五月婷婷伊| 超碰熟女拍拍| 超碰在线中文字幕| 久久婷五月综合| 久久多色| 激情五月丁香五月| 婷婷五月天激情偷拍| 久久a热| 婷婷欧美激情综合| 五月天色图| 深爱激情五月天色婷婷| 欧州婷婷五月天综合| 激情婷婷网| 亚洲第一av| 伊人婷婷大香蕉| 激情视频婷婷五月花| 天天日天天色| 青青草婷婷综合五月| 色婷婷播放| 99在线视频播放| 九九亚洲综合| 天天狠狠夜夜狠狠2023| 182TV亚洲| 色九九九九| 人人色人人摸人人看| 四川BBB搡BBB搡多人乱亂| 五月丁香婷婷综合网色欲| 无码少妇高潮喷水A片免费| 欧美色色色色色色色| 69色婷婷| 亚欧州精品视频| 天天人人综合| 99欧美热| 激情网婷婷五月天| AV成人在线播放| 日日色综合| 91久久久久久| 91大操| 婷婷狠狠18禁久久| 九九国产视频| 丁香六月激情| 欧美成人A片AAA片在线播放| 伊人www22综合色| 狠狠精品干练久久久无码中文字幕| 婷婷综合激情| 日韩av免费版| 久久婷五月| 丁香五月婷婷丫|