精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

微服務架構下的會話管理:實現跨服務單點登錄與權限校驗

開發 架構
在微服務架構下,會話管理和單點登錄的實現需要綜合考慮無狀態設計、分布式存儲、安全性和性能等多個方面。通過采用JWT、OAuth 2.0/OpenID Connect等標準協議,結合API網關的統一鑒權和服務內的細粒度權限控制,可以構建出安全、高效且可擴展的會話管理系統。

隨著微服務架構的廣泛應用,傳統的單體應用會話管理方式已不再適用。在分布式環境中,用戶請求可能被路由到不同的服務實例,這就要求我們必須重新思考如何管理用戶狀態、實現跨服務認證和權限控制。本文將深入探討微服務架構下的會話管理方案,詳細介紹單點登錄(SSO)的實現原理,并提供實用的技術解決方案。

1. 微服務會話管理的挑戰

在微服務架構中,服務被拆分為多個小型、自治的單元,每個服務可能運行在不同的進程或服務器上。這種分布式特性帶來了以下會話管理挑戰:

  • 狀態管理難題:傳統單體應用中將用戶會話存儲在服務器內存的方式無法在服務間共享
  • 擴展性問題:需要支持水平擴展,會話數據必須能夠跨多個實例訪問
  • 一致性要求:用戶登錄狀態需要在所有服務中保持一致
  • 安全性考慮:會話信息需要在網絡間安全傳輸

2. 會話存儲方案

2.1 無狀態會話設計

在微服務架構中,推薦采用無狀態會話設計,將會話數據存儲在客戶端而不是服務端。JSON Web Token (JWT) 是目前最流行的解決方案。

// JWT 示例結構
header.payload.signature

// Header
{
  "alg": "HS256",
  "typ": "JWT"
}

// Payload
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622,
  "roles": ["USER", "ADMIN"]
}

// Signature
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

2.2 有狀態會話的分布式存儲

如果必須使用有狀態會話,可以采用分布式緩存解決方案:

// Spring Session 配置示例
@Configuration
@EnableRedisHttpSession
public class SessionConfig {
    
    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory();
    }
    
    @Bean
    public HttpSessionIdResolver httpSessionIdResolver() {
        return HeaderHttpSessionIdResolver.xAuthToken(); 
    }
}

3. 單點登錄(SSO)實現方案

3.1 基于OAuth 2.0/OpenID Connect的SSO

OAuth 2.0和OpenID Connect是目前最成熟的SSO解決方案。以下是一個簡化的授權碼流程:

  • 用戶訪問客戶端應用
  • 客戶端將用戶重定向到認證服務器
  • 用戶登錄并授權
  • 認證服務器返回授權碼
  • 客戶端使用授權碼換取訪問令牌和ID令牌
// 客戶端處理OAuth2回調的示例
@RestController
public class OAuth2Controller {
    
    @GetMapping("/login/oauth2/code/{registrationId}")
    public String handleOAuth2Callback(
            @PathVariable String registrationId,
            @RequestParam String code,
            @RequestParam String state,
            HttpSession session) {
        
        // 驗證state參數防止CSRF攻擊
        if (!validateState(state, session)) {
            throw new IllegalStateException("Invalid state parameter");
        }
        
        // 使用授權碼獲取令牌
        OAuth2AccessTokenResponse tokenResponse = exchangeCodeForTokens(code);
        
        // 解析ID令牌獲取用戶信息
        Jwt idToken = parseIdToken(tokenResponse.getIdToken());
        
        // 創建本地會話或直接使用令牌
        createUserSession(idToken.getClaims());
        
        return "redirect:/home";
    }
}

3.2 自研SSO方案

對于特定場景,也可以考慮自研SSO方案:

// 簡化的SSO令牌生成與驗證
public class SsoTokenManager {
    
    private final String secretKey;
    private final long tokenValidity;
    
    public String generateToken(User user) {
        long now = System.currentTimeMillis();
        Date expiryDate = new Date(now + tokenValidity);
        
        Map<String, Object> claims = new HashMap<>();
        claims.put("userId", user.getId());
        claims.put("username", user.getUsername());
        claims.put("roles", user.getRoles());
        
        return Jwts.builder()
                .setClaims(claims)
                .setIssuedAt(new Date(now))
                .setExpiration(expiryDate)
                .signWith(SignatureAlgorithm.HS512, secretKey)
                .compact();
    }
    
    public boolean validateToken(String token) {
        try {
            Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    
    public User extractUser(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(secretKey)
                .parseClaimsJws(token)
                .getBody();
        
        User user = new User();
        user.setId(claims.get("userId", Long.class));
        user.setUsername(claims.get("username", String.class));
        user.setRoles(claims.get("roles", List.class));
        
        return user;
    }
}

4. 跨服務權限校驗

4.1 API網關統一鑒權

API網關可以作為統一的權限校驗入口:

// 網關過濾器示例
@Component
public class AuthenticationFilter implements GlobalFilter {
    
    private final TokenProvider tokenProvider;
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String token = extractToken(exchange.getRequest());
        
        if (token == null) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        
        if (!tokenProvider.validateToken(token)) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        
        // 將用戶信息添加到請求頭中傳遞給下游服務
        User user = tokenProvider.extractUser(token);
        ServerHttpRequest modifiedRequest = exchange.getRequest().mutate()
                .header("X-User-Id", user.getId().toString())
                .header("X-User-Roles", String.join(",", user.getRoles()))
                .build();
        
        return chain.filter(exchange.mutate().request(modifiedRequest).build());
    }
    
    private String extractToken(ServerHttpRequest request) {
        List<String> authHeaders = request.getHeaders().get("Authorization");
        if (authHeaders != null && !authHeaders.isEmpty()) {
            String authHeader = authHeaders.get(0);
            if (authHeader.startsWith("Bearer ")) {
                return authHeader.substring(7);
            }
        }
        return null;
    }
}

4.2 服務內權限校驗

即使網關進行了初步校驗,各服務仍需進行細粒度權限控制:

// 使用Spring Security進行方法級權限控制
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
    
    @Override
    protected MethodSecurityExpressionHandler createExpressionHandler() {
        return new OAuth2MethodSecurityExpressionHandler();
    }
}

// 在服務方法上使用注解進行權限控制
@Service
public class OrderService {
    
    @PreAuthorize("hasRole('USER') and #userId == authentication.principal.id")
    public List<Order> getUserOrders(Long userId) {
        // 業務邏輯
    }
    
    @PreAuthorize("hasRole('ADMIN')")
    public List<Order> getAllOrders() {
        // 業務邏輯
    }
}

4.3 分布式權限服務

對于復雜的權限模型,可以創建獨立的權限服務:

// 權限服務接口
public interface PermissionService {
    
    boolean hasPermission(String userId, String resource, String action);
    
    List<String> getUserPermissions(String userId);
}

// 權限服務實現
@Service
public class PermissionServiceImpl implements PermissionService {
    
    private final PermissionRepository permissionRepository;
    
    @Override
    public boolean hasPermission(String userId, String resource, String action) {
        // 查詢數據庫或緩存中的權限信息
        return permissionRepository.existsByUserIdAndResourceAndAction(
            userId, resource, action);
    }
    
    @Override
    public List<String> getUserPermissions(String userId) {
        return permissionRepository.findByUserId(userId)
                .stream()
                .map(permission -> permission.getResource() + ":" + permission.getAction())
                .collect(Collectors.toList());
    }
}

// 自定義權限校驗注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("@permissionService.hasPermission(authentication.principal.id, #resource, #action)")
public @interface CheckPermission {
    String resource();
    String action();
}

// 使用自定義權限注解
@Service
public class BusinessService {
    
    @CheckPermission(resource = "order", action = "read")
    public Order getOrder(Long orderId) {
        // 業務邏輯
    }
}

5. 實戰案例:電商平臺會話管理設計

假設我們有一個電商平臺,包含用戶服務、商品服務、訂單服務和支付服務。以下是一個完整的設計方案:

5.1 架構設計

用戶請求 → API網關 → [認證過濾器] → [路由到具體服務]

5.2 會話流程

  • 用戶登錄用戶服務,獲取JWT令牌
  • 令牌存儲在客戶端(Cookie或LocalStorage)
  • 后續請求攜帶令牌訪問API網關
  • 網關驗證令牌并提取用戶信息
  • 網關將用戶信息添加到請求頭轉發給下游服務
  • 各服務根據用戶信息進行業務處理和權限校驗

5.3 代碼實現

// 網關認證過濾器增強版
@Component
public class EnhancedAuthFilter implements GlobalFilter {
    
    private final JwtTokenProvider tokenProvider;
    private final PermissionService permissionService;
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String path = exchange.getRequest().getPath().value();
        String method = exchange.getRequest().getMethodValue();
        
        // 跳過登錄和公開端點
        if (isPublicEndpoint(path, method)) {
            return chain.filter(exchange);
        }
        
        // 提取和驗證令牌
        String token = extractToken(exchange.getRequest());
        if (!tokenProvider.validateToken(token)) {
            return unauthorized(exchange.getResponse());
        }
        
        // 提取用戶信息
        User user = tokenProvider.extractUser(token);
        
        // 權限校驗
        if (!hasPermission(user, path, method)) {
            return forbidden(exchange.getResponse());
        }
        
        // 添加用戶信息到請求頭
        ServerHttpRequest modifiedRequest = addUserHeaders(exchange.getRequest(), user);
        
        return chain.filter(exchange.mutate().request(modifiedRequest).build());
    }
    
    private boolean hasPermission(User user, String path, String method) {
        // 將路徑和方法映射為權限資源
        String resource = mapPathToResource(path);
        String action = mapMethodToAction(method);
        
        return permissionService.hasPermission(user.getId(), resource, action);
    }
    
    private ServerHttpRequest addUserHeaders(ServerHttpRequest request, User user) {
        return request.mutate()
                .header("X-User-Id", user.getId().toString())
                .header("X-User-Name", user.getUsername())
                .header("X-User-Roles", String.join(",", user.getRoles()))
                .build();
    }
}

6. 安全考慮與最佳實踐

6.1 安全措施

  • 使用HTTPS:防止令牌被竊取
  • 設置合理的令牌過期時間:減少令牌泄露風險
  • 使用刷新令牌機制:避免用戶頻繁登錄
  • 實施令牌黑名單:用于注銷或撤銷特定令牌
  • 防范CSRF攻擊:使用Anti-CSRF令牌

6.2 性能優化

  • 緩存用戶權限數據:減少數據庫查詢
  • 使用高效的令牌驗證算法:如非對稱加密驗證簽名
  • 實施分布式緩存:存儲會話和權限數據

6.3 監控與日志

  • 記錄認證日志:用于安全審計和故障排查
  • 監控異常登錄行為:及時發現潛在攻擊
  • 實施速率限制:防止暴力破解

結論

在微服務架構下,會話管理和單點登錄的實現需要綜合考慮無狀態設計、分布式存儲、安全性和性能等多個方面。通過采用JWT、OAuth 2.0/OpenID Connect等標準協議,結合API網關的統一鑒權和服務內的細粒度權限控制,可以構建出安全、高效且可擴展的會話管理系統。

實際實施時,需要根據具體業務需求選擇合適的方案,并在安全性和用戶體驗之間找到平衡點。隨著技術的不斷發展,云原生和Service Mesh等新技術也為微服務會話管理帶來了新的解決方案,值得持續關注和學習。

無論選擇哪種方案,都應遵循最小權限原則、縱深防御等安全理念,確保系統的安全性和可靠性。同時,完善的監控和日志記錄也是不可或缺的部分,它們不僅能幫助及時發現和解決問題,還能為系統的持續優化提供數據支持。

責任編輯:武曉燕 來源: 程序員秋天
相關推薦

2022-05-12 07:37:51

單點登錄微服務開源

2023-11-20 15:32:29

2017-09-10 16:21:55

微服務API權限

2023-07-28 09:23:24

微服務架構

2017-03-14 11:52:52

微服務架構數據管理

2024-12-27 10:12:28

2024-04-09 07:27:06

微服務架構YAML

2017-07-17 15:50:17

微服務Docker架構

2021-06-22 18:00:09

微服務架構系統

2020-09-29 07:00:00

微服務API架構

2016-12-26 18:05:00

單點登錄原理簡單實現

2015-05-25 13:44:42

微服務微服務架構Docker

2019-07-12 14:41:31

微服務Kubernetes容器

2019-12-26 15:49:14

微服務架構業務

2023-07-27 14:03:51

微服務

2024-07-02 10:58:53

2022-08-14 07:04:44

微服務架構設計模式

2019-10-16 08:41:46

微服務架構Nginx

2023-08-31 17:13:01

架構軟件開發

2023-08-27 16:13:50

架構微服務器
點贊
收藏

51CTO技術棧公眾號

成人性爱视频在线观看| 午夜精品一区二| aiss精品大尺度系列| 亚洲v精品v日韩v欧美v专区| 久久久99国产精品免费| 国产成人a v| 欧美日韩岛国| 亚洲色图美腿丝袜| 又黄又爽又色的视频| 超碰国产一区| 一个色综合网站| 五月婷婷综合色| 乱精品一区字幕二区| 久久综合影音| 欧美华人在线视频| 国产又粗又猛又爽又黄的视频小说| 国内不卡的一区二区三区中文字幕 | 亚洲都市激情| 制服.丝袜.亚洲.另类.中文| 国产午夜福利视频在线观看| 男人天堂久久久| 91首页免费视频| 99久久伊人精品影院| 少妇无套内谢久久久久| 亚洲国产一区二区精品专区| 色婷婷综合久久久久中文字幕1| 欧美肉大捧一进一出免费视频| 黄色日韩网站| 欧美日韩综合视频网址| 成人在线视频一区二区三区| 91美女视频在线| 26uuu成人网一区二区三区| 91在线观看免费| 中文字幕乱码人妻无码久久 | 欧洲熟妇精品视频| 成人在线黄色电影| 亚洲观看高清完整版在线观看| 一区二区精品视频| 高清国产福利在线观看| 99re这里只有精品6| 成人精品水蜜桃| 国产精品免费无遮挡| 日韩av二区在线播放| 7m第一福利500精品视频| 国产亚洲色婷婷久久99精品| 亚洲大全视频| 久久国产精品网站| 欧美在线视频第一页| 99久久综合| 日韩中文字幕亚洲| 激情高潮到大叫狂喷水| 日韩国产一区二区三区| 在线观看亚洲视频| 无码一区二区三区在线| 国产成人短视频在线观看| 精品视频在线观看日韩| 无遮挡aaaaa大片免费看| 老牛精品亚洲成av人片| 日韩久久免费视频| 亚洲专区区免费| 伊人成综合网伊人222| 亚洲欧美另类在线观看| 欧美 日韩 国产 成人 在线观看 | 日韩欧美一区二区三区四区 | 日韩网站免费观看高清| 91视频免费在观看| 天天精品视频| 欧美富婆性猛交| 日韩三级视频在线播放| 国产精品日韩欧美一区| 国产99久久久欧美黑人| 销魂美女一区二区| 免费久久精品视频| 91在线看网站| 亚洲av毛片成人精品| 国产亚洲欧美在线| 影音先锋男人的网站| 欧美色图天堂| 色综合婷婷久久| 中文字幕av专区| 日韩一级淫片| 亚洲欧洲第一视频| 日韩一卡二卡在线观看| 欧美精品国产| 欧美一区亚洲一区| 亚洲中文字幕在线一区| 懂色av噜噜一区二区三区av| 久久国产精品亚洲va麻豆| 丁香婷婷在线| 一卡二卡三卡日韩欧美| 激情内射人妻1区2区3区| 香蕉久久一区| 亚洲精品在线免费观看视频| 国产精品密蕾丝袜| 一二三区不卡| 日本久久久久久久久久久| 国产又粗又长又黄| 国产成人一级电影| 欧美日韩在线一二三| 超碰个人在线| 一本一本久久a久久精品综合麻豆| 9l视频白拍9色9l视频| 国产厕拍一区| www.久久久久久.com| 日本网站免费观看| 精品一区二区在线看| 久久99欧美| a在线免费观看| 一本一道波多野结衣一区二区| 少妇愉情理伦片bd| 欧美系列电影免费观看| 高清在线视频日韩欧美| 一级黄色片网站| 久久夜色精品一区| bt天堂新版中文在线地址| 国产第一亚洲| 亚洲欧美国产一区二区三区| 男女羞羞免费视频| 麻豆精品一区二区三区| 久久99国产精品| 四季久久免费一区二区三区四区| 欧美色涩在线第一页| 欧美深性狂猛ⅹxxx深喉| 艳女tv在线观看国产一区| 国产精品高清在线观看| 天天操天天操天天干| 亚洲色图视频免费播放| 国产一二三区av| 精品在线观看入口| 国产69久久精品成人| 丰满少妇被猛烈进入| 亚洲欧美激情插| 国产永久免费网站| 精品国产一区探花在线观看 | 久久久久毛片| 国产一区二区三区欧美| 日本在线播放视频| 99综合电影在线视频| 成人网站免费观看入口| 日韩中文一区二区| 欧美精品在线第一页| 91黄色在线视频| 中文字幕一区二区三区精华液| 久久九九国产视频| 国产免费播放一区二区| 国产成人精品a视频一区www| 欧美白人做受xxxx视频| 色婷婷亚洲一区二区三区| 在线观看国产三级| 亚洲欧美卡通另类91av| 久久精品丝袜高跟鞋| 涩涩视频在线播放| 亚洲男人av在线| av图片在线观看| 久久青草国产手机看片福利盒子 | 精品自拍偷拍视频| 国产乱人伦精品一区二区在线观看 | |精品福利一区二区三区| 在线观看av网页| 欧美激情黄色片| 亚洲综合在线做性| 国产精品69xx| 日韩精品中文字| 日韩不卡高清视频| 国产精品久久99| 国产欧美精品一二三| 欧美成人国产| 国产自产精品| 桃子视频成人app| 主播福利视频一区| 亚洲av无码国产精品永久一区 | 亚洲男人天堂网址| 国产精品女上位| 中文字幕第三区| 一区视频在线看| 欧美日本亚洲| 99视频这里有精品| 国内免费久久久久久久久久久| 四虎精品成人免费网站| 欧美三级中文字幕在线观看| 成人在线观看高清| 99在线热播精品免费| 一本色道无码道dvd在线观看| 色综合咪咪久久网| www.成人av.com| 午夜日韩成人影院| 欧美另类在线播放| 欧美精品a∨在线观看不卡| 欧美精品乱码久久久久久按摩| 劲爆欧美第一页| 久久久久国产成人精品亚洲午夜| 国产精品视频黄色| 亚洲网站视频| 日韩欧美一区二区三区四区| 91精品短视频| 国产精品福利在线观看| 日本三级在线观看网站| 亚洲欧洲午夜一线一品| www.超碰在线.com| 欧美在线制服丝袜| 国产精品不卡av| 国产精品福利av| 亚洲第一黄色网址| 国产麻豆午夜三级精品| 成人免费视频久久| 激情综合在线| 在线观看日韩羞羞视频| 亚洲永久精品唐人导航网址| aa日韩免费精品视频一| 欧美韩国日本| 国产精品91久久久| 国产免费拔擦拔擦8x在线播放| 深夜福利一区二区| 毛片网站在线观看| 亚洲精品一区二区三区精华液| 中文字幕在线观看你懂的| 精品久久久免费| 欧美精品入口蜜桃| 亚洲日本护士毛茸茸| 天天干天天操天天拍| 99久久99久久精品国产片果冻| 一级片黄色免费| 麻豆一区二区三区| av在线无限看| 美女精品网站| 欧美国产亚洲一区| 在线成人h网| 亚洲中文字幕无码一区二区三区| 欧美电影免费| 亚洲精品一区二区三区四区五区| 亚洲图区在线| 久久影视中文粉嫩av| 久9re热视频这里只有精品| av在线亚洲男人的天堂| 精品国产一区二区三区2021| 国产日韩欧美视频| 国产成人a视频高清在线观看| 国产91网红主播在线观看| 电影网一区二区| 国产91精品久久久久| 两个人看的在线视频www| 久久免费视频网站| heyzo高清国产精品| 久久久久久久999| 午夜伦理大片视频在线观看| 欧美精品免费在线观看| caoporn97在线视频| 色综合91久久精品中文字幕| 午夜在线激情影院| 欧美激情在线一区| 成人一级福利| 国产成人精品视频在线| 亚洲伦理影院| 国产精品一区二区三区久久久| 电影一区电影二区| 国产精品入口福利| 亚洲二区av| 亚洲资源在线看| 中文字幕日韩在线| 久久99欧美| 精品香蕉视频| 日韩精品一区二区三区电影| 欧美日韩一区二区高清| www..com日韩| 香蕉精品999视频一区二区| 亚洲精品乱码久久久久久自慰| 天堂成人国产精品一区| 五月婷婷六月合| 国产乱对白刺激视频不卡| 无人码人妻一区二区三区免费| 成人sese在线| 中文字幕成人动漫| 中文字幕欧美一| 精品亚洲永久免费| 色婷婷av一区二区三区软件| 一级二级三级视频| 欧美电影免费提供在线观看| 亚洲aⅴ在线观看| 深夜福利国产精品| 变态调教一区二区三区| 欧美专区福利在线| 99精品女人在线观看免费视频| 国产精品sss| 精品一区不卡| 一本大道东京热无码aⅴ| 奶水喷射视频一区| 成人在线短视频| 久久综合狠狠综合| 91香蕉一区二区三区在线观看 | 日韩美一区二区| 欧美一卡2卡三卡4卡5免费| 亚洲 美腿 欧美 偷拍| 色妞一区二区三区| 国产蜜臀一区二区打屁股调教| 国产精品爱啪在线线免费观看| 日本在线视频一区二区三区| 玛丽玛丽电影原版免费观看1977 | 精品国偷自产在线视频| 草美女在线观看| 国产精品国产三级国产aⅴ9色| 精品久久国产一区| 日韩精品不卡| 亚洲国产片色| 午夜影院免费观看视频| 国产亚洲制服色| 国产精品18p| 欧美精品乱人伦久久久久久| 欧美午夜黄色| 欧美国产第二页| 人人精品久久| 欧美一二三区| 亚洲二区精品| 午夜诱惑痒痒网| 久久久精品影视| 日韩精品在线不卡| 日韩限制级电影在线观看| 成人一区二区不卡免费| 2019国产精品自在线拍国产不卡| 91麻豆精品| 亚洲一卡二卡三卡| 久久久久国产精品一区三寸| 国产一卡二卡三卡四卡| 亚洲精品视频免费看| 中文字幕日本人妻久久久免费| 亚洲精品视频在线观看视频| 福利成人导航| 99久久99久久精品国产片| 国产精品不卡| 九色porny自拍| 国产欧美精品日韩区二区麻豆天美| 国产黄色片免费看| 亚洲电影免费观看高清| 视频在线这里都是精品| 亚洲va欧美va国产综合久久| 久久亚洲国产| 视频在线观看免费高清| 欧美国产视频在线| 高潮毛片又色又爽免费| 亚洲美女在线视频| 亚洲美女炮图| 欧美日韩免费高清| 久久久精品日韩| 99久久久无码国产精品衣服| 色综合 综合色| 毛片免费在线| 国产精品国产亚洲伊人久久| 国产欧美亚洲精品a| 久久九九国产视频| 欧美国产一区在线| 亚洲综合精品视频| www.xxxx精品| 亚洲免费一区三区| 男人添女荫道口图片| 成人三级在线视频| 国产在线视频二区| 亚洲国产美女精品久久久久∴| а√天堂中文资源在线bt| 久久国产精品久久精品国产| 久久亚洲色图| 国产在线免费av| 欧美福利视频一区| 欧美寡妇性猛交xxx免费| 粉嫩高清一区二区三区精品视频| 亚洲福利电影| mm131美女视频| 欧美三级视频在线播放| 美女隐私在线观看| 91久久极品少妇xxxxⅹ软件 | 国产精品国产三级国产a| 国产美女三级无套内谢| 欧美激情亚洲自拍| 在线日韩网站| 亚洲欧美日韩三级| 亚洲一二三区不卡| 毛片在线能看| 亚洲综合成人婷婷小说| 亚洲专区一区| 91av手机在线| 精品第一国产综合精品aⅴ| gay欧美网站| 亚洲综合网中心| 成人自拍视频在线观看| 久久精品五月天| 精品自拍视频在线观看| 亚洲香蕉视频| 爱情岛论坛亚洲自拍| 日韩欧美亚洲综合| 成人免费看片| 免费在线观看一区二区| 国内国产精品久久| 日韩免费不卡视频| www.亚洲天堂| 欧美天堂社区| 亚洲妇熟xx妇色黄蜜桃| 懂色av中文一区二区三区天美| 日本三级在线视频| 久久精品午夜一区二区福利| 国产在线一区二区综合免费视频| 欧美a∨亚洲欧美亚洲| 久久精品91久久久久久再现|