免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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
返回資訊列表
欧洲亚洲免费视频9| 五月天狠狠| 操碰久| 日本精品。999| 色婷婷亚洲综合av| 久久作爱| 色五婷婷| 日本在线视频播放91| 色色色五月婷| 婷婷开心综合人妻小说网址| 91紱請| 久久99色色| 碰碰操91| 色婷婷激情五月天丁香| 久色资源| 91日日日| 情色五月天 网站| 婷婷五月天在婷| 91要啪| 久久久久视剧HD| 久久99激情| 亭亭丁香aV| 美女100%露全身无挡网站| 九九亚洲视频| 天天色综网| 久热伊人91| 99丁香五月婷| 色五月婷婷很很操| 常久最新免费的色吊丝| 丁香婷婷人妻综合网| 欧美色色色色色色| 超级碰人人操人人干| 激情小说五月天| 九九视屏| 桃色五月天| 亚洲激情区| 人人草成人视频| 99人人操人人操人人精| 成人色图情色成人网 www.5b5b5bcom 五月天 | 99日这里只有精品| 开心五月婷婷六月丁香| 一起草无码| 国产精品天天狠天天看| 99无码| 丁香五月自拍| 色五月综合网| 久久女婷| 丁香五月成人社区| 人妻久久久| 久久五月婷婷丁香| 成人婷99最新| 天天狠天天叉| 久热久| 九九这里都是精品| 久久新地址| 人人爱国产| 国产精品蜜臀99| WWW·天天操·视频?| 日韩超碰在线| 99在线播放视频| 午夜成人综合| 色色婷| 免费观看亚洲AV片| 六月丁香婷婷拍拍| 丁香五月综合图片在线观看| 欧美天天干天天草| 激情五月天小说| 欧美激情Va| 亚洲亚洲人成综合网络| 99综合视频| 97热精品| 青草五月天| 激情五月天色网站| 久热免费| 在线18av | 激情操逼婷婷| 亚洲视频在线观看区| 日韩综合成人| 久久精品天| 开心激情网五月天| 99热综合色图| AV五月丁香| 五月天伊人综合| 亚洲午夜av| 大香蕉久操| 狠狠五月天| 久久激情五月婷婷| 2020日日干| 开心激情婷婷| 噜噜在线| 5Www色5夜| 婷婷激情综合色五月久久91| 丁香六月婷婷色XXXXX| 国产91在线视频| 成人一区在线观看| 任你操精品免费| 色九九一二| 欧美日韩五月婷婷| 成人操呦av| 人妻系列久久久久久久久久久 | 综合激情四射一theav| 20253AV| 超碰国产一区| 色久九| 另类在线| 蜜桃五月天色| 久久婷婷五月天| 色五月av| 综合久久高清| 五月天婷a| 色五月婷婷五月| 九九青青草成人| 五月丁香婷婷啪啪| 激情综合在线播放| 色天天综合色| 日韩色久| 久久综合五月情| 另类图片五月天激情| 色婷婷五月天成人网| 久久五月天精品视频| 六月丁香婷婷开心综合基地| 99在线免费视频| 五月天婷婷综合| www.9色色色| 激情综合网址| 五月综合婷婷开心网| 999热在线视频| 26UUU欧美| 久久无码成人| 立川无码av| 97热这里只有精品| 亭亭五月色男人| 五月激情天| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 五月婷网| 国产黄色大片| 亚洲色情免费网| 爱草视频在线观看| 五月丁香| 国产免费一区二区三区三州老师F1F1.CC | 五月婷婷六月丁香综合在线| 五月丁香啪啪啪| 91干婷婷| 国产乱码久久| 亚洲色图五月丁香| 在线观看欧美3区| 九九亚洲视频| 久久婷.com| 婷婷99视频在线| 亚洲av免费在线| 日日狠狠久久偷偷四色综合免费 | 中文字幕在线日亚州9| 黄色五月婷| 66精品国产成人| 天天精品视频免费观看| 天堂在线伊久| 五月婷婷免费视频| 亚洲亚洲人成综合网络| 婷丁香五月天| 最新五月天婷婷影| 99激情视频| 伊人九九综合| 开心五月深爱五月| 伊人久热91| 日日操夜夜操狠狠操| 色狠狠色噜噜AV天堂五区消防| 91久久久久久久| 99久久婷| 激情丁香婷婷| 99色色爰| 思思热这里只有精品| 日韩三及成人AV片| 婷婷丁香五月综合网上| 欧美日韩99| 五月丁香无码| 伊人干综合| 九月婷婷在线视频| 色婷婷综合五月| 婷婷五月天成人网| 欧美婷婷日本| 91久热| …亚洲黄色在线播放日韩、av中文a…| 夜夜夜天天操| 亚洲成人综合在线| 丁香婷五月天| 久久人妻熟女一区二区| 婷婷综合网伊人| 欧美激情综合| 婷婷成人小说综合| 亚洲欧美国产A片免费观看| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | www.爱婷婷.com| 婷婷五月天激情五月天网站| 香蕉久久国产AV一区二区| 成人网在线视频| 免费亚洲婷婷| 久久婷婷影院| 丰满老熟妇BBBBB搡BBB| 激情网五月婷婷| 婷婷5月久久综合网站| 99色在线观看免费| 久久久国产精品黄毛片| 青青草深爱激情网| 五月丁香花激情啪啪网| 天天搞天天色综合| 人人操女人| 婷婷五月丁香综合激情| 九月丁香婷婷| 五月天激情婷婷丁香| co超碰在线观看| 色婷婷五月综合在线| 亚洲视频综合网| 桔色成人在线| 婷婷色五月激情| 色五月五月天色婷婷色五月| 亚州第一黄网| 99热99在线| 久久婷婷五月天激情四射| 五月天婷婷丁香导航| 91色吧网| 欧美A片在线视频免费观看| 任你搞网站| 一区二区成人电影| 色婷丁香五月| 九月大香蕉| 色色综合色视频| 丁香六月婷| 人人干Av| 亚洲六月婷婷| 综合热无码| 色丁香婷婷| 五月丁香六月综合情在线观看| 人人摸人人| VA五月激情在线| 五月婷婷玖玖综合玖玖爱| 色五月婷婷很很操| 欧美日韩国产日本精品四虎网网站物| 丁香五月在线观看| 99性色| 思思99热在线| www.色色com| 夜夜爽天天| 色五月亚洲| 五月激情综合美女久久| 丁香色五月婷婷17C| 激情美女五月天激情在线| 亚州激情九月| 欧美成人猛片AAAAAAA| 99热这里只有精品86| 91婷婷色 | 婷婷精品在线| 99综合久久| 久久婷婷五月天激情新地址| 色色五月婷婷| 欧美激情VA永久在线播放| 激情五月天视频| 久热亚洲| 91人人妻人人操人人爽| www天天干| 热久久婷婷| 桃色五月天| 综合五月丁香六月婷婷| 九九热视频网站| 九九9久九9国产视频| WWW,婷婷,COM| 婷婷免费无视频| 五月丁香久人妻中文| 乱乱av| 激情综合网五月激情| 欧美激情xxxXX| 91精品无码久久久久久五月天| 怡红院AV亚洲一区二区三区H | 久9免费视频| 婷婷五月18永久免费视频| 婷婷永久在线| 热99精品视频五月| 婷婷最新地址| 少妇被躁爽到高潮无码文| 婷婷色在线视频| 99热精品在线播放观看| www.色五月| 色色综合五月| 五月丁香花激情啪啪网| 五月婷性爱| 国产毛片欧美毛片久久久| 9热视频在线观看| 色五月婷婷激情| 人妻在线中文字幕久久| 丁六月激情| www。五月天激情| 久久综合无| 五月婷婷草| 婷婷丁香五月基地| 停停综合色色| 九九这里是免费的视频5| 色。 日日日| 久久视网36| 色五月婷婷在线| 超碰色女| 综合激情在线| 综合啪啪| 国产精品久久99| 五月天操逼网| 五月天婷婷av| 婷婷五月播| 97色在线| 婷婷瑟五月天久久综合| 婷婷五月天色网久| 天天天天天天天操| 五月丁香婷婷基地| 激情婷婷久久| 强辱丰满人妻HD中文字幕| 热久久这里只有精品| 色综合香蕉| 色婷丁香91| 久久免费少妇高潮99精品| 亚洲V国产V欧美V久久久久久| 国产免费一区二区在线A片视频| 国产亚洲色婷婷久久99精品91| 久操大| 碰碰91| 欧美色色色色色色色| 99热久草| 97干在线| 8050一级网| 六月色 亚洲| 97人人操人人| 五月丁香婷婷爱激情综合网| 青草青草久热这里只有精品| 激情黄色小说五月天| 婷婷成人AV| 五月丁香婷婷婷激情爱爱| 五月亭亭综合五码| 丁香五月婷久久| 26uuu最新地址| 色五月视频无码播放| 思思99热这里只有精品6| 五月丁香婷婷俺| 久久精彩免费视频| 久热免费视频| 九九视频在线观看视频6| 婷婷操无码| 色五月激情五月天| 久久激情网| 99综合在线| 99精品免费| 婷婷色色综合| 啪啪色区| 99干免费视频| 亚洲免费在线观看岛国| 精品女人九九九| 欧美丁香婷婷天天操| 九九热99精品| AV在线资源| 国产看真人毛片爱做A片| 日韩有码一区| 草操AV在线| 成人婷婷五月天| 五月天久久综合婷婷丁香| 五月丁香六月激情在线| 五月丁香综合啪啪| 奇米四色五月天| 99久久9| 欧美激情综合五月色丁香| 97福利视频| 激情五月网站| 丁香九月婷| 婷婷五月丁香五月| 久久丁香五月综合六月激情红杏视频 | 婷婷在线操| 婷婷婷婷婷婷婷五月丁香| av在线免费网站 | 这里只有精品视频在线| www.粉嫩av.com| 日本色色图| 国产精品久久..4399| 色婷婷五月天在线观看| 日本色99| 久热在线中文字幕色999舞| 色性综合| 五月丁香六月激情| 中出内射的人妻视频| 无码人妻AV久久久一区二区三区| 天堂五月婷婷| 婷婷成人基地| 久久久精品人妻录| 婷婷综合网伊人| 五月丁香六月婷婷成人电影| 久久久精品婷婷五月天| 婷婷五日b| 欧美操人| 99在线视频精品| 狠狠色噜噜狠狠狠888| www.一区二区三区| 色色色色色日韩午夜激情| 久热这里只有精品66| 九月婷婷综合在线| 六月婷婷综合| 狠狠狠狠狠干| 日韩按摩二区| 99色日本| 国产FREESEXVIDEOS性中国| 亚洲婷婷开心五月| 99热欧美精品| 五月婷婷啪啪| 五月色婷婷综合| 久久精典| 久久婷婷五月天激情| 香蕉综合网| 丁香花五月天婷婷成人社区| 天天摸日日舔狠狠添婷婷婷| 免费视频无码| 婷婷激情六月综合| 欧美顶级少妇做爰HD | 天天 青草 丝袜制服 在线| 天天天天操| 五月婷色色| 九月婷婷激情| 99热e| 久热AA| 亚洲婷婷激情综合激情999精品| 五月丁香六月婷婷,婷| 五月天久久久| 五月婷婷丁香瑟瑟视频| 丁香婷婷综合精品六月初| 日产精品一线二线三线芒果| 色婷婷免费观看| 久久久久久97| 久久婷综合| 中文字幕在线资源| 九九精品视频在线观看| 欧美三日本三级少妇三99| 丁香五月激情网| 丁香婷婷久久综合在线| 91中文在线| 欧美日韩一区二区三区四区| 久久婷婷成人| 日韩在线一级| 99热精品中文字幕| 色婷五月丁香久亚洲| 97超级操操| 日本久久爱| 骚五月婷婷| 天天操天天曰| 色区域网站视频| 久热精品在看| 色日本五月天| 日本无va视频| 狠狠操天天操天天操| 成人短视频在线观看| 色综合香蕉| 婷婷五月激情视频网| 狠狠婷婷综合| 99视频日韩| 九九性视频| 日本综合色图| 第四色色六月色综合| 乱码操操| 9久久精品| 九九AV在线| 色五月天丁香婷婷色| 天天综合精品| 玖玖精品视频99| 99久久.www| 亚洲人人操| 99热亚洲精品66| 97超碰人人操| 怡春院天天干| 欧美一级色| 狠狠色综合网站久久久久| 91Chinese在线| 1024国产在线| 婷婷五月情| 99在线精品视频免费观看20| 天天舔天天插天天爱| 永久天堂日本| 精品一区二区三区免费毛片爱| 九九热这里| 婷婷丁香五月视频| 久久资源网五月婷| 色色色9 9 9| 色情成人五月天| 五月丁香无码| 国产精女同一区二区三区久| 成人丁香| 九九这里是免费的视频5| 婷婷丁香激情五月| 99色婷婷| 色九亚洲| 综合日本婷婷| 黄色av高清| 六月激情综合| 婷婷午夜精品久久久| 五月丁香六月欧美| 婷婷五月天影视网址| 五月丁香六月激情综合| 欧美啪啪五月天| www,999日本色| 色五月综合激情| 天天狠狠夜夜狠狠2023| 婷婷五月骚厕所| 99在线观看这里都是精品| 色五婷婷| 97黑人精品区| 久久日九九| 影音先锋 萱萱| 综合久久99| 色五月综合在线| 激情五月天社区| 开心五月深爱激情| 五月丁香婷婷伊人| 久热最新视频| 综合久久五| 4438全国最大视频成人网站在线观看| 色色五月天婷婷| 激情五月天色婷婷| 五月天偷拍| 97艹| 婷婷丁香激情五月| 婷婷91| 99久久综合狠狠综合久久| 九九色欲网| 丁香色情五月综合网站| 伊人五月天久久| 99久久五月婷婷| 色婷婷色丁香色欲av| 真实的国产乱XXXX在线91| 91九色国产| 99综合视频| 夜夜撸日日操| 91碰碰| www超碰| 色婷婷五月天| 亚洲V国产V欧美V久久久久久| 日韩婷婷| 最近中文字幕2019视频1| 另类小说五月天| 五月开心网| 欧美成人AAA片一区国产精品| 开心五月色婷婷综合开心网| 久久精品一区二区三区四区| 天天爱天天天射AV| 九九九九无码| 夜夜资源站| 久久性爱视频| 久久国产性爱A V| 色婷婷五月综合色婷婷| 一区二区三区视频| 91九色中文| 亚洲视频一区| 91精品综合久久久久久五月天| 亚洲AV永久无码影院黑人| 91精品丝袜久久久久久久久粉嫩| 内射在线CHINESE| www,久久久| 丁香五月婷婷亚洲色图| 五月婷婷久久综合| 婷婷5月天激情综合| 99亚洲欧洲| 亚洲第一精品网站| 国产精品色婷婷99久久精品| 五月丁香啪啪啪| 亚洲激情亚洲激情| 六月婷婷激情| 亚洲无码成人性爰网| 亚洲人妻av| 色黑鬼导航| 天天日天天爽| 日逼免费视频| 亚洲99热| 激情开心五月天| 五月婷婷丁香日韩在线| 丁香婷婷色| 婷婷中文字幕网站| 夜夜爽天操| 天天综合网~91| 亚洲99热| 8区视频在线| 久久亚洲婷婷| 天天色爽| 99热国产精品| 综合97五月| www久热com| 婷婷的99视频网站| 狠狠色 综合色区| 久久9热| 5月色亭亭视频| 色婷婷亚洲精品天天综| 99久久婷婷五月综合| 五月激情久久综合网| 日本在线wwww| 夜夜干夜夜操| 偷拍九九热| 久色婷婷200| 国产成人综合在线| 成人做爰A片免费看网站找不到了| wwwxxx五月婷婷小说| 五月丁香日逼| 只有精品视频在线观看| 婷婷五月六月| 婷婷五月骚厕所| 久久久久久五月天| 超碰在线看| 蜜桃人妻无码AV天堂三区| 久久五月婷婷开心网| 丁香五月天亚洲综合| 五月天婷婷色| 国产成人综合亚洲| 婷婷欧美激情综合| 婷婷五月天亚洲综合| 蜜臀久久99精品久久久久久酒店| 大香蕉五月天婷婷| 激情五月天婷婷| 亚洲成人超碰| 亚洲国产色婷婷| www.久久色.com| 天天精品视频免费观看| 五月丁香六月综合基地| 深爱五月激情综合| 久久综合网桃花| 婷婷午夜| 超碰在线视屏| 五月天激情无码专区| 91婷婷丁香| 久久密臀婷婷| 亚洲精品久久久久久久久久吃药 | 丁香婷婷五月天网站| 亚洲成人在线观看av| 天堂网啪啪| 99在线视频在线观看| 婷婷射综合| 精品99*| 超碰在线99| 九九久久网| 激情伊人五月婷婷久久| 久久婷婷激情| 丁香天堂夜| 丁香8月手机综合| 婷婷五月天伊人| 香蕉人在线香蕉人在线 | 婷婷丁香五月天色区| WWW.婷婷五月天.COM| 九一九九黄色| 99燥99日| 99热在线观看| 天天插天天日| 99亚州综合精品成人网| 色婷婷免费观看| 色五月丁香六月欧美综合| 亚洲色情一区二区三区四区| 99国产小视频2013| 日本久久网| 五月婷婷人人人操| 92国产福利| 91热手机在线| 综合五月丁香97| 婷婷丁香五月天色色| www,奇米影视| 日韩黄在免| 国产做A爰片毛片A片美国| 操人无码| 99精品在这里| www.99热| 丁香六月婷| 婷婷伊人| 丁香激情五月少妇| 99爱视频| 伊九九三级区| 无码少妇高潮喷水A片免费| 情欲综合网| 久久久久久久久月丁| 26uuu欧美激情另类| 亚洲色区17| 2014天天爽| 91视频一起草| 久久综合99| 这里只有精彩小视频视频网站| 伊人网欧美在线男人天堂五月丁香| 久婷婷| 五月天久久久| 五月丁香六月欧美综合| 天天干夜夜欢| 夜夜操天天干| 97影院一级片| 99久久久久| 搡BBBB搡BBB搡18| 婷婷五月天99综合网站| 9色免费网| 婷婷五月激情的图片| 香蕉国产2013| 丁香婷婷免费| Www.激情| 五月天激情图片| 久久婷色| 亚洲情欲久久| 國語久久婷| 婷婷五月天无码熟女| 欧美婷婷色五月| 六月婷婷八月丁香| 日日夜夜天天| 99在线免费视频播放| 182TV大香蕉| 无码一区二区日韩| 99九九精品| 六月婷婷激情| 婷婷丁香18| 亚洲综合一区二区| 情婷婷五月天在线| 这里只有精彩视频| 久久曰曰| 色天堂操| AV五月丁香| 99色色网| 少妇大叫太大太粗太爽了A片| 玖玖九九9999在线观看视频精品| 99在线视频色版| 人妻肉射免费观看| 综合AV在线| 九久久婷婷| 99久久久免费| 九九热只有精品| 99久re热视频精品98| 欧美色偷偷大香| 丁香五月婷婷无码AV| 五月丁香淫淫婷婷婷| 亚洲激情五月| 99久久五月丁香野外| 色七色九九| 免费视频无码| 精品综合网在线| AV色五月婷婷| 色婷婷五月天在线观看| 综合久久丁丁香婷| 色综合色综合婷婷热| AV人人操| 婷婷丁香成人色综合| 久久婷婷亚洲| 天天爽天天| 精品99*| 梁铮版蜘蛛女在线观看| 亚洲综合色色| 欧美色碰| 狠狠干综合网| 五月J香蕉婷婷| 五月天天天综合| 99爱爱网| 爱草视频在线| 在线中文字幕视频| 欲求不满的人妻| 婷婷5月开心6月| 婷色五月| www.婷婷亚洲基地| 丁香五月天婷婷中文字幕| 欧美亚洲色色色色| 色综合播放| 激情综合网五月| 久久网日本| 亚洲秘 无码一区二区三区妃光/1| 五月天婷a在线| 亚洲色色爱| 久/久精品99看9| 婷婷丁香宗合888| 亚洲色网址| 久久婷婷五月综合网| 97色伦另类图片小说视频 | http:色情日本com| 日本人妻丁香婷婷久久寝取熟女五月| 性色五月天| 日本三级黄色大片| 99热偷拍| 五月婷成人| 丁香婷婷基地| 人人干天天舔| 丁香六月婷婷综合| 色在线五月天免费| 日韩成人无码| 五月丁香六月婷婷a v| 成人中文网| 99re这里只有精品首页| 90色免费视频| www.99视频| 成人网页在线观看| 婷婷激情在线| 超碰在线91| 五月天激情网图片| 日批在线看| 五月婷婷玖玖综合玖玖爱| 五月花亭亭| 9久热视频| 欧美狠狠色| 玖玖色综合网| 九月色婷婷| 丁香婷婷啪啪啪| 丁香五月 激情文学| 婷婷成人视频| 色一情一乱一乱一区91Av| 色久综合| 小视频一区| 丁香狠狠操| 丁香六月激情| 色婷五月婷婷| 久久涩视频| 九九无码| 丁香六月色婷婷欧美| 亚洲精品久久久久久久久久飞鱼| 色五月婷婷婷婷| 狠狠色网| 99色色网| 桔色成人在线| 婷婷九月激情| 亚洲精品一区中文字幕乱码| 五月婷婷六月丁香在线视频| 五月丁香六月婷婷成人| 色婷婷香蕉| 久久视频在线| 五月婷婷无码| 色啪久 | 激情五月色婷婷| 三级大香蕉网| 97色片| 九九色婷| 久九色| 日本熟女一区二区| 91尤物九色在线| 精品亚洲国产成AV人片传媒| 天天日 天天草| 久久激情综合| 久热伊人9| 日韩精品AV一区二区三区| 五月天婷婷激情小说电影| 久久激情视频99| 久久久.www| 丁香五月天社区| 色五月丁香婷婷在线观看| 五月婷婷激情四季| 91九色中文| 99年操人人爽| 日本色色色| 丁香五月婷婷六月| 免费AV黄在线播放| 99热销国产这里有精品| 久久精品国产精品| 91精品久久久久久| 自拍盗摄 另类| 天天弄天天爽| 91丨九色丨白浆| 五月丁香色色色| 亚洲妇女熟BBW| 色丁香婷婷| 在线观看中文字幕| 第四色婷婷五月| 色热久资源| 久久久婷丁香五月天激情综合| 玩熟女五十AV一二三区| 夜夜撸夜夜骑| 亚洲五月天婷婷| 深夜激情网| 六月婷婷七月丁香| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 五月婷婷啪啪啪| 五月丁香婷婷五月| 婷婷激情五月综合丁| 噜综合| 色V狠狠的干| 五月婷婷激情日本| 久久精品日| 欧美色婷婷| 手机看片日日做夜夜| 色情五月丁香| 国产无人区大片| 怡红院成人AV| 99精品久| yirenjiqingshiping| 屁股翘好撅高迎合跪趴| 二色av| 99热在线看| 久久久精品色| 99久热在线精品99re6热| 婷婷五月天福利| 综激情网| 久久图色4| 成人色色视频| 俺去也五月| 天天综合激情| 五月丁香婷婷成人网| 超碰无码318604| www.深爱激情| 久久综合26p| 五月天成人伊人| 91丨九色丨43老版熟女| 操人91| 大香蕉99热| 久久9999| www.色婷婷.com| 五月婷婷丁香五月| 99热这里只有精品18| 色网五月婷婷| 人人干Av| 婷婷欠久少妇| 综合深爱五月| 丁香五月婷婷av影院| 成人AV在线网站| 成人免费120分钟啪啪| 亚洲中文无码成人| 丁香五月综合| 人妻操逼| 噼里啪啦完整版中文在线观看| 六月激情婷婷色| 五月丁香六月激情综合| 亚洲欧洲中文日韩久久AV乱码| 色婷婷丁香五月| 五月丁香婷婷成人网| 亚洲殴洲精品Av在线| 色五月天天在线观看资源站| 五月丁香六月激情欧美综合| 色欲久久综合| 99爱在线免费视频| 伊人大香五月天| 99只有精品| 六月色婷婷欧美| 爱99干99| 丁香五月婷婷手机| 一区中文字幕电影| 久久99精品久久久久久三级| 久久99精品久久久久子伦| 碰碰女| 丁香五月婷婷深爱综合激情| 操一区| 26uuuavcom| 国产97在线日韩亚洲女人被黑人巨大| 亚洲另类噜噜| 99伊人性爱在线影院| 色欲婷婷五月天| 另类色视频| 久久综合九色综合97婷婷| 久99热| 97碰人人操| 五月天婷婷视频| 桃色激情婷婷伊人网| 欧美 色婷婷| 色婷婷五月天视频网站| 91色九| 久久久久9| 热久久视频99| 91色在线 | 日韩| 婷婷五月色| 激情五月天无码| 激情五月瑟瑟| 91超级碰碰碰| 我爱婷婷五月天综合88| 久re在线| 五月婷婷之综合激情| 婷婷六月插屄激情| 超级碰碰视频无码| 亚洲欧洲另类| 黄涩毛片| 婷婷五月天你懂的| 六月激情婷婷| av人人操| 四虎成人精品永久免费AV九九| 亚洲精品99| 五月天精品视频| 一逼色综合| 久久婷婷七月丁香| 大香蕉婷婷久久| 综合五月亭亭9| 人妻激情视频| 欧美在线视频99| 五月丁香色| 色婷婷成人丁香| WWW、日本色丁香、co m| 91精品丝袜久久久久久| 九九热99精品| 思思热视频在线观看| 日日干夜夜撸夜夜骑| 射久久丁香五月| 亚洲精品无码一区二区| 五月激情婷婷播播开心| 久久99热这里| 99色五月| 99亚洲精品综合在线 | 丁香六月婷婷| 99久在线精品99re5热视频| 思思99精品视频在线观看| 极品少妇婷婷五月| 日日夜夜干| 美欧日韩国产成人在战| 激情五月婷婷中文字幕| www色五月| 强奸幻女毛片| 亚洲国产精品SUV| 久热一本| 婷婷五月视屏| 色。 日日日| 97人人干人人操| 狠狠色婷婷色| 超碰97在线操| 亚洲九区| 五月天婷婷视频小说| 色婷婷在线综合色播网| 国产熟女一区二区三区五月婷| 日韩av免费版| 成人片黄网站色大片免费毛片| 99九九玖玖| 婷婷五月情天| 26uuu亚洲欧美另类| 97人妻碰碰中文无码久热丝袜| 俺去婷婷 丁香| 亚洲精品字幕| 99热这里有精品| 欧美色宗和激情| 丁香六月情| 爱婷婷久久视频| se色99| 99久久婷婷国产综合精品草原| 婷婷激情五月天小说| 亚洲操女| 香蕉久久国产AV一区二区| 99思思| 91AV婷婷| 五月婷婷丁香| 久久久久久久久人妻| 五月丁香色婷婷基地| 色欲婷婷夜夜| 五月天婷婷色色| 欧美日韩成人一区二区| 午夜日日| 野外99热| 97操男人的天堂| 久月久在线视频| 91久久精品国产91性色TV| 大香蕉人妻| 激情综合网五月| 99视频内射三四| 久久99操| 五月丁香啪啪激情| 國語久久婷| 色五月超碰| 久久久久亚洲AV成人无码电影| 天天日天天色| 亚洲熟妇无码乱子AV电影| 99热这里只有精品1| 五月草视频| 色 色 色综合com| 九九热思思| 人。妻久久| 开心婷婷丁香五月| 人人视频人人干人人做| 99热在线只有精品| 五月丁香综合激情网| 色爱亚洲| 99爱视频| 黄色五月婷婷| 亚洲成人网站在线观看| 思思热在线播放| 开心五月天激情网| 狠狠色婷婷777| 亚洲乱码精品久久久久..| 国产精品人人做人人爽人人添| 欧美搡BBBBB摔BBBBB| 国色天香成人网| 超碰在线观看三级片| 丰滿爆乳一区二区三区| 婷婷五月丁香性爱| 久久精品99久久久久久久久| 综合网网欲色| 婷婷久久五月天丁香| 天天爽人人综合免费7799| 日韩婷婷五月| 五月丁香婷色| WWW.99热| 天天干电影| 五月色婷婷综合色| 狠狠色丁香婷婷基地| 色情一区二区播放| 天天日夜夜拍| 性视频久久| 天天干天天干天天干| 亚洲乱码日产精品BD| 欧美97超碰| 天天色99| 亚洲人成网亚洲欧洲无码久久| 五月停停直播| 丁香六月色婷婷综合| 囯产精品久久欠久久久久久九大| 超碰免费99| 激情婷婷五月天| 婷婷丁香大香蕉| 超碰93在线观看| 综合婷婷六月| 丁香五月乱中文字幕| 五月婷婷|欧美| 九九人人操| 超碰成人影视| 久久五月网| 婷婷五月天AV激情| 激情综合五月婷婷六月丁香 | 五月天激情图片网| 激情综合区| 五月综亚洲| 色偷偷五月天| 五月婷婷综合网| 天天色五月婷婷91久久久久久久| www.久久综合| 日本天天综合| 婷婷五月免费视频| 99爱爱| 久久一伦| 五月伊人综合| 99热这里只有精品2016| 五月丁香在线观看| 99色在线| 欧美日本99| 韩日在线熟女| 99热这里只有精品4| 五月丁香综合激情| 中文字幕不卡网站| 午夜免费试看| 婷婷五月色網站| 九九这里都是精品| 五月天大香蕉婷| 亚洲色精彩| xx人人xx| 被强行糟蹋的女人A片| 久久婷综合网| 伦99热| 亚洲精品99| 97男人天堂| 亚洲色色图片| 久久精品夜色噜噜亚洲a∨| 亚洲精品又粗又大又爽A片| 六月大香蕉| 九九九成人在线视频| 外国碰视频网站97| www.玖玖九| 婷婷五月天最新综合你懂的 | 五月婷婷影视| 丁香六月激| 狠狠干五月天| 日本人妻伦在线中文字幕| 狼人婷婷久久| 婷婷色5月激情网| 激情综合五月天| 色色色婷婷五月天| 一本久道综合色婷婷五月| 99久热| 久久9久| 五月丁香婷婷欧美| 淫五月停停| 操人妻90p| 丁香六月婷婷综合激情欧美| 免费日本aⅴ中文字幕| 色色色在线免费视频| 狠狠色五月| a毛片二逼wwwwwwwwww| 婷婷五月天激情综合婷婷五月天激情综合| 狠狠干综合网| www九月婷婷| 日日狠夜夜狠| 人妻体体内射精一区二区| 久久9久| 九九干视频| 欧美69色| 五月花婷婷丁香| 成 人片 黄 色 大 片| 天天做天天爽| 丁香色色色| 久久99精品久久久久久噜噜| 91在线看片| 热99这里只有精品视频| 国产精品人成A片一区二区| 亚洲中文字幕av| 激情综合在线观看| www91在线| 九九婷婷网五月天| 大香久久综合网| 人人看人人摸人人| av中文网| 涩涩五| 无遮挡国产高潮视频免费观看| 丁香五月天欧美成人| 综合网色| 色综合久久综合中文综合网| 激情丁香五月| 久一网站| 国产午夜精品一区二区| 怡红院91a√| 激情五月天综合婷婷网| 丁香婷婷综合色五月激情国产基地| 一级二级色大片| 天天操天天日天天操| 精品二区| 99爱最新免费视频在线观看| 成人无码精品1区2区3区免费看| 久久五月丁香伊人青草| 激情综合五月| 天天爽天天日人人爱| 国产99热| 五月人人丁香婷婷五月人人丁香| 日韩婷婷| 九九免费视频在线| 成人片黄网站色大片免费毛片| 五月六月激情婷婷| 强辱丰满人妻HD中文字幕| 婷婷六月网| 色婷婷狠狠禁18久久| 天天日夜夜爽。| 9 大屁股在线视频精品| 丁香婷婷成人网站| 欧美图片丁香五月天| 香蕉狠狠爱视频| 中文字幕 码精品视频网站| 99久久6| 热99精品视频在线观看| 69精品人人人人| 五月婷色丁香| 亚洲成人丁香花| 天天色天天操天天射| 97色永久免费视频| 婷婷色五月丁香六月欧美啪| 久久五月天大美女| 中字幕视频在线永久在线观看免费| 亚洲综合婷婷| 伊人影院久久网| 亚洲啪啪网| 激情网站五月| 99热99艹在线观看| 九热视频| 爽极品色| 五月天激情国产综合婷婷婷| 婷婷丁香五月欧美人| 五月丁香趴趴| 综合色图区| 婷婷久久国产视频| www.亚洲激情.com| 99男人的天堂| 深爱五月激情综合| 五月丁小婷婷激情四射| 亚洲国产精品VA在线看黑人| 日日干天天射| 精品国产乱码久久久久夜深人妻| 伊人久久丁香婷婷六月五月综合| 日本少妇AA一级特黄大片| 成人亚洲精品| 色综合久久伊伊婷婷五月| 在线sebiav精品视频| 97碰超级人人看| 插插插色综合网| 五月丁香趴趴| 97精品综合久久| 99啪在线视频| 日韩无码色色| 婷婷丁香人妻久久在线观看| 欧美日韩成人在线网站| 可以看的av| 久久婷婷综合五月天| 99久久久| 婷婷五月欧美AA片免费| 亚洲综合激情五月久久| 深爱五月天天| 久久婷婷五月综合成人d啪| 国产FREESEXVIDEOS性中国| 婷婷五月av| 久久这里只有精品07| 欧美人人女女精品综合五月天| 成人看片网站|