欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
婷婷丁香五月av| 色综合久久88色综合天天99| 五月色婷婷综合| 激情网五夜婷婷| 五婷婷综合网| 99成人| 天天摸天天日天天舔| 99亚洲精品视频| 国产精品大香蕉| 五月丁香综合在线| 日韩av网址大全| www.精品99| 变态 另类 在线| 久久伊人9| 99激情视频热| 涩涩涩,com| www.韩日视频| 雪千夏麻豆| 久久香蕉影院| 久久婷色| 91精品丝袜久久久久久| 97婷婷丁香| 伍月婷丁香花全集| 色五月婷婷啪啪五月| 丁香5月激情网| 天天肏天天肏| 影音先锋91资源站| 婷婷五月丁香手机在线视频| 99这里只有免费的小视频在线观看| 男人的天堂av俄罗斯热| 伊人超碰在线| 99婷婷色| 97伊人综合婷婷| 国产偷人爽久久久久久老妇APP| 九九99精品视频| 五月天色裸体视频| 成人精品99| 99热热九九| VA色婷婷| 日韩草草草草草草草草草草草草| 九九视频这里只有精品在线播放 | 伊人www22综合色| 成人草榴视频| 超碰永久在线| 天堂资源欧日浪女在线播放| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 丁香婷婷人妻综合网| 操人91| 色五月中文字幕| 26uuu色五月| 丁香五月天天久久综合小说| 色婷综合| 亚洲中文字幕av| 色婷婷九月| 色五月天丁香婷婷| 久久视这里只有精品| 亚洲六月婷婷| 99热欧| xxxx五月| 色J香五月天| 天天日天天做天天操| 夜夜夜叫天天天做| 五月婷啪| 国产日韩精品SUV| 国产一区二区三区影院| 色约约视频一区二区三区四区五区| 天天日中文| 99碰碰。| 天天肏视频| 任你搞网站| 国产成人高清| 99国产在线精品视频| 国产SUV精品一区二区6| 99热插| 成人网在线视频| 丁香五月综合婷婷| 五月丁香婷婷中文网| site:ornaments52.com| 91热久久| 9|在线观看视频| 91视频久久久| 五月人妻婷婷| 97性视频| 操精品9| 中文字幕婷婷在线| www.爱操com.| 久99久精品| 538在线精品| Av中文在线| 久久婷婷五月丁香网| 久久综合婷婷| 免费视频99| 久久久精品AV| WWW、日本色丁香、co m| 中文资源在线a| 狠狠草婷婷| 四月丁香五月婷婷久久| 五月色丁香激情| 夜夜操夜夜操| 丁香婷婷成年| 综合五月草| 这里只有精品在线看| www热久久yy9| 色玖玖网| 亚洲另类噜噜| 色五月激情五月| 六月丁香激情| 五月激情久久综合网| 天天久久狠狠色综合| 亚洲精品白浆高清久久久久久| 秋霞网在线免费基地五月婷婷丁香| 色五月婷婷av| 欧美 日韩 成人| 99噜噜噜在线播放| www。狠狠干。com| 亚洲欧洲另类| 国产亚洲在线| 黄色五月婷婷| 国产亚洲99久久| yazhou seshipin| 99成人在线观看| 国产AV国片偷人妻麻豆| 成人小说 五月天 婷婷| 亚洲午夜AV| 久久久久久久久久91| 伊人婷婷五月天av| 超碰人人插| 色噜噜狠狠色综合伊人| 五月丁香色| 亚洲成人av在线播放| 五月天久久婷婷婷| 福利视频在线播放| 国产欧美日韩一区二区三区| 五月婷婷丁香| 强辱丰满人妻HD中文字幕| 九九综舍久久| 亚洲综合色色| 伊人激情| 日本精品久久久久中文字幕| 性小说五月天| 97在线观视频免费观看| 99热这里只有精品搜| 欧美性生交xXxX久久久| www.俺去也com| 高清无码网址| 丁香五月视频在线观看| 日本熟妇乱妇熟色A片蜜桃| 五月丁香福利| 97色婷婷| 九九精品视频在线6| 日韩二区搞逼插逼毛片| 色婷亚洲| 偷拍九九五月丁香婷婷| 久久综合爱| 4438成人电影| 婷婷六月久久综合导航| 99热20| 色五月综合| 婷婷激情四射| 美国少妇性做爰| 99er在线观看| 免费AV在线网址| 久久婷婷五月综合色和| 综合激情在线| 黄色中文字目| 亚洲色婷婷| 超碰97久久| 午夜婷婷久久| site:wpjngj.com| 天天综合插插| 色色影院黄大片| 天天操夜夜操| 婷婷五月激情基地| 91综合色噜噜| 色色激情| 99热这里只有精品官网| 久久在这里99| 欧美性生交XXXXX无码小说| 色五月天综合| 99草视频在线观看| 国产99久久久国产精品免费看| 全网最新网黄大秀直播高清,主播国产录屏在线 | 九月丁香婷婷综合| 婷婷免费无视频| 色亭亭九月| 欧美性爱五月天| 综合久久综合| 国内自拍1区| 停婷丁五月在线| 超碰99热| 亚洲9久久精品| 999激情视频| 小视频aaa久久久| 丁香花综合永久入口| nvrentiantang av| 插插插色综合网| 日本大人久久| www色婷婷| 日日夜夜狠狠操| 五月丁香性爱| 亚洲天堂无码| 操逼电影免费看| 九九热视频99| 国产三级秋霞| 色综合性视频| 色婷婷电影| 婷婷色资源| 中文无码婷婷| 亚洲综合激情五月久久| 久久婷婷色丁香| 伊人9在线| 国产成人网址| 泰州成人视频| 五月婷婷偷拍| 黄色激情五月天| VA五月激情在线| 97日本在线播放| 综合色情网| 色婷婷色婷婷五月| 99久久成人| 国产精品视频免费看| 国产精品美女久久久久AV超清| 97色啪| 内射丰满人妻| 伊人日日干| 五月丁香亭亭操逼| 国产婷婷综合在线免费视频| 婷婷五月天午夜激情影院| 国产FREESEXVIDEOS性中国| 第四色五月天| 天天插天天插天天插天天插| 99成人免费热视频| 激情五月天色婷婷| 99这里是精品| 噜噜噜久久亚洲精品国产品91| 99久久a线观| 99色视频在线观看最新| 草一草avb| 亚洲国产另类av| 图片区 小说区 区 亚洲五月 | 国产精品久久久久久久久久| 丁香五月激情五月| www.狠狠操| 日韩成人综合网| 五月天另类激情在线| 久久婷婷色五月| 先锋资源 996| 久久机热思思热| 六月婷婷日| 天天干夜夜操A片| 色五月首页| 97色婷婷五月天| 婷婷少妇激情| www.粉嫩av.com| 六月激情婷婷| 五月视频日本免费观看| 五月婷婷色情| 五月丁香综合在线| 色久影院| 色99色| 99超级碰免费视频| 日本eVa一区=区视频| 国产SUV精品一区二区883| 色99网| 这里只有精品2| 欧洲亚洲精品| 成人龟情网丁香五月| 蜜乳av一级av| 午夜丁香六月婷| 97操| 亚洲精品网站色视频| 激情五月天在线观看婷婷| 色婷婷五月综合| 桃色Av色哟哟| 婷婷五月天天aV| 久久久久久人妻久久久久久久久久人妻久久久 | 伊人婷婷99热精品| 丁香五月激情综合婷综| 极品少妇XXXX精品少妇偷拍| 午夜爱爱爱成人| 天天摸日日舔狠狠添婷婷婷| 婷婷婷婷婷婷婷婷| 五月丁香影院| 人妻六月天| 丁香 亚洲 久久| 伊人色综合影院视频| 亚洲另类在线观看| 日韩十国产极品久久| 深爱婷婷丁香五月激情| 五月天色区| 激情五月天色播| 丁香97综合| 超碰日日操| 丁香六月色香蕉视频| 亚洲性图一区二区| 色播五月丁香| 亚洲区在线| 婷婷五月天激情电影| WWW色综合| 五月丁香六月激情综合欧美| 色婷婷综合网站| 日本无码专区| 99国产小视频2013| 丁香狠狠色婷婷| 久久免费精彩视频| 另类激情四射| 五月花综合视频| 强伦轩人妻一区二区电影| 五月婷婷香蕉| 另类五月婷婷| 色婷婷中文在线| 狠狠CAO日日穞夜夜穞AV| 天天操天天曰天天射| 日日夜夜青青草| 五月天婷婷爱| 亚洲激情六月丁香| 丁香5月啪啪| 伊人激情啪啪| 五月丁香久久呀| 99精品在| 国产亚洲精品AAAAAAA片| 成人在线高清| 色99欧洲色19| 九九色热| 最新日本A片| 久久玖玖综合| 人人操91色| 五月婷婷这里都是精品| 亚洲激情丁香五月基地| 五月婷婷在线视频| 色婷婷丁香五月| 激情99| 九九操屄| 久色五月婷婷综合| 精品一二三区久久AAA片| 日韩精品999| 五月天婷婷在线观看| 一本大道熟女人妻中文字幕在线| 最新日本A片| 婷婷伊人综合中文字幕| 丁香五月电影| 超碰京东热av男人的天堂| 激情婷婷丁香五月| 中国女人内射6XXXXX| 婷婷丁香五月天哟啪| 婷婷五月天AV在线| 天天综合五月| 97人人干| 色综合网上班开心婷婷久久| 91中文在线| 五月丁香六月激情综合| 九九久久五月天| 超碰永久在线| 另类激情综合| 久久婷婷内射| 婷婷久久久久| 天天操婷婷| 九九99热久久精品66中文字幕| 久99久视频精品| 婷婷五月天亚洲色| av一级棒av| 午夜 外网 精品 在线| 丁香五月激情综合| 亭亭玉立国色天香| 天天综合色| 99婷婷狠狠成为人免费视频| 天天色综合网吨吧| 欧美婷婷综合网| 婷婷色av| 中文在线成人| 天天干天天操天天拍| 日韩av在线电影| 99在线热视频| 99热老网站| 色综合久| 婷婷五月天色网久| www.ywav| 激情丁香九九五月综合网| 久操大| 色欲av伊人久久大香线蕉影院| 色综合久久中文| 亚洲综合视频网| 亚洲综合视频在线| 精品人妻伦九区久久AAA片| 天天开心婷婷丁香五月| 久久R激情| 拳交大逼| 天天综合网、天天综合色| 久热免费视频| 日本va视频| 伊人久久中文网| 日本视频99| 99热久| 国产人妻人伦精品一区二区| 99A片| 婷婷97碰碰| 26uuu国产| www。88热在线视频免费观看| 久久99大全| 丁香五月色综合色播五月| 无码人妻精品一区二区蜜桃色欲| 女人天堂 AV| 99操免费视频| 69热91天堂| 99热这里是精品| 成人在线精品| WWW色五月| 日韩精品一品二区三区的使用体验| 噜噜噜狠狠色综| 做爰丰满少妇1313| 色吧五月婷婷| 十月色综合| 97精品欧美91久久久久久久| 成人五月丁香花| 人人操人| 中文字幕日产A片在线看| 99久久免费精品| av久热| 中文字幕丰满乱孑伦无码专区 | www.久久爱.com| 在线国产精品色| 色拍九九九| 色色99| 婷婷色五月综合| 精品久久99码| 欧美日本高清视频99| 婷婷操逼| 日韩成人中文字幕| 可以看的AV网站| 大功率国产在线| 丁香五月色网| 五月亭久久无码视频| 99色网站| 婷婷五月天第三页| 伦99热| 狼人婷婷久久| 五月婷婷,六月丁香| 精品人妻伦| 2022人人操人人看| 一本久婷婷综合| 国产精品涩涩涩视频网站| 天天做天天爱| 婷婷丁香五月亚洲| 五月婷婷丁香色播网| 日本va欧美va精品发布视频| 九九热99re8热免费观看| 亚洲精品网址| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 图片区 小说区 区 亚洲五月| 色五月婷婷在线| 亚洲sesesese| 成年人夜夜喷水| 九九无毛| 激情淫乱男女| 操操熟女| 亚洲色五月婷婷| 综合网亚洲| 婷婷五月激情网| 婷婷五月天综合网| 色综合天天综合成人网| 国产精品爽爽久久久久久| 天天综合天综合| 亚洲综合婷婷| 婷激情五月| 99精品7| 亚洲狠狠狠色婷婷综合激情久久久| 五月天激情图片| 射区导航| 综合婷婷| 综合亚洲五月天| eeuus五月婷| 亚洲激情网| 秋霞性爱AV| 东京热免费视频网站| 色欲色香,www,com| 影音先锋91资源站| 97香蕉久久超级碰碰高清版| 天天射影| 六月丁香深深爱| 日韩婷婷五月天| 嫩草综合网| 五月婷婷九| 天天爱天天做天天爽| 日日操夜夜爽天天天| 大地资源色婷婷视频在线| 国产特级毛片AAAAAAA高清| 性爱视频久久| www.色五月| 丁香五月婷婷基地| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 色婷婷色和| 99人人操| 五月丁香激情五月天| 日韩草草草草草草草草草草草草| 婷婷精品在线| 五月天综合在线观看视频| 婷婷无码视频| 天天射天天插天天干| 麻豆忘忧草午夜| 大香蕉人在线65| 丁香五月色色| 日本熟妇人妻在线| 另类视频五月天| 婷婷伊人网| 97色婷婷| 麻豆雪千夏| 第四色大香蕉| 综合狠狠五月婷婷| 五月天色综合| 国产精品国产成人国产三级| 九九热婷婷| 丁香综合婷婷开心激情网| 五月婷丁香久久久| 噜噜操操| 久久XX日本综合| 五月久久网| 亚洲日韩人妻操逼| 久综合| 色五月丁香五月| 欧美日韩国产一二区| 丁香六月婷婷社区| 337p午夜影院| 99ri在线视频| 国产三级在线播放| 99视频精品8| 欧美日韩成人高清在线| 九九九九精品精| 婷婷色九月| 亚洲中文乱字字幕线在永久| 在线色色| 久久伊人婷| 国产淫熟妇| 激情综合在线观看| 色婷婷丁香AV综合| 开心日韩丁香婷婷五月| 综合婷婷| 男女免费视频999| 久久色情| 97人人操在线| 色婷亚洲五月丁香| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇| 婷婷香蕉| 欧美三级黄色片久久| 玖操97| 99操视频| 丁香蜜臀黄色婷婷五月天| 99超超碰| 天天爽天天弄| 开心激情婷婷| site:901-07.com| 日本婷婷五月天| 亚洲性爱AV| 亚洲AV无码久久精品色欲| 91久操| 五月婷婷六月丁香综合| av在线免费网站 | 久热丁香| 日狠狠| 色五月丁香91| 五月丁香在线婷婷美女| 成人丁香婷婷| 久久久精久人妻| 免费看欧美成人A片无码 | 色五XX| www.97视频| 欧美婷婷五月无砖| 日本精品久久久久中文字幕| 性色播| 五月婷婷开心网| 超碰成人在线观看| 超碰在线人妻| 色热久资源| 欧美日韩一区二区三区四区| 婷婷五月天AV| 欧美久热| AV五月丁香| 激情深爱五月天| 欧美性久| 婷婷五月天成人网| 色色成人網| 色婷久久| 亚州性爱99| 色婷婷成人色网| 亚洲婷婷激情888精品久| 影音先锋秋秋五月婷婷| 五月丁香婷婷潮喷中文字幕| 在线亚洲综合| 激情久久五月天| 色欲av伊人久久大香线蕉影院| 色婷操逼| 狠狠色狠狠| 超碰在线91| 狠狠干五月天婷婷网| 99热这里是精品| 五月丁香激情综合六月涩涩爱| 少妇大叫太大太粗太爽了A片| 五月天婷五月天综合网在线观| 97五月婷| 九热精品| 国产日日夜夜操| 色婷婷激情视频| 五月天婷婷社区| 狠狠人妻色综合| 亚洲超碰在线| 日韩欧美一级大黄网站| 久久看婷婷| 五月婷婷六月丁香综合在线| 五月天无码| 久久9热好| 这里只有精品在线观看视频| 色10月婷婷视频| 538在线精品| 色播五月丁香| 996er热| 99精品爱| 精品牛仔裤超碰| 草草夜夜操| 欧美色五月| 天天色综和网| 性爱激情小说AV五月丁香花| 欧美日综合| 深爱五月日韩| 99热精在线九九久久保| 在线99精品| 丁香五月久久| 在线网黄| 女力报到正好爱上你| Www99热| 韩国中文字幕91| 婷婷久久五月天丁香| 天天草天天爱| 婷婷五月花| 日日操天堂| 激情久久久| 日韩三级高清无码| 亚洲天堂AAA| 六月丁香av| 色综合色综合色综合| 天天爽天天| 久re热视频| 婷婷五月天男人影院色色网| 99色在线| 99热精品99| 久久99草五月婷婷| 精品人妻伦九区久久AAA片| 九九热99熟女| 六月综合婷婷开心伊人| 五月天婷婷五月| www.激情| 久久久久9| 久久五月婷婷视频| 丁香五月之久操视频| 色色99| 天堂中文国产| 日本狠狠色| 国产成人99久久亚洲综合精品| 99 频99热国里只有精品| 亚洲综合999| 97碰碰人人视频| 青青草大香| 色九月婷婷| 婷婷狠狠操| 99久久久久久| 久久伦乱| 大香蕉婷婷五月天| 婷婷五月综合社区| 激情婷婷五月天日本系列 | 免费看成人AA片无码视频吃奶| 婷婷激情五月| 91九色在线| 久久久香| 色色色五月婷婷| 另类亚洲视频| 综合精品啪啪| 丁香久月婷| 亚洲 成人 电影av在线观看| 日韩AV免费| 亚洲天堂AV综合网| 五月深情久久| 91人久| 色欲五月丁香| 六六久久黄色| 婷婷五月天AV在| 99热99思午夜精品| 超碰国产AV| 九九色之九九色之88| 久久婷婷草| 激情丁香五月AV| 九九精品综合| 色五月激情视频在线综合| 亚州色婷婷| 欧美成人无码高清一区二区三区| 99热精品在线播放观看| 五月天天天综合| 婷婷五月天成人动漫| 蜜臀A∨在线水帘洞| 丁香色播五月天| 国产熟女日日骚五月丁香爱| 丁香五月天在线| 看全色黄大色大片| 成人电影一区| 亚洲激情AV| 97se在线视频| 久久99精品久久久久子伦| 久久婷婷色情7777网站| 五月婷婷狠天天色综合| 五月网网站| 99日本黄站| 午夜丁香婷婷| 婷婷五月天最新网址| 伊人婷婷大香蕉| 九九家庭影院| 婷婷五月图片小说网| 婷婷九月激情| 中文字幕1区2区。| 51精品国内探花| 久久天堂网| 狠狠夜夜五月丁香| 五月丁香在线| 成人精品视频99在线观看免费| 色色综合网www| 久久女人天堂| 国产熟女日日骚五月丁香爱| 五夜丁香| 久久R激情| 在线你懂的亚洲欧| 五月婷婷综合潮喷| 亚洲视频a| 婷婷五月天激情AV影院| 99re在线观看| 一区操| 色婷婷19| 思思热在线免费视频| 天天搡日日搡aaaaⅩ| 在线中文AV| 庭庭久久内射| 五月婷婷自拍视频| 天天色天天爱天天舔| 久久er视频6| 五月婷婷久久综合| 五月停停丁香| 天天干狠狠| www五月婷婷88导航| 丁香色六月婷婷| 五月天婷婷深深爱| 69精品人人人人| 色播五月丁香综合| www.五月天婷婷姐姐| 九九99在线免费在线观看视频| 超碰操日| 丁香五月天无码AV| 日本久久综合| 99热第一页| 乱色色色| 内射干少妇亚洲69XXX| 热99精品视频五月| 激情九色| 狠狠色综合无线观看| 久久九九免费大视频| 精品人人操| 性爱人人网| 五月草视频| 狠狠五月婷婷| 深爱激情AV| 99久在线精品99re8热| 婷婷的色色五月天| 久久爱婷婷| 狠狠狠狠狠狠草| 六月伊人婷婷| 人妻体体内射精一区二区| 91久操| 亚洲av网站| 六月婷婷综合久久| 激情六月色| www,色综合| 九九激情视频| 激情性爱网站| 久久婷婷六月综合综合色| 桃色五月婷婷| 99免费热视频| 丁香婷婷五月综合欧美另类| 成人视频婷婷| 九九色黄色| 2025年最新亚洲在线欧美| 色婷婷成人色网| 色情免费视频播放| 婷婷涩涩网| 国产.亚洲.欧洲视频在线| 国产精品国产| 超碰网站在线观看| 激情综合网五月丁香| 综合99久久| 久久丁香九| 激情五月综合亚洲另类| 婷婷丁香社区| 另类专区在线| 丁香五月1页| 国自产拍偷拍精品啪啪一区二区| 99在线观看这里都是精品| 日韩成人网址| 婷婷五月天激情五月天网站| 五月天大香焦| 中文字幕精品在线观看| 超碰激情网| 深爱五月天| 婷婷五月天a| 九九视频在线观看视频在线播放69| 日本成人噜噜噜| g00d人体西西| 伊人久久99| 精品一区二区三区四区五区六区介绍 | 久鲁鲁色网| 天堂无码人妻精品AV一区| 91啪级电影| 久久久五月天婷婷成人网| 五月天色五月| www.97干视频| 九九热在线精品视频| 人妻熟妇六区| 我去色色网五雨天| a网站免费观看| 春色激情第四色| 无毒黄色网址| 97超碰人人操| 五月婷婷自拍视频| 国产婷婷综合| 少妇高潮呻吟A片免费看软件| 狠狠激情五月天| 99热在线看| 日本狠狠色| 婷婷五月天综合中文| 久久激情五月天| 成人免费120分钟啪啪| 五月天综合在线观看视频| 日本高清久久| 黄色av高清| 天天操天天曰| 婷婷五月天偷拍| 五月丁香| 日本A片一区| 超碰AV在线| 思思热视频| 五月网激情| 夜夜久久综合网| 欧美黑人巨大性生话| 天天综合五月天| 色综合开心五月深爱五月| 国产成人在线精品| 丁香激情综合| 99A片| 日日干天天| 五月婷婷久久爱| 色五月色五天色情网| 91大操| 五月婷婷六月丁香| 免费看成人747474九号视频在线观看| 99热网站在线观看| 性一交一乱一交A片久久四色| 丁香五月瑟瑟| AA片在线观看视频在线播放| 一起草Av| 天天拍天天操| 丁香九月婷婷色| 99久久99九九99九九九| 青草青草久9视频在线视频| 丁香五月天堂网| 色人久久| 九九在线精品| 六月婷婷久久大全| 婷婷五月天伦理| 免费视频舔| 激情六月天婷婷| 99天天操夜夜操| 熟妇内谢69XXXXXA片| 五月丁香香蕉| 综合AV在线| 人人色婷婷| WWW.婷婷| 五月天色婷婷成人| 激情五月丁香综合网站| 中文aV网| 婷婷狠狠五月综合| 五月婷婷六月丁香激情深爱| 99热99极品观看| 色综合香蕉视频| 日日操夜夜操中国无码| 五月丁香婷婷狠狠操| 极品人妻VIDEOSSS人妻| 国产做爰视频免费播放| 五月丁香激情综合网| 丁香六月婷婷色XXXXX| 99久久大片| 视色综合| 久久婷婷综合五月天| 99综合免费视频| 久久性爱视频这里只有精品 | 精品国产a| 日本44久久在线| 成人国产欧美大片一区| 国产69久久久欧美黑人A片| 久久久中文| 天天干,天天日| 婷婷97狠狠成人网站| 日本久久网| 国产五月视频| 热99色| 久久九九九九| 十区AV| 9久操| 色综合色婷色基地| 大香蕉75线| 996热re视频精品视频| 久99视频在线观看| 五月激情五月丁香| 婷婷综合五月激情| 婷婷综合六月| 色七七色九九| 婷婷永久在线| 人人操av| 99丁香五月| 亚洲图色五月天| 久热91精品| 99在线观看| 激情亚洲婷婷六月| 深爱激情六月天| 99久久99九九99九九九| 五月丁香综合网| 日本色色色| 成人无码精品1区2区3区免费看| 天天狠狠综合精区| a在线免费v| 色色婷婷五月天| 另类激情五月| 色在线视频网2025| 久机视频这只有精品| 97操碰| 一起操 91N.com| 无码啪啪| 激情九九这里只有精品| 色五月五月天色婷婷色五月| 婷婷亚洲综合| www超碰com| 91九色视频| 午夜爱爱爱成人| 久热超碰91| 婷婷在线视频| 五月丁香婷婷激情影院欧美| 久久综合99| 少妇口诉沐足视频播放器网址| 丁香五月六月婷婷怡红院| 五月婷婷天堂| 九九色婷婷五月天| 九九热99视频在线| 六月婷婷狠狠做| 色五月婷婷操逼| 大香蕉220| 久久jiuwww| www.日韩艹| 婷婷丁香亚洲色综合91| 一本色道久久综合狠狠躁一二三| 黑人无码一区| 台湾佬天天日丁香婷婷五月天| 97丁香五月| 嫩草免费视频| 五月天婷婷激情网| 五月丁香亭亭| 亚州在线中文字幕| 激情婷婷丁香五月天小说| 精品国产va久久久| 亚洲精品字幕| 91精品久久久久久| 亚洲婷婷免费| 欧美性猛交AAAA片黑人 | 久久久久亚洲AV成人无码电影| 五月天自拍视频| 开心激情站| 99热高清在线| 五月天婷婷丁香六月| 99在线观看精品视频| 日本久草福利| 亚洲激情五月丁香久久久久| 操99| 丁香色六月婷婷| 一本色道久久综合狠狠躁小说| 丰满少妇猛烈A片免费看观看| 婷婷欧美综合| 可以看的AV网站| 天堂久热| 婷婷五月天成人动漫 | 91人无码久久久久久| 亚洲激情免费久久| 婷婷丁香五月亚洲17cao| 日本3级片一区2区| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 玖玖视频福利| 日本久久人| 婷婷综合九月| 99亚洲日韩| 欧美天堂婷婷日韩| 婷婷五月开心中文字幕色| 天天草天天爽| 日韩999| 色999亚洲人成色| 久久伦乱| 影音先锋一区二区三区| 99热爆在线| 婷婷色情小说| 五月丁香六月激情在线| 久操热| 66成人网| 狠狠综合色网| 99啪99| 9热在线观看| 五月婷婷深深爱| 另类激情四射| 色综合丁香| 五月婷婷激情性爱| 99在线精品观看99| 9久热| 色色婷婷五月天| caopeng超碰| 女人被躁到高潮嗷嗷叫小| 六月亚洲| 色五月婷婷777| 激情五月丁香激情综合网| 大香蕉久久综合网| 五月婷婷色吧!| 色色六月| 激情五月色综合国产精品| 婷婷丁香18| 婷婷五月天激情诱惑| 超碰永久在线| 五月丁香激| 操操天堂| 噼里啪啦完整版中文在线观看| 插插干干干色| 中文字幕丰满乱孑伦无码专区| 日屌日日操日日色| 色五月婷婷操逼| 五月婷婷久久综合| 九月婷婷综合八月丁香在线观看 | 丁香婷婷精品视频| 婷婷五月花| 色色色色色色网站| 激情玖玖综合网| 婷婷五月丁香色综合| 国产伦理精品高清在线观看网站一区二区 | 97色伦另类图片小说视频 | 亚洲一色色色色色色色色| AV中文网| 久草五月天| 九九婷婷综合| 无码激情AAAAA片-区区| av网站中文| 久青操| 亚洲欧美成人在线| 成年人看Va免费视频| 97电影99热| 99色在线| 曰日爽日日操| 久久性视频| 色色色热热热| 久久婷婷丁香六月天| 伊人婷婷大香蕉| 日日夜夜干| 五月天天天色| 五月丁婷香| 永久天堂日本| 91碰碰| 男人天堂AV在线一区二区| AV性爱网| 丁香五月大片| 久热中文字幕| 六月成人网| 女同激情久久av久久| 五月天婷婷六月| 久久九九@| 艳妇野外情欲放荡HD| 99九九热在线观看| 婷婷瑟五月天久久综合| 国产精品美女| 亚洲精品第一国产综合亚AV| 亚洲欧美成人在线| 五月亭亭狠狠| AV美美午夜| 五月婷在线影院| 色综合激情图区| 久久一热| 丁香五月天无码| 欧美极品999| 成人网丁香五月| 97操操网| 激情综合五月婷婷| 五月天婷婷基地| dingxiangtingtingliuyue| 大香蕉久操| 丁香婷婷超碰 | 亚洲精品乱码久久久久99| 欧美日比视频| 玖玖婷婷色欲| 欧美交换配乱吟粗大25P| 五月婷婷av| 夜夜谢天天干| 色欲色香伊人| 丁香五月第九色| 精品99这里有| 欧美三级黄色片久久| 日本人妻操| 丁香婷婷浪潮AV久久综合| 操碰91| 久久久久久久人妻| 五月天伊人综合| 99∨VTV| 丁香婷婷啪啪啪| 免费日韩99| 天天操夜夜爽天天操| 日韩精品一品二区三区的使用体验| 超级碰碰碰久久网站视频| 粉嫩AV久久一区二区三区| 久久色情| 欧美色色色色色色| 丁香五月另类小说| 激情五月天激情综合网| 能看的av片| 天天干天天日天天插| 99久久精彩视频。| 看婷婷五月天网| 色五月天影视| 五月婷婷99热| 婷婷五月色情天| 久久久ww| www婷婷| 久久免费精品小视频| 亚洲在线操| 婷婷综合| 激情久久久| 日本激情ⅩXX免费视频| 色婷婷五月天亚洲 | 久久综合干| 丁香婷婷五月色成人网站| 碰碰91| 99精品热| 中文激情网| 国产亚洲精品久久久久久久久动漫 | 色欲色欲久久宗合网| 亚洲99精品九九在线| 色五月婷婷成人| 亚洲影院婷婷色| 99玖玖视频| 亚洲xx网| 97操操操| 久久99这里只有精品| 色五月婷婷、老熟女| 综合五月亭亭9| 丁香五月婷在线观看| 五月亭亭网成人在线视频| 久色大| 色色A| 色五月婷婷丁香国产在线| 五月丁综合在线观看| 操日挥操日日| 思思精品视频| 婷婷激情综合| 六月丁香五月婷婷| 天天插天天插天天插天天插| 大战熟女丰满人妻AV| 七月丁香五月婷婷在线| 99久久久久久久| 天天综合情| 日批在线看| 免费不卡狠操美女视频网| 狠狠干五月天| 色色色色综合| 九九99九九精品免费| 色综啪啪啪啪啪啪| 超碰操网| 婷婷丁香五另类网站| 五月婷丁香久久久| 中文AV网| 99婷婷| 婷婷综合国产| 99碰碰| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 婷婷五月天视| 少妇熟女视频一区二区三区 | 久久丁香网| 美女网黄| 99热这里只有精品10| 玖玖资源站中文| www.婷婷| 色婷婷五月天| 玖玖综合玖玖| 深爱五月月天| WWW.婷婷| 日本天天操| 98热精品| 日本人妻丁香婷婷久久寝取熟女五月| 六月婷婷久久| 久久久噜噜噜久久人妻| 久久久久久久,99精品视频| 夜色爱爱亚洲| 天天爽天天爽天天爽天天爽天天爽| 久播影院免费观看电视剧大全最新网| 国产综合色婷婷精品久久| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品| 1024成人在线观看| 色婷婷五月基地在线| 99福利导航| 久久人人妻| 成人在线视频一区| 午夜爱爱爱成人| 色综合丁香婷婷| 五月天婷婷激情六月久久| 五月婷婷五月丁香综合| 色色a| 超碰在线日夜| 亚洲综合视频天天精品| 俺去也综合| 五月丁香久久综合91| 婷婷她六月天| 日韩啊啊啊| 日本三级第一页| 九九成人高清视频| 婷婷激情人妻| 色色色色色色色色色色色色色五月天| 情色五月天网站| 丁香婷婷中文字幕| 成人做爰高潮A片免费视频| 9操在线| 五月综合激情| 日韩 mm 不卡| 校园激情 亚洲| 五月丁香啪啪网| 99久热在线精品| 婷婷五月天综合网| 亚洲区1| 26uuu欧美亚洲日韩| 色五月丁香网| 大香蕉婷婷色| 久久婷婷五月综合伊人| 狠狠爱丁香婷| 亚洲激情精品| 黄色录像网点| 色五月之第四色| 丁香五月婷久久| 九九热中文| 日本久久人| 婷婷五月天中文字幕| 色婷婷五月天视频在线| 国产美女无遮挡裸体毛片A片 | 99精品亚洲| 色婷婷丁香AV综合| 亚洲第一色区| 深爱开心激情| 天天做天天爱天天爽夜夜揉| 欧美人妻一区二区| 91婷婷在线观看| 色色色色色色网| 久狠狠狠| 婷婷丁香五月激情密臀av| 这里只有精品免费观看网占| 99亚洲精品综合在线 | 欧美性猛交99久久久99| 五月丁香综合在线| 人妻人人操|