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
返回資訊列表
五月婷在线| 永久精品| 色婷婷狠狠干| 综合色五月亭亭| 色爱终和网| 第四色五月婷婷| 99超级碰免费视频| 人人摸人人搞| 国产精品噜噜在线视频| 婷婷丁香五另类网站| 五月天婷婷基地| 夜夜撸天天日| 久久九九免费大视频| 五月丁香婷婷狠狠操| 婷婷五月色| Av性爱网| 91久久婷婷| 五月天色小说| 熟妇无码乱子成人精品| 久热99| 精品久久久久久久久久久久人妻| 99惹在线精品免费观看| 久99在线视频| 99日逼视频| 天天干天天干天天干| 婷婷六月久久综合导航| 5月丁香六月婷婷| 粉嫩av懂色av蜜臀av熟妇| 欧美性猛交99久久久久99按摩| 色五月五月婷婷| 久久色五月| 超91在线视频| 国产免费一区二区三州老师F1F1……| 丁香五月婷中字在线| 五月婷婷啪啪网| 色综合色综合网| 婷婷激情五月天网站| 婷五月天六| 亚洲精品无码一区二区| 午夜少妇在线观看视频| 99精彩视频| 91色在线/日韩| 激情五月天综合网| 久久久久久综合88| 久久婷婷五月综合| 激情小说五月天| 欧美日本国产欧美日本韩国99| 99性爱精品| 天天狠狠插| 五月天色色网站| 色九月欧美| 大香蕉啪啪啪| 日本精品人妻无码77777| 无码九九| 久久与婷婷| 九九热黄色| 久久婷婷五月综合啪| 波多野结衣成人作品在线| 蜜桃人妻无码AV天堂三区| 美女激情综合| 操一区| 五月花激情| 欧美99热| A片试看120分钟做受图片| 99这里只有精品|v| 大战熟女丰满人妻AV| 狠狠狠狠狠狠狠狠| 国外亚洲成AV人片在线观看| 狠狠狠狠狠狠草| 欧在线一区| 超碰永久在线| 操久久网| 色。 日日日| 丁香五月日啪| 激情六月综合| 色色网站| 六六久久黄色| 99九九综合久久九九| 五月丁香91| 色九月婷婷综合| 久久 婷婷 五月天| 激情五月婷婷综合网| 婷婷亚洲激情在线观看视频| 婷婷六月五月| 五月丁香天堂网| 激情婷婷五月天| 射久久丁香五月| 国产精品视频| 乱精品一区字幕二区| 天天操天天干天天射| 久久日本wwww色| 婷婷综合另类| 亚洲丁香婷婷五月天综合色| 小视频久久久aaa| 中文AV在线观看| 99久re热| 亚洲五月六丁香激情| 婷婷五月天激情小说| 五月丁香爱婷婷深深| 人人干天天操五月丁香| 久久九九@| 久久这里有精品| 最近中文字幕2019视频1| 超碰只有精品在线| 99热这里在线精品| 99精品性爱| 久久婷婷成人| 丁香五月大香蕉AV| 色婷视频| 五月天狠狠色| 97男人天堂| 丁香五月婷婷色情综合| 操射国产日本| 免费视频WWW在线观看网站| 97操碰日本女人| 特黄三级片| 无码婷婷五月天| 天天肏在线观看| 韩国中文字幕91| 天天射天天干天插色综合| 激情二色月| 久久大香蕉同僚| 熟女人妻一区二区三区免费看| 奇米四色五月天| 91久久婷婷| 日日夜夜噜噜爽爽| 日本人妻伦在线中文字幕| 丁香五月激情啪啪啪| 亚洲视频二区| 秋霞AV淫| www.五月天婷婷| 丁香五月天天日| 亚洲AV人人操| 五月天三级久久| 五月婷婷六月爱| 狼人婷婷久久| 五月婷婷中文字幕| 婷婷中文字暮| 婷婷五月丁香基| 五月久久婷婷天堂视频| 久色大| 99热爆在线| 激情综合网丁香| 人人操97| 99色综合| 涩涩五月天| 国产精品操| 99热在线这里| 亚洲精品中文字幕成人片| 丁香五月网| 久久香蕉影院| 丁香五月宝贝激情网| 91丨九色丨高潮丰满日本| 99色在线视频观看| 久久怡红院| 91人无码久久久久久| 五月亚洲激情| 婷婷五月丁香青青草在线| 免费的日逼视频| 国产精品久久..4399| 欧美人人超级碰| 色狠狠综合入口| www.金莲av| 热热久久久久久久久| 99热思思| 99在线精品免费视频| 五月天亚洲图片婷婷| 91人操| 99内射视频| 欧美日韩AAAA| www.婷婷亚洲基地| 五月婷婷六月天| 五月丁香婷婷久久| 国产午夜精品AV一区二区麻豆| 天天综合亚洲综合网天天αⅴ| 色综合99| 久久AV电影| 婷婷5月久久综合网站| 婷婷五月天com| 亚洲狠狠爱婷婷| 亚洲、热| 激情综合99| 99re在线视频| 97色五月天| 欧美三级巜人妻互换| 五月婷婷婷婷婷婷艺术| 亚洲精品网址| 激情四射婷婷| 99er6| 国产精品99久久久久久久女警 | 日亚二欧美| www.97干视频| 色色丁香| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 九九热视频首页/这里只有精品| 婷婷五月天堂| www.99热这里只有精品| 天天干,天天舔| 禁欲电影完整版在线播放| www.日韩艹| 久久44| 亚洲操操操| 外国碰视频网站97| 色色热日| 97人人干| 91久久| 99热国产国产| 91玖玖| 中文成人在线| 国产一级片| 天天综合插插| 337p大胆噜噜噜噜噜91Av| 伊人激情AV一区二区三区| 婷婷射婷婷舔| 777丁香六月青青草婷婷综合久月| 五月天大香蕉婷| 激情久久五月天| 丁香五月激情综合网激情五月| 日本在线wwww| 99ree6| 久久色五月| 一本久久亚洲五月婷婷| 男女99免费视频| 色婷婷五月综合激情中文字幕| 婷婷无码视频| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 天天摸天天舔天天天天爽| 丁香花色色网| 97久人人| 亚洲AV免费国产电影| 性爱视频久久| 欧美色五月| 婷婷丁香五月综合网上| 午夜九九九九九九九九九九九九九| 26uuu激情五月天| 天天操综合网| 国产色色在线| 伊人久久大香蕉网| 久九男女天堂| 九月婷婷久久久| 亚洲婷婷丁香五月天激情小说 | 草草影院爱爱| 国产精品久久久久9999小说 | 欧美日韩成人在线免费| 99精品偷自拍| 国产9色在线/日韩| 丁香激情五月少妇| 情欲综合网| 丁香花成人区| 色婷婷在线电影| 久久久久亚洲AV成人无码电影| 六月婷伊人| 色婷婷AⅤ| 国产全是老熟女太爽了| 久久亚洲婷婷| 色五月婷婷在线| 激情五月综亚网| 婷婷爱爱蜜臀天天操| 秋霞AV吧| 99热官网| 五月天大香蕉| 夜夜干夜夜操| 99精品国产热久久91色欲| 五月天婷婷深深爱| 久久er+| 97人妻碰碰碰久久| 99在线播放| 丁香六月啪| 大天天伊人| 五月丁香花开综合网| 丁香婷婷六月婷婷六月婷婷六月婷婷| 日逼影音先锋AV男人资源站| 色五月 婷婷, 大香蕉| 色色色综合网| 婷婷综合五月| 六月色色| 五月天婷婷视频小说| 亚洲久久婷婷丁香五月天| 日韩成人免费电影| 午夜天堂啪啪| 超碰91在线| 91操在线观看| 成人AV网站在线| www.99.色| 无码少妇高潮喷水A片免费| 91天天操天天干天天射| 婷婷丁香色女人| 亚洲无AV在线中文字幕| 99这里有精品视频| JAPANRCEP老熟妇乱子伦视频 | 深爱五月亚洲| 婷婷免费无马| 99精品久久| 九九亚洲综合| 丁香婷婷基地| 久久久人妻不卡| 99色婷婷视频| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 婷婷丁香综合网| 久久精品99国产精品日本| 五月天婷婷色综合| 婷婷五月天久久久| 免费观看欧美成人AA片爱我多深 | www.色色com| 99国产精品久久久久久久久久久 | 婷婷五月丁香伊人网| 都市激情五月婷婷综合| 夜夜夜叫天天天做| 五月婷婷丁香瑟瑟视频| 婷婷五月天狠狠色| 超碰在线成人| 亚洲欧洲99| 97五月综合网| 91精品丝袜久久久久久| 婷婷爱综合| 99色啊| 亚洲色色在线| 国语精品探花| 五月天婷婷网站888| 久久看婷婷| 97资源碰碰| 五月天婷婷社区| 超碰人人在线| 久9精品视频在线| 91呦呦呦| 久久与婷婷| 伊人干综合| 思思热国产视频| 开心 五月 综合| 另类婷婷丁香| 九九無妻| 97人人超| 国产探花一片区| 大香蕉人人网| 日韩成人电影AV| 色婷婷五月天激情久久| 999影院成人在线影院| 99网| 六月婷婷色综合| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 91操熟女| 婷婷五月天亚洲丁香| 色五月激情五月天| 综合网亚洲| 99在线精品免费视频| 7777久久亚洲中文字幕| 婷婷五月天av| 五月婷婷六月丁香玖玖玫瑰91| 97超碰欧美中文字幕| 激情久久肏屄视频| 丁香婷婷伊人| 色色亚洲视频| 免费啪啪啪网站 | 99色色最新视频| 色综合色色| 九九香蕉网| 激情5月婷婷| 综激情网| 99色一| 99福利导航| 亚州美女| AV在线观看网站| 婷婷深爱五月天在线| 高清无码入口| 超碰免费人| 91精品久久久久久久久 | 久久婷婷资源| 激情婷婷五月色| 99综合网| 热99色| 国产 亚洲 在线| VA婷婷亚洲| 久久9视频欧美| 色99综合色88| 色噜噜狠狠色综合伊人| 大香蕉久久久| 超碰在线94| 天天爱天天做天天舔| 色五月丁香婷婷久草| 中文人妻AV久久人妻18| 成人av观看| 热久91| 丁香五月网站| 狼友视频在线观看18| 色婷婷丁香女女| 五月伊人网| 婷婷射丁香| 五月婷婷色| 91视频一起草| 婷婷五月天AV在线| 热思思九九| 婷婷亚洲天堂| www.久久久.com| 色五月色开心开心五月| 激情五月婷婷综合视频| 99热最新网址| 九九色综合| 五月天综合在线| 免费日本aⅴ中文字幕| 日本本土色网第一区| 色99热| 色五月婷婷影视| 激情五月丁香激情综合网| 婷婷午夜天| 91网站黄| 亚韩在线视频| 成人电影在线免费试看| 亚洲色夜| 99狠狠| 激情五月丁香综合网站| 久久ri精品| 婷婷五月天六月综合| 99热这里是精品| 久久婷狠狠色| www.久久久久| 99日本在线| 五月 激情视频| 久久aaaaa| 五月亭亭狠狠| 久综合| 婷婷九月亚洲| 五月丁香色色网| 中文av网站| 综合激情四射一theav| 热久视频| 亚洲成人中心| 99精色| 久久婷鲁| 亚洲欧美另类在线23p| 色色网站日本91| 色综合久久久久久久久五月| 91久久人人操| 97性视频| 婷婷丁香五月av| 久久人人看| 思思久久久婷婷| 五月丁香色狠狠干大屄| 久久伊人婷| 九九热这里只有精品6| yazhochengrenavwang| 色五月婷婷基地| 91丨九色|PRNY熟妇| 狠狠五月激情丁香六月| 色播丁香五月婷婷操:屄| 欧美内射AAAAAAXXXXX| 丁香五月六月激情| 丁香婷色| 任你躁XXXXX麻豆精品| 久久久五月四色| 国产色视频网站2| AV成人在线播放| 色停停香蕉视频| 中文av网| 战争与艾拉电影免费观看| 97涩婷婷婷婷基地| 九九九九毛片| 色色丁香五月婷婷| 99热全是精品| 99色综合| 六月丁香激情网| 六月婷久久| 91Chinese在线| 99热精品一| 大香蕉75线| 五月丁香啪啪啪综合网| 99热99这里免费的精品| 少妇激情基地| 色天堂操| 操人妻AV| 五月婷婷色色| 噜噜视频| 激情五月天色爱| www.99热在线观看| 超碰免费观看| 色婷婷五月综合| 天天天天操| 久色视频首页| 九九色色网| 久久久精品免费啪啪国| 五月婷婷激情综合| 97操碰碰无码视频| 色丁香五月婷婷在线| 色婷婷狠狠18禁| 大香蕉视频婷| 香蕉久久国产AV一区二区 | 97激情五月天| 九久9精品| 色婷婷91激情小说| 国产69久久久欧美黑人A片| 六月久久婷婷| 天天日天天爽夜夜爽| 天天爽—爽| 日本一级一片免费视频| 婷婷五月天丁香久久| 任你爽视频| 激情丁香六月| 五月婷婷婷丁香播| 天天日天天干天天天| 九月婷婷综合八月丁香在线观看| 天天爽人人综合免费7799| 超碰色人妾| 午夜亚洲AV日韩无码| 国产性爱亚洲是图| 99九九热在线观看| 天天做天天爱天天爽| 婷婷六月伊人| 激情五月,深深爱五月| 五月天婷亚洲天综合网综合| 99精品在线播放| 99熟女啪啪视频| 丁香六月欧美| 91猫咪国产在线播放| A短视频免费在线观看| 五月天激情综合网| 99色在线| 日韩啪啪网| 99在线小视频| 99色网站| 久久久久久欧美精品se一二三四| 开心激情五月天网| av狠狠操| 婷婷丁香成人| 丁香久久| 99热在线观看| 五月丁香本色在线观看| 亚洲黄色网址| 婷婷五月天天| 丁香五月天堂亚洲社区| 丁香九色不卡aaa| 七七久久综合| 日本理论久久| 91日日日| 91色色色| 激情小说五月天社区丁香 | 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 色综合色婷婷色伊人| 去干网av| 天天操夜夜夜拍拍拍| 天天操天天操综合| 天天舔天天摸天天透| 激情综合六月| 六月婷婷色| 青青草轻轻操| 91蜜桃婷婷狠狠久久综合9色| 狠狠综合| 人妻丰满精品一区二区A片| 狠狠狠狠狠| 免费看欧美成人A片无码| 熟妇无码乱子成人精品| 婷婷影视久久| 天天色99| 丁香六月婷婷综情欧美| 全国最新疫情| 九九热99热| 欧美精品18| 亚洲熟女色| 五月婷婷影院| 婷婷福利影院| 五月天丁香久久| 久久曰曰| 婷婷丁香五月欧美人| 天天爽天天做| 亚洲AV综合在线观看| 婷婷深爱五月天| 青青久在线视频免费观看| 热99.com婷婷| 久久九区| AV天堂婷婷五月天| 婷婷月综合| 久久久久久久人妻| 色婷婷色综合久久精品V| 天啪色| 狠狠色综合网| 狠狠干五码| 99精彩视频| 99热在线精品观看| 九月丁香婷婷网| 亚卅毛片| 狠狠干狠狠干狠狠干狠狠干| 91视频综合网| 成人免费120分钟啪啪| 丁香五月ⅤA久久久| 99久久婷婷国产综合| 成人网站免费sxj| 超碰国产在线观看| 中字幕视频在线永久在线观看免费 | 成人草榴视频| 亚洲AV网址| 热99久久这里只有精品| 99热国内精品| 欧美 色婷婷| 色玖玖爱| 婷婷五月丁香伊人| 任你爽视频| 野外99热| 色婷婷色五月色丁香| 日日干日日| 欧类av怡春院| 日韩操人| 色无码| 国产乱人偷精品人妻A片| www狠狠com| 九九热在线视频,| 色色丁香五月天| 大操人妻| 丁香五月天人体| 国产无人区大片| 久久小说网| 99热青青草| 婷婷开心久久| 免费视频WWW在线观看网站| 五月开心久久| 婷婷丁香五月综合激情视频| 99精品免费| www99久久| 精品,99| 久久九九综合| 婷婷伊人网| 99精品综合视频| 日韩AV中文在线观看| 玖玖视频福利| 99精品热视频| 探花搜索结果 - 黄上黄| 少妇人妻凹凸视频| 国产亚洲成AV人片在线观黄桃| www.婷婷亚洲基地| 色婷婷激情| 丁香婷婷五月天成人| 色五月天综合| 色综合色欲综合天天免费| 伊人五月婷婷| 久99久99精品免| 中国激情网| 免费观看全黄做爰的视频| 久久黄A片| 综合另类视频| 丁香久久五月婷综合| 五月天涩涩| 久久这里只有精品视频15| 青草视频在线蜜臀| 超碰v| 这里只有精品视频国产| 色综合久久888| 天天干,天天舔| 久久五月综合| 五月天亚洲图片婷婷| 五月丁香久久综合| 九月激情网| 综合色99| 偷偷狠狠久久婷婷五月天| 国产免费一区二区在线A片视频| 欧美日韩123| www.91在线观看| 人人干女人| 影音先锋偷偷色男人站| 激情图片久久| 亚洲综合色色| 丁香五月天导航| 狠狠干夜夜干| 六月综和久久| 超碰成人公开| 五月花综合视频| 操婷婷基地| 丁香婷婷激情| 97香蕉碰碰人妻国产欧美| 亚洲成人综合在线| 激情久久四色| WWW嗯嗯啊啊啊啊| 美女妹子后射视频网站在线观看| 九九热在线视频观看免费10| 五月丁香自拍| 久久视频66| 无码AV久久久久久久久| 五月丁香在线婷婷美女| 秋霞丝袜啪啪啪| AV在线免费播放| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | 日本三级第一页| 天天精品视频免费观看| 伊人久久大香线蕉av一区| 婷婷五月色播放| 天天成人综合| 亚洲天堂碰碰婷婷| 色婷婷操逼| 人妻系列久久久久久久久久久| 久久艹 五月天| 99这里只有精品|v| 在线婷婷| 久久大国产香蕉| 天天插天天日| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 亚洲人妻av伦理| 五月天色网站| 久久香蕉福利| 免费视频WWW在线观看网站| 五月天色婷婷伊人网| 狠狠干综合网| 国产毛多水多女人A片| 色婷婷激情五月天| 九月婷婷久久| 婷婷五月综合社区在线| 91婷婷色五月| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 伊人影院久久网| 色五月综合激情| 俺也去综合| 五月丁香啪啪综合网| 粉嫩AV久久一区二区三区| 婷婷六月丁| 99亚色色色| 五月色情婷婷| 99精品在线播放| 99精品视频网站| 高清无码.com| av免费在线网站| 丁香六月啪啪| 第四色大香蕉| 婷婷五月天熟妇| 综合99综合久久久久久久| 超碰成人公开| 99免费热视频在线| 亚洲精品婷婷| 涩五月丁香| 成人精品在线| 人人叉久| 色婷婷色综合久久精品V| 人妻中文在线| 免费视频99| 99视频在线观看欧| 操操碰| 色色婷婷婷丁香五月天| 国外亚洲成AV人片在线观看| 超碰人人在线| 久久精品人妻| 玖玖资源站视频| 99热每日| 丁香色五月婷婷91桃色| 丁香六月婷婷综合激情欧美 | 亚洲在线视频321| 国产av一区二区三区| 丁香五月激情啪啪| 五月丁香综合网| 亚洲五月天狠狠| 色八月婷婷| 五月丁香成人| 99色日本| 无码一级片| 欧美久久九九| 大战熟女丰满人妻AV| 五月丁香啪啪综合| 99色中文| 婷婷久久精品| 五月天六月色| 久久婷婷综合五月趴| 99热这里只有精品23| 思恩热国产视频右线观看| aaa久久| 亚洲黄3级片网站欧美| 丁香花综合永久入口| 国产日产亚系列精品版优势| 欧美性爱五月天| 亚洲成人在线播放| 狠狠丁香| 人人爽人人射-美女久久久久久久久久-成人AV| 性热视频99精品| 中文字幕第四色.999| 一区=区操屄高清大全av| 五月婷婷综合在线亚洲视频| 狠狠精品干练久久久无码中文字幕| 天天弄天天操| 99热这里只有精品免费| 五月天六月色| 五月天激情小说网| 色播丁香| 国精产品一区一区三区免费视频| 熟女人妻一区二区三区免费看| 久久久激情| 97操操| 久热免费视频| 青青草国产亚洲精品久久| 日日夜夜干| 欧洲色区| 亚洲乱码日产精品BD| 国产黄大片在线观看画质优化| 777精品久无码人妻蜜桃| 怡红院AV亚洲一区二区三区H| 夜夜爽77777妓女免费下载| 国产欧美日韩综合精品一区二区| 色婷婷成人做爰A片免费看网站| 欧美顶级少妇做爰HD| 成人无码髙潮喷水A片| 国产黄色在线观看| 91九色超碰| 婷婷激情综合色五月久久91| 色色色天堂网| 五月丁香啪啪综合| 色墦五月丁香| 国产精品久久在线观看技巧| 激情五月亚洲综合网| 国产精品蜜臀99| 久色欧美| 综合性爱网| 综合网天天| 国外亚洲成AV人片在线观看| 久久涩视频| 成年视频免费观看| 91久久久久久久久久久| 亚洲性爱干干| 99色 色| 色五月婷婷老师| 91狠狠综合久久久| 99国产精品久久久久久久久久久| 99热10在线高清播放| 日hao1区| 激情深爱五月婷婷| 亚洲九九在线| 五月婷婷综合网| 99热亚洲精品| 色综合77777| 久久色9| 精品婷婷五| 九九九九中文字幕| 丁香婷婷性爱| 5月丁香六月情| 久热免费| 欧美精品99久久久| 久久蜜臀婷婷| 五月婷婷综合激情| 亚洲综合色五月| www.色色五月天.com| 五月天色综合| 9 9热这里有精品| 色播五月丁香| 五月播播| 99色在线| 亚洲av午夜精品一区二区| 色愛综合网| 丁香五月婷婷激情中文| 久热9| 亚洲AV无码成人电影| 丁香五月综合婷婷| 色综合综合网| 五月婷婷啪啪| se色综合网| 亚洲视频色色| 久久人人九| 伊人丁香五月天丁香在线婷| 精典久久| 婷婷色欧美激情| 九热视频| 丁香六月婷婷色XXXXX| 日本激情ⅩXX免费视频| 五月天激情久久| 2018国产大陆天天弄| 天天操天天曰天天射| 南京搡BBBB搡BBBB| 日韩成人av在线| 97色碰碰公开视频| 26uuu淫色| 在线观看av网站| 色婷婷激情Av久久久| 一级片sese片.COM| 99激情视频| 激情五月丁香五月色| 激情综合五月| 婷婷六月色开 | aaaaa黄色| 婷婷中文字幕| 一区二区无码视频| 蜘蛛女免费观看完整版高清电影| 中文字幕av在线播放| 婷婷情色五月| 天天干,噜噜色,狠狠色| 日韩操人| 99热丁香五月| 99热这里只有精品2| 麻豆WWWCOM内射软件| 91久久久久久| 超碰色综合| 婷婷色六月| 天天日天天日天天搞| 五月综合久久| 九九熱最新視頻| 色哟哟精品| 丁香久久久| 色色COm| a性生活久久无| 五月天天天开心激情网| 精品乱码久久久久| 性欧美日本| 美欧成人视频| 91天堂网综合| 婷婷天天日婷婷| 99爱在线| 婷婷丁香激情五月天色色| 亚洲欧洲中文日韩久久AV乱码| 亚洲一个色| 色五月丁香网| 日本99久久| 久婷婷婷| 9操在线| 超碰超碰在线| 狠狠色狠狠| 男人天堂99| 五月停停色色丁香| 玖玖在线| 丁香六月啪啪啪| 超碰人人干| 丁香五月婷婷啪啪啪| 五月色色网| 激情综合五| 九九热av| 久久九九综合| 天天操天天干天天日| 97成人丁香婷婷| 26uuu日韩| 色婷婷丁香六月| 久热99| 伊人日日干| 蜜乳av一级av| 日日操天天| 国产中文字幕在线视频免费观看 | 在线超碰免费| 亚洲色情网站| 亚洲自拍天堂| 亚洲愉拍99热成人精品| 亚洲成人在线播放| 丁香五月婷婷基地| 最新亚洲色色网| 四色五月婷婷| 六月丁香五月婷婷| 无码人妻激情| 99视频内射三四| 九九久久五月天综合伊人| a免费在线| 99爱在线视频| 操碰99| 亚洲爆乳无码精品AAA片蜜桃| 五月婷婷中文网| 综合久久五月天| 色婷婷88| www.99视频| 久久AV电影| www.91在线看| www.99视频| 久久有码| 色五月婷婷激情基地| www.丁香五月| 伊人五月久久| 五月天堂六月丁香亚州中文字幕久久| 激情视频综合| 欧美噜噜免费观看| 123日本不卡在线| 99九九在线视频| 五月天天丁香婷婷在线中| 99久久九九视频| 五月婷婷69| 玖玖婷婷五月天| 日产精品一线二线三线芒果| 开心五月网 | av中文在线| 久久久精品色色色| 粉嫩av懂色av蜜臀av熟妇| 激情五月婷婷| 久久激情五月婷婷| www,五月天com| 67194线路二在线观看| 亚洲综合视频网| 日日夜夜青青草| 色综合香蕉| 欧美精品XXXXBBBB| 思思热视频| 凹凸7777操操操| 欧美亚洲成人在线| 欧美人与性动交CCOO| 99热这里只有精品免费| 99丁香五月婷| 久久婷婷激情四射五月天| 色色色综合| 夜夜爱网站| 99热这里只有精品手机在线观看| 亚洲在线成人| 99激情| 五月丁香激| 国产熟女日日骚五月丁香爱| 五月婷婷色综图片| WW婷婷五月天com| 五月天丁香网站| 严洲天天插| 色综合网上班开心婷婷久久| 五月色亭丁香| 大香蕉520| 国产精品视频免费看| 婷婷五月天日日日干干干| 综合久久97| Av在线资源| 大地资源色婷婷视频在线| 熟女网站久久| 五月成人综合| 26uuu色噜噜精品一区| 海外网站专业操老外| 亚洲12p| 色五月六月| 欧美五月婷婷| 第一区久久网站| 99在线观看视频免费| 色蜜婷婷| 91久久久久| 777精品久无码人妻蜜桃| 日韩超碰在线| 六月婷婷综合久久| 九月丁香很很色| 六月婷婷色综合| 日本超碰在线| 国产精品色色| 激情小说婷婷五月| 亚洲久久婷婷丁香五月天| 激情婷婷| 涩综合网| 久久色9| 精品九九婷婷| yw国产AV| 伊人在线视频| 亚洲九区| 中文av网| 久99| AV在线免费网站| 色婷婷六月天| 天天日天天爽夜夜爽| 天天天天天久久久久久| 狠狠狠激情网| 色青青五月| 蜜臀av无码久久久久久久久 | 伊人久久大香网| 六月丁香五月婷婷| 色亭亭五月天丁香综合AV - 百度 - 百度| 五月丁香人人婷婷在线观看| 日本色婷婷五月天成人电影| 五月天另类小说亚洲| 玖玖色综合| 97色婷| 九九黄色网| 九九色人| 99久在线精品99re8| 婷婷五月天六点丁香五月| 免费播放片大片| 超碰不卡在线| 999精品乱码77777| 丁香婷婷色| 五月丁香福利| 欧美日韩99| 综合婷婷| 婷婷五月天激情四射五月天激情| 婷婷激情肏屄网| 深爱婷婷基地| 激情文学天天| 婷婷丁香六月影视| 管管補管管紱| 日韩久久这里只有精品| 亭亭社区五月天| 华人在线免费| 丁香五月天激情免费在线观看AV777| 婷婷色五月丁香六月欧美啪| 亚洲中文乱字字幕在线永久| 亚洲成人av在线播放| 激情综合国产| 99操视频| 夜夜爽天天爽| 99精品国产在热久久| 丰满少妇猛烈A片免费看观看| 亚洲精品第一色色色色色色| 伊人免费视频9| 偷偷操九九| 成人视频在线免费播放| 97资源碰碰| 激情久久四色| 九九热在这里只有精品| 玖玖资源站蜜臀| 婷婷五月天视频| 五月婷婷综合激情网| 天天操综合网| 9精品久久999| 天综合日日夜综合7799| 91AV婷婷| 思思热在线视频观看精品| 五月丁香婷中文| 久久六月综合| 欧美日综合| 中文字幕欧美日韩VA免费视频| 婷婷丁香18| 五月丁香毛片| 、激情六月天| 天天影视色综合网| 亚洲第一综合| 九九在线精点品| 五月J香蕉婷婷| 久久9RE热视频精品98| 色999五月色| 思思99re这里只有| 五月天婷婷丁香导航| 色偷偷五月天| 婷婷丁香无码专区| 婷婷色色丁香五月天| 婷婷在线五月天观看| 99热官网精品在线| 色5月婷婷| 激情操逼婷婷| 成年人夜夜喷水| 伊人干练久| 97干视频在线| 亚洲经典三级| 九九色院| 丁香婷婷五月天色播| 丁香五月成人网| 色色热| Aα在线免费观看| 婷婷第六色| 久久婷婷五月免费视频| 色综合激情| 五月停亭久久电影| 99热这里在线精品| 婷婷五月亚洲一本在线丁香| 六月婷婷五月丁香| 日韩 mm 不卡| 亚洲avjiujiur91| 婷婷丁香五月婷婷| AA片在线观看视频在线播放| 97婷婷狠狠久久综合9色| 欧洲亚洲最新精品| 亚洲婷婷欧美婷婷| 一本道在线电影| 亚洲综合在线播放| 色综合77777| 碰97久久| 99五月香婷婷丁香在线视频| 9久久久久| 俺去也在线视频| 另类激情中文| 久久女人九九| 五月婷婷co.m| 99视频内射三四| 久久九⑨| 九九热这里只有精品9| 五月天啪啪| 婷婷中文字幕在线| 欧美综合在线五月天色婷婷| 超碰成人免费| 久草网大香视频| 五月婷婷在线网站| 九九热精品| 色五月天丁香婷婷| 丁香成人色情五月天| 五月丁香婷婷色| 美女黄频aⅴ视频| 婷婷五月天激情基地| 极品少妇高潮啪啪AV无码| 综合色五月| 俺去也综合| 99国产99| 色播五月天天| 99热这里只有精品中文字幕| 六月婷婷啪啪| 第四色五月天| ZpRSw| 久久五月天黄色五月天色网址| 婷婷伊人中文字幕| h亚洲| AAAA网站| 九九爱精品网站| 密乳视频| 69精品人人人人| 狠狠看狠狠| 丁香五月婷婷六月| www.henhenl| 91久久电影| 丁香五月婷婷亚洲另类| 亚洲A色| 五月天久久小说| 热99这里只有精品视频| 国产精品人成A片一区二区| 99色色爰| 五月丁香六月在线| 丁香五月自拍| 亚洲精品成人| 99在线69| 激情久久综合| 亚洲六月婷婷| 人妻人人操| 九九激情综合| 婷婷色在线| 六月丁香婷| 五月丁香香蕉| 狠狠色丁香综合| 激情综合久久| 99在线观看这里都是精品| 99热99在线| 伊人青草成人| 精品夜夜澡人妻无码AV| 激情婷婷综合| 亚洲国产精品二二三三区| 综合在线丁香五月| 人人人操 超碰| 激情综合五月色丁香婷婷| 亚洲岛国电影| 六月婷婷在线| 超碰国产AV| 99在线视频播放| 91久操| 激情影院丁香五月| 思思视频这里是精品| 搡BBBB搡BBB搡18| 我要射综合| 99资源人人| 99人妻碰碰碰久久久久视| 1024手机在线观看看片_日韩精品| 九九碰九九爱97超| 久热只有这里有精品| 熟妇无码乱子成人精品| 操操操操操电影网| se婷97| www.91在线观看| 五月色在线| 国产精品激情AV久久久青桔| 丁香丝袜五月| 五月婷免费视频| 色婷视频| 99色看这里只有精品| 九九XX视频| 国内外色色色色色成人视频| 婷婷五月天奸女| 丰满人妻一区二区三区| 操逼福利视频| 五他月天啪啪啪| 九九AV在线| 五月激情另类| 婷婷婷五月香蕉| 九九热中文| 梁铮版《蜘蛛女侠》在线| 五月天丁香婷婷视频网址| 可以看的av| 激情综合网五月在线播放| 乱精品一区字幕二区| 久久婷婷综合五月天| 97色在线视频| 国产做爰视频免费播放| 五月婷婷免费看| 婷婷天堂站| 色情终和网| 婷婷六月色开 | 99热在线播放| 九九这里只有精品在线视频| 97大香蕉五月天| 欧美日韩成人一区二区| 玖玖资源部在线播放| 韩国97天堂| 思思热在线播放| 五月婷婷丁香在线视频| 丁香色综合| 无码少妇高潮喷水A片免费| www.婷婷五月天| 五月丁香成人日| 人人爽欧美婷婷久久久五月丁香 | 看片视频在线免费日产在线看| 狠狠操.com| 99内射视频| 国产乱人偷精品人妻A片|