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

SpringBoot3 構建Spring Authorization Server認證服務!

開發 前端
OAuth 2.0(Open Authorization 2.0)是一種授權框架,允許第三方應用程序訪問用戶在另一個服務提供者上托管的資源,而無需共享用戶的憑據(例如用戶名和密碼)。

在之前的SpringCloud微服務專欄中,我介紹了基于 Spring Security OAuth2 構建的統一認證服務器。隨著技術的不斷發展,Spring Security OAuth2 已于2022年6月5日宣布停止維護。為了應對這一變化,Spring 官方推出了新產品——Spring Authorization Server。該組件實現了 OAuth 2.1協議 和 OpenID Connect 1.0 規范以及其他相關規范的實現,它構建在 Spring Security 之上,為構建 OpenID Connect 1.0 Identity Provider 和 OAuth2 Authorization Server 產品提供安全、輕量級和可定制的基礎。

接下來我將使用 Spring Authorization Server (以下簡稱SAS) 來更新原專欄的認證服務,今天先讓我們來搭建一個簡單的認證服務認識一下Spring Authorization Server。

概念理解

Oauth2.0

OAuth 2.0(Open Authorization 2.0)是一種授權框架,允許第三方應用程序訪問用戶在另一個服務提供者上托管的資源,而無需共享用戶的憑據(例如用戶名和密碼)。

在Oauth2.0中,定義了四種角色:

?資源所有者(Resource Owner),?客戶端(Client),?資源服務器(Resource Server),?授權服務器(Authorization Server)

以及四種授權模式:

?授權碼授權(Authorization Code Grant),?隱式授權(Implicit Grant),?密碼授權(Resource Owner Password Credentials Grant),?客戶端憑證授權(Client Credentials Grant)。

關于Oauth2.0的詳細概念及認證流程網上已經有大量的文章說明,這里不再贅述。

Oauth2.1

OAuth 2.1 在 OAuth 2.0 的基礎上進行了以下改進:

?推薦使用 Authorization Code+PKCE 模式授權

授權碼 (Authorization Code) 模式大家都很熟悉了,也是最安全的授權流程, 那 PKCE 又是什么呢? PKCE 全稱是 Proof Key for Code Exchange, 在 2015 年發布為 RFC 7636, 我們知道, 授權碼模式雖好, 但是它不能給公開的客戶端用, 因為公開的客戶端沒有能力保存好秘鑰(client_secret), 所以在此之前, 對于公開的客戶端, 只能使用隱式模式和密碼模式, PKCE 就是為了解決這個問題而出現的, 另外它也可以防范授權碼攔截攻擊, 實際上它的原理是客戶端提供一個自創建的證明給授權服務器, 授權服務器通過它來驗證客戶端,把訪問令牌(access_token) 頒發給真實的客戶端而不是偽造的,以下是其流程圖

圖片圖片

?移除隱式授權模式

?移除密碼模式

OpenID Connect(OIDC)

OIDC是OpenID Connect的簡稱,OIDC=(Identity, Authentication) + OAuth 2.0,它在原Oauth2.0的基礎上構建了一個身份層,是一個基于OAuth2協議的身份認證標準協議。我們都知道OAuth2是一個授權協議,它無法提供完善的身份認證功能。OIDC使用OAuth2的授權服務器來為第三方客戶端提供用戶的身份認證,并把對應的身份認證信息通過一個叫ID Token 的東西傳遞給客戶端,ID Token使用JWT格式來包裝,使得ID Token可以安全的傳遞給第三方客戶端程序并且容易被驗證。如果ID Token返回的內容不夠,授權服務器還提供一個UserInfo接口,可以獲取用戶更完整的信息。在可以選擇 OIDC 的情況下,應該選擇 OIDC。

如下是一個ID_Token解析后的例子,包含不限于以下幾個字段信息

{
  "sub": "dailymart",                # 用戶ID
  "aud": "oidc-client",                # ID Token的受眾,即Client_ID            
  "auth_time": 1722780563,          # 完成認證的時間
  "iss": "http://127.0.0.1:9090",   # 發行人,即認證服務器
  "exp": 1722782868,                # 到期時間
  "iat": 1722781068,                # 發布時間
    ...
}

SAS上手體驗

SpringBoot集成SAS

1、引入spring-boot-starter-oauth2-authorization-server

在SpringBoot3.1中提供了對SAS的支持,只需要引入依賴即可完成授權服務器的搭建

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
</dependency>

DDD項目當前使用的SpringBoot版本是3.2.7,對應SAS版本為1.2.5。

如果需要嘗試其他版本,也可以手動引入,如:

<groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-authorization-server</artifactId>
    <version>1.3.1</version>
</dependency>

2、認證服務器配置AuthorizationServerConfig

@Slf4j
@Configuration(proxyBeanMethods = false)
public class AuthorizationServerConfig {


    /**
     * Security過濾器鏈,用于協議端點
     */
    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public SecurityFilterChain authorizationServerSecurityFilterChain (HttpSecurity http) throws Exception {
        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity (http);
        // 開啟OIDC
        http.getConfigurer (OAuth2AuthorizationServerConfigurer.class)
                .oidc (Customizer.withDefaults ());


        http
            .exceptionHandling ((exceptions) -> exceptions
                    .defaultAuthenticationEntryPointFor (
                            new LoginUrlAuthenticationEntryPoint ("/login"),
                            new MediaTypeRequestMatcher (MediaType.TEXT_HTML)
                    )
            )
            //接受用戶信息和/或客戶端注冊的訪問令牌
            .oauth2ResourceServer ((resourceServer) -> resourceServer
                    .jwt (Customizer.withDefaults ()));


        return http.build ();
    }


    /**
     * 配置密碼解析器,使用BCrypt的方式對密碼進行加密和驗證
     */
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }






    /**
     * 管理客戶端
     * @param passwordEncoder 密碼管理器
     */
    @Bean
    public RegisteredClientRepository registeredClientRepository(PasswordEncoder passwordEncoder) {
        RegisteredClient oidcClient = RegisteredClient.withId(UUID.randomUUID().toString())
                .clientId("oidc-client")
                .clientSecret(passwordEncoder.encode("123456"))
                //客戶端認證基于請求頭
                .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
                .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN)
                .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                .redirectUri("http://127.0.0.1:8080/login/oauth2/code/oidc-client") // 頁面地址需要跟這個保持一致
                .postLogoutRedirectUri("http://127.0.0.1:8080/")
                .scope(OidcScopes.OPENID)
                .scope(OidcScopes.PROFILE)
                .scope("user.info")
                .scope("all")
                // 客戶端設置,設置用戶需要確認授權,設置false后不需要確認
                .clientSettings(ClientSettings.builder().requireAuthorizationConsent(true).build())
                //設置accessToken有效期
                .tokenSettings(TokenSettings.builder().accessTokenTimeToLive(Duration.ofHours(2)).build())
                .build();


        return new InMemoryRegisteredClientRepository(oidcClient);
    }




    /**
     * 用于簽署訪問令牌
     */
    @Bean
    public JWKSource<SecurityContext> jwkSource() {
        KeyPair keyPair = generateRsaKey();
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
        RSAKey rsaKey = new RSAKey.Builder(publicKey)
                .privateKey(privateKey)
                .keyID(UUID.randomUUID().toString())
                .build();
        JWKSet jwkSet = new JWKSet(rsaKey);
        return new ImmutableJWKSet<>(jwkSet);
    }


    /**
     * 創建RsaKey
     */
    private static KeyPair generateRsaKey() {
        KeyPair keyPair;
        try {
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            keyPairGenerator.initialize(2048);
            keyPair = keyPairGenerator.generateKeyPair();
        }
        catch (Exception ex) {
            log.error ("generateRsaKey Exception", ex);
            throw new IllegalStateException(ex);
        }
        return keyPair;
    }




    /**
     * 解碼簽名訪問令牌
     */
    @Bean
    public JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) {
        return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource);
    }






    @Bean
    public AuthorizationServerSettings authorizationServerSettings() {
        return AuthorizationServerSettings.builder().build();
    }




}

在 這段代碼中我們基于內存模式(InMemory)構建了一個oidc-client客戶端,客戶端通過請求頭的形式進行認證,并支持授權碼、刷新碼、客戶端三種認證方式,通過tokenSettings將access_token的有效期設置成2小時。

3、Spring Security 安全配置

@EnableWebSecurity 
@Configuration(proxyBeanMethods = false) 
public class DefaultSecurityConfig {


    /**
     * 用于認證的Spring Security過濾器鏈。
     */
    @Bean
    public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http)
            throws Exception {
        http
                .authorizeHttpRequests((authorize) ->
                        authorize
                        .requestMatchers("/assets/**","/webjars/**","/actuator/**","/oauth2/**","/login").permitAll()
                        .anyRequest().authenticated()
                )
                .cors(Customizer.withDefaults())
                .csrf(AbstractHttpConfigurer::disable)
                .formLogin(Customizer.withDefaults());


        return http.build();
    }




    /**
     * 配置內存用戶
     * @param passwordEncoder 密碼管理器
     */
    @Bean
    public UserDetailsService users(PasswordEncoder passwordEncoder) {


        UserDetails userDetails = User.withUsername("dailymart")
                .password(passwordEncoder.encode("123456"))
                .roles("USER")
                .build();


        return new InMemoryUserDetailsManager(userDetails);
    }




}

在這里我們構建了一個InMemory的dailymart用戶,這些代碼使用過Spring Security OAuth2的同學來說肯定很熟悉。

通過上面的三步,我們就構建了一個最基礎的認證服務器。

授權碼模式演示

1、啟動認證服務器后(9090)我們訪問如下地址獲取token

http://127.0.0.1:9090/oauth2/authorize?client_id=oidc-client&response_type=code&scope=user.info+openid&redirect_uri=http://127.0.0.1:8080/login/oauth2/code/oidc-client

注意,SAS會校驗redirect_url與客戶端中配置的是否一致,此參數不能亂配置。

2、SpringSecurity檢測到用戶未登錄,跳轉至登錄頁面

圖片圖片

3、登錄以后然后系統會跳轉至確認授權頁面(ClientSettings.builder().requireAuthorizationConsent(true)),確認授權以后再跳轉到redirect_url上,并在參數中返回code

圖片

4、通過postman調用oauth2接口獲取access_token

圖片圖片

在第一步的scope參數中我們申請了openid權限,這個時候SAS會啟用OIDC協議并返回ID_TOKEN,如果未申請openid則是默認的oauth2協議。

圖片圖片

此時我們將id_token解開即可獲得用戶信息。

5、 獲取用戶詳細信息

SAS提供一個userInfo接口用于獲取用戶的詳細信息,通過postman調用并在請求頭中設置上一步拿到的access_token

圖片圖片

6、我們還可以通過瀏覽器訪問http://127.0.0.1:9090/.well-known/openid-configuration以獲取認證服務器的詳細信息

{
    "issuer": "http://127.0.0.1:9090",
    "authorization_endpoint": "http://127.0.0.1:9090/oauth2/authorize",
    "device_authorization_endpoint": "http://127.0.0.1:9090/oauth2/device_authorization",
    "token_endpoint": "http://127.0.0.1:9090/oauth2/token",
    "token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post", "client_secret_jwt", "private_key_jwt"],
    "jwks_uri": "http://127.0.0.1:9090/oauth2/jwks",
    "userinfo_endpoint": "http://127.0.0.1:9090/userinfo",
    "end_session_endpoint": "http://127.0.0.1:9090/connect/logout",
    "response_types_supported": ["code"],
    "grant_types_supported": ["authorization_code", "client_credentials", "refresh_token", "urn:ietf:params:oauth:grant-type:device_code"],
    "revocation_endpoint": "http://127.0.0.1:9090/oauth2/revoke",
    "revocation_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post", "client_secret_jwt", "private_key_jwt"],
    "introspection_endpoint": "http://127.0.0.1:9090/oauth2/introspect",
    "introspection_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post", "client_secret_jwt", "private_key_jwt"],
    "code_challenge_methods_supported": ["S256"],
    "subject_types_supported": ["public"],
    "id_token_signing_alg_values_supported": ["RS256"],
    "scopes_supported": ["openid"]
}

小結

本篇文章我們先熟悉一下如何基于spring-boot-starter-oauth2-authorization-server構建認證服務器,后面幾篇文章我們將對其進行改造讓其符合生產使用。

責任編輯:武曉燕 來源: JAVA日知錄
相關推薦

2023-08-07 14:28:07

SpringBoot工具

2021-11-10 05:00:30

服務器Spring授權

2023-08-09 08:29:51

SpringWeb編程

2021-08-18 10:36:43

Sping社區實驗項目服務器

2024-10-08 08:26:43

2023-08-11 08:59:49

分庫分表數據數據庫

2021-11-11 07:38:15

服務器過濾器框架

2023-08-08 08:23:08

Spring日志?線程池

2023-06-19 08:05:17

RFCwebSpring

2024-07-31 14:03:00

Spring定時任務管理

2024-03-04 08:19:11

SpringURLHeader

2024-05-10 08:10:05

Spring虛擬線程JDK

2025-05-06 03:10:00

KEDASpringRocketMQ

2023-02-01 10:40:01

2017-06-26 09:06:10

Spring Clou微服務架構

2025-03-28 09:33:11

2017-09-04 16:15:44

服務網關架構

2022-10-10 08:00:00

微服務Spring Boo容器

2014-11-18 11:20:51

webserviceCXFSpring

2022-09-22 10:01:47

微服務授權認證
點贊
收藏

51CTO技術棧公眾號

久久这里只有精品18| 国产精品美女主播| 又色又爽又黄18网站| 爱看av在线| 91丨国产丨九色丨pron| 国产97在线|日韩| 日韩激情小视频| 久久夜色电影| 精品视频1区2区3区| 中文字幕精品在线播放| 五月天激情开心网| 青椒成人免费视频| 久久久久久久久久久久av| 亚洲人人夜夜澡人人爽| 亚洲精品一区二区在线播放∴| 亚洲精品国产一区二区精华液 | 国产成人精品亚洲线观看| 欧美丝袜一区二区三区| 宅男在线精品国产免费观看| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 亚洲va综合va国产va中文| 678在线观看视频| 国产精品成人一区二区艾草| 久久99九九| 99精品在线看| 日韩精品视频网| 性色av一区二区咪爱| 顶级黑人搡bbw搡bbbb搡| 午夜小视频在线| www.亚洲色图.com| 成人黄色免费看| 日韩人妻精品中文字幕| 欧美福利专区| 在线视频欧美性高潮| v天堂中文在线| 欧美成年网站| 欧美日韩亚州综合| 国产一区二区视频免费在线观看| 色网在线观看| 亚洲欧洲av在线| 日韩视频在线观看国产| 凸凹人妻人人澡人人添| 国产91在线观看丝袜| 国产欧美一区二区三区视频| 亚洲黄网在线观看| 国产手机视频一区二区| 97热在线精品视频在线观看| 久久久久久久极品内射| 综合天堂av久久久久久久| 色噜噜久久综合伊人一本| 91成年人网站| 蜜桃成人av| 日韩美女av在线| 三级黄色片网站| 久久夜色精品国产噜噜av小说| 欧美一区二区三区啪啪| 日韩av影视大全| 国产一区 二区| 欧美一区二区三区小说| 亚洲妇熟xx妇色黄蜜桃| 成人激情久久| 日韩一区二区三区av| 天美一区二区三区| 国产日本亚洲| 日韩欧美亚洲一区二区| 肉丝美足丝袜一区二区三区四| 精品一区视频| 欧美大片在线观看一区二区| 欧美在线影院一区二区| av网址在线观看免费| 超级碰碰久久| 色94色欧美sute亚洲线路一ni| 国产性xxxx18免费观看视频| free欧美| 欧美日韩日日摸| 最新av免费在线观看| 不卡的国产精品| 日韩欧美久久一区| 国产人成视频在线观看| 视频一区中文| 中文字幕久久亚洲| 日本一级二级视频| 亚洲理伦在线| 国产精品jizz在线观看麻豆| 亚洲一级av毛片| 国产精品亚洲人在线观看| 国产精品手机视频| 精品久久av| 亚洲欧洲精品一区二区精品久久久 | 国产在线拍揄自揄拍无码| 久久一卡二卡| 在线视频一区二区三| av在线免费看片| 精品在线网站观看| 一区二区三区视频在线| 欧美日韩精品在线观看视频| av成人国产| 国产久一一精品| 99免费在线视频| 久久香蕉国产线看观看99| 一区二区三区四区| h片在线观看下载| 欧美体内she精视频| 韩国一区二区三区四区| 亚洲资源网站| 欧美美最猛性xxxxxx| 日韩熟女一区二区| 国产乱人伦偷精品视频不卡| 欧美日韩国产三区| 婷婷av在线| 欧美丝袜自拍制服另类| 国产伦精品一区二区三区88av| 精品久久久亚洲| 欧美国产视频一区二区| 中文字幕永久免费视频| 成人性视频免费网站| 亚洲春色在线| 少妇在线看www| 欧美大片一区二区| 日本激情视频一区二区三区| 久久99伊人| 高清国语自产拍免费一区二区三区| 国产小视频在线播放| 亚洲午夜国产一区99re久久| 欧美日韩一区二区三区69堂| 性欧美xxxx免费岛国不卡电影| 另类专区欧美制服同性| 五月激情丁香网| 99久久婷婷国产综合精品电影| av电影一区二区三区| 天堂久久午夜av| 亚洲欧洲午夜一线一品| 日韩精品视频免费看| 国产传媒欧美日韩成人| 一区二区三区四区五区视频 | 国产精品www色诱视频| 欧美在线 | 亚洲| 一区二区三区日本| 国产乱叫456| 欧美jizz| 国产精品亚洲美女av网站| 日本aaa在线观看| 精品高清美女精品国产区| 国产av一区二区三区传媒| 91精品久久久久久久久久不卡| 国产精品久久久久久中文字| 免费资源在线观看| 日韩欧美在线视频日韩欧美在线视频| 亚洲黄色小说在线观看| 国产精品www994| 高清不卡一区二区三区| 国产人成网在线播放va免费| 欧美久久一区二区| 美国黄色片视频| 狠狠色丁香九九婷婷综合五月| 亚洲春色在线视频| a屁视频一区二区三区四区| 在线播放亚洲激情| 亚洲天堂男人网| 日韩美女精品在线| 免费观看黄网站| 精品成人国产| 精品一区在线播放| 黑人巨大亚洲一区二区久| 亚洲人午夜色婷婷| 中文无码av一区二区三区| 国产精品视频九色porn| 成人不卡免费视频| 欧美日韩mv| 久久99精品久久久久久久久久| 亚洲女色av| 中文字幕精品在线视频| 国产xxxx在线观看| 性做久久久久久久免费看| 性色av蜜臀av色欲av| 日韩成人免费在线| 一本—道久久a久久精品蜜桃| 国产精久久一区二区| 欧美多人爱爱视频网站| 三级在线观看| 欧美美女一区二区| 亚洲精品77777| 国产丝袜在线精品| 中文字幕在线视频一区二区| 综合天堂av久久久久久久| 精品国产一区二区三区四区精华 | 欧美片第1页综合| 成人在线免费观看一区| 怡红院成人在线| 久久成人免费视频| 色吊丝在线永久观看最新版本| 欧美日韩亚洲综合在线 | 色噜噜在线观看| 老司机精品视频导航| 精品一区二区三区无码视频| 亚洲免费成人av在线| 91网站免费看| 性欧美18~19sex高清播放| 色偷偷av一区二区三区| 色综合免费视频| 欧美日韩国产中文| 青青草成人av| 亚洲男女一区二区三区| 色婷婷在线影院| 高清国产一区二区| 污视频免费在线观看网站| 黄色在线成人| 亚洲在线播放电影| 九九综合九九| 国产成人成网站在线播放青青| 美女网站视频一区| 久久久久久久影院| 免费在线你懂的| 亚洲男人的天堂在线播放| 精品国产av 无码一区二区三区| 色综合久久中文综合久久牛| 麻豆精品一区二区三区视频| 亚洲国产成人午夜在线一区| 香蕉视频污视频| 韩国一区二区在线观看| chinese少妇国语对白| 99精品久久久| 日韩a级黄色片| 国产精品国产一区| 日本不卡一区二区三区视频| 狠狠久久伊人| 91原创国产| 97色婷婷成人综合在线观看| 国产精品444| 竹内纱里奈兽皇系列在线观看| 欧美韩日一区二区| 中中文字幕av在线| 久久久99久久精品女同性| 国产精品秘入口| 亚洲欧美日韩高清| 日韩美女一级视频| 精品偷拍各种wc美女嘘嘘| 人妻精品无码一区二区| 欧美成人性福生活免费看| 99久久精品国产一区色| 欧美精品成人一区二区三区四区| 色老头一区二区| 在线观看日韩电影| 波多野结衣视频观看| 一本大道综合伊人精品热热 | 国产青春久久久国产毛片| 欧美一级大片在线视频| 91在线网站视频| 国产精区一区二区| 91亚洲人电影| 午夜日韩影院| 成人影片在线播放| 成人高潮视频| 韩日午夜在线资源一区二区| 加勒比色老久久爱综合网| 国产视频一区二区不卡| 露出调教综合另类| 欧美激情视频一区二区三区| 国产伦一区二区三区| 欧美一区二区三区四区在线观看地址 | 69久久夜色精品国产69蝌蚪网| 日韩综合在线观看| 欧美性猛交一区二区三区精品| 一区二区视频播放| 日韩视频一区在线观看| 丰满少妇在线观看bd| 亚洲成人精品视频| 欧美孕妇孕交| 中文日韩在线观看| а√天堂8资源在线官网| 欧美激情三级免费| 在线播放高清视频www| 国产福利精品在线| 99er精品视频| 国产美女精品久久久| 夜夜春成人影院| 亚洲国产一区二区精品视频| 欧美~级网站不卡| 久久久久久久久久网| 日韩精品欧美精品| 色偷偷中文字幕| 99精品国产热久久91蜜凸| 国产又黄又粗视频| 亚洲精品免费播放| 天堂中文字幕在线观看| 欧美日韩一区不卡| 噜噜噜久久,亚洲精品国产品| 精品亚洲国产视频| 天堂地址在线www| 欧美美女15p| 日韩精品一区二区三区| 亚洲一区二区三区毛片| 天海翼精品一区二区三区| 一本色道久久综合亚洲精品婷婷 | 日本xxxxxxx免费视频| 国产麻豆视频一区二区| 日韩人妻无码一区二区三区| 成人欧美一区二区三区1314| 国产午夜精品一区二区理论影院 | 中文字幕免费高清在线| 不卡电影一区二区三区| 亚洲天堂av中文字幕| 亚洲福利电影网| 亚洲天堂手机版| 亚洲免费小视频| 天使と恶魔の榨精在线播放| 日韩美女免费线视频| av男人一区| 欧美一级爱爱| 国产又粗又猛视频免费| 日韩一区二区在线观看| 色婷婷一区二区三区在线观看| 国产精品1区2区| av黄色在线免费观看| 亚洲狠狠爱一区二区三区| 中文字幕在线日亚洲9| 日韩福利视频在线观看| 污影院在线观看| 国产女人精品视频| 国产精品一区2区3区| 国产综合中文字幕| 国产麻豆精品视频| 正在播放国产对白害羞| 色菇凉天天综合网| 少妇高潮一区二区三区69| 久久精品一本久久99精品| 日本欧美一区| 免费观看成人高| 亚洲激精日韩激精欧美精品| 国产精品久久久久久9999| 国产精品久久久久久久久搜平片| 日韩在线 中文字幕| 亚洲精品按摩视频| 久久av色综合| 91入口在线观看| 欧美精品麻豆| 黄色三级视频在线播放| 国产精品高清亚洲| 中文字幕日本人妻久久久免费| 亚洲日韩欧美视频| 欧美特大特白屁股xxxx| 蜜桃精品久久久久久久免费影院| 最新国产乱人伦偷精品免费网站| 伊人久久久久久久久| 亚洲色图.com| 国产美女无遮挡永久免费| 日韩亚洲欧美中文在线| 久久人体av| 亚洲砖区区免费| 美日韩一级片在线观看| 少妇视频一区二区| 欧美麻豆精品久久久久久| 91精彩视频在线观看| 国产日韩欧美在线视频观看| 欧美疯狂party性派对| 中文字幕永久有效| 亚洲男人电影天堂| 国产成人精品一区二三区四区五区| 久久精品91久久久久久再现| 国产色99精品9i| 国产九色porny| 99久久久国产精品免费蜜臀| 国语对白永久免费| 夜夜躁日日躁狠狠久久88av | 2020欧美日韩在线视频| 偷窥自拍亚洲色图精选| 国产日韩成人内射视频| 国产精品网站在线| 国产精品无码白浆高潮| 欧美精品videossex性护士| 日韩成人av在线资源| 成年人黄色片视频| 国产精品国产成人国产三级| 精品人妻aV中文字幕乱码色欲| 国内精品伊人久久| 神马影视一区二区| 色网站在线视频| 亚洲成人av一区二区| 国产一级在线| 96pao国产成视频永久免费| 亚洲国产高清一区| av手机在线播放| 日韩一区二区三区免费看| 漫画在线观看av| 亚洲区一区二区三区| 丁香婷婷深情五月亚洲| 国产一区二区视频网站| 欧美成人免费全部观看天天性色| 麻豆一区二区| 在线观看免费不卡av| 亚洲二区在线观看| 波多野结衣在线网站| 国产高清一区视频| 日韩国产欧美在线播放| 免费看一级一片| 亚洲性xxxx| 高潮按摩久久久久久av免费| 在线视频日韩一区 | 一区二区三区| 97国产精东麻豆人妻电影|