1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Java快速接入 GitHub、QQ 第三方登錄方式

        共 11726字,需瀏覽 24分鐘

         ·

        2021-08-26 10:19

        點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)


        本文提及第三方登錄涉及到 OAuth2.0,關(guān)于 OAuth2.0 的理論基礎(chǔ)參考阮一峰老師的《理解 OAuth 2.0》,其中關(guān)于授權(quán)碼模式就是本篇文章的重點(diǎn),如想看這篇理論基礎(chǔ)自行百度即可。

        本文著重于代碼,關(guān)于理論不再贅述,關(guān)于不同公司的三方登錄流程,只要遵循 OAuth2.0 規(guī)范,都大同小異。本文介紹 GitHub 和 QQ 兩種,因?yàn)檫@兩種無(wú)需審核,即可食用。歷史也發(fā)布過(guò) Spring Boot 的其他實(shí)戰(zhàn),可以關(guān)注微信公眾號(hào)「Java后端」回復(fù)「666」下載技術(shù)棧手冊(cè)。

        一、GitHub 登錄

        1.1 注冊(cè)應(yīng)用

        進(jìn)入 Github 的 Setting 頁(yè)面,點(diǎn)擊 Developer settings,如圖所示:

        進(jìn)入后點(diǎn)擊 New Oauth App,如圖所示:

        在其中填寫(xiě)主頁(yè) URL回調(diào) URL,回調(diào) URL 尤為重要,如果不太明白可以先和我一致。

        點(diǎn)擊注冊(cè)后,上方會(huì)生成 Client IDClient Secret,這兩個(gè)后面要用到。

        1.2 HTML 頁(yè)面

        頁(yè)面十分簡(jiǎn)單,只有兩個(gè)跳轉(zhuǎn)鏈接:
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>三方登錄</title>
        </head>
        <body>
            <h1>三方登錄Demo</h1>
            <div>
                <a href="/githubLogin">GitHub登錄</a>
                <a href="/qqLogin">QQ登錄</a>
            </div>
        </body>
        </html>

        1.3 Github 登錄方法

        在這個(gè)方法中,我們需要訪問(wèn) GitHub 的認(rèn)證服務(wù)器,使用 Get 請(qǐng)求,這里使用重定向來(lái)實(shí)現(xiàn)。
        遵循 Oauth 2.0 規(guī)范,需要攜帶以下參數(shù):
        • response_type :對(duì)于授權(quán)碼模式,該值固定為 code

        • client_id :注冊(cè)應(yīng)用時(shí)的 Client ID

        • state :回調(diào)時(shí)會(huì)原樣返回

        • redirect_uri : 回調(diào) URL,注冊(cè)應(yīng)用時(shí)填寫(xiě)的

        這里的 state 參數(shù)我要額外說(shuō)明下,因?yàn)樵搮?shù)會(huì)在后面的回調(diào) URL 中被原樣攜帶回來(lái),絕大多數(shù)的開(kāi)發(fā)者會(huì)忽略該字段,阮一峰老師的文章也沒(méi)有著重提及這一點(diǎn)。但是忽略該參數(shù)是會(huì)導(dǎo)致 CSRF攻擊的,在回調(diào)函數(shù)中應(yīng)當(dāng)對(duì)該字段進(jìn)行校驗(yàn)!

        關(guān)于如何校驗(yàn),我一開(kāi)始的想法是使用 session 來(lái)存儲(chǔ) state 進(jìn)行校驗(yàn)的,但是我發(fā)現(xiàn)使用重定向后 session 不是同一個(gè) session,方案一失敗。
        然后我想通過(guò) ajax 請(qǐng)求,在頁(yè)面中使用 window.location.href 方法跳轉(zhuǎn)到認(rèn)證服務(wù)器,使用 session 存儲(chǔ),但是很不幸這樣也不是同一個(gè) session,方案二失敗。
        最后我的解決辦法是使用 redis 緩存,使用 set 存儲(chǔ),回調(diào)時(shí)判斷是否存在。當(dāng)然你也可以用 HashMap 來(lái)存儲(chǔ),這也是一個(gè)解決辦法。
        關(guān)于 Redis,可以參考:https://jitwxs.cn/e331e26a.html
        private static String GITHUB_CLIENT_ID = "0307dc634e4c5523cef2";
        private static String GITHUB_CLIENT_SECRET = "707647176eb3bef1d4c2a50fcabf73e0401cc877";
        private static String GITHUB_REDIRECT_URL = "http://127.0.0.1:8080/githubCallback";

        @RequestMapping("/githubLogin")
        public void githubLogin(HttpServletResponse response) throws Exception {
          // Github認(rèn)證服務(wù)器地址
          String url = "https://github.com/login/oauth/authorize";
          // 生成并保存state,忽略該參數(shù)有可能導(dǎo)致CSRF攻擊
          String state = oauthService.genState();
          // 傳遞參數(shù)response_type、client_id、state、redirect_uri
          String param = "response_type=code&" + "client_id=" + GITHUB_CLIENT_ID + "&state=" + state
                  + "&redirect_uri=" + GITHUB_REDIRECT_URL;
          
          // 1、請(qǐng)求Github認(rèn)證服務(wù)器
          response.sendRedirect(url + "?" + param);
        }

        1.4 Github 回調(diào)方法

        在上一步中,瀏覽器會(huì)被跳轉(zhuǎn)到 Github 的授權(quán)頁(yè),當(dāng)用戶登錄并點(diǎn)擊確認(rèn)后,GitHub認(rèn)證服務(wù)器會(huì)跳轉(zhuǎn)到我們填寫(xiě)的回調(diào)URL中,我們?cè)诔绦蛑刑幚砘卣{(diào)。
        在回調(diào)方法中,步驟如下:
        1. 首先驗(yàn)證 state 與發(fā)送時(shí)是否一致,如果不一致,可能遭遇了 CSRF 攻擊。
        2. 得到 code,向 GitHub 認(rèn)證服務(wù)器申請(qǐng)令牌(token)
          這一步使用模擬的 POST 請(qǐng)求,攜帶參數(shù)包括:
        • grant_type :授權(quán)碼模式固定為 authorization_code
        • code :上一步中得到的 code
        • redirect_uri :回調(diào)URL
        • client_id :注冊(cè)應(yīng)用時(shí)的Client ID
        • client_secret :注冊(cè)應(yīng)用時(shí)的Client Secret
        3. 得到令牌(access_token)和令牌類型(token_type),向GitHub資源服務(wù)器獲取資源(以 user_info 為例)
        這一步使用模擬的 GET 請(qǐng)求,攜帶參數(shù)包括:
        • access_token :令牌
        • token_type :令牌類型
        4. 輸出結(jié)果
        /**
         * GitHub回調(diào)方法
         * @param code 授權(quán)碼
         * @param state 應(yīng)與發(fā)送時(shí)一致
         * @author jitwxs
         * @since 2018/5/21 15:24
         */

        @RequestMapping("/githubCallback")
        public void githubCallback(String code, String state, HttpServletResponse response) throws Exception {
            // 驗(yàn)證state,如果不一致,可能被CSRF攻擊
            if(!oauthService.checkState(state)) {
                throw new Exception("State驗(yàn)證失敗");
            }

            // 2、向GitHub認(rèn)證服務(wù)器申請(qǐng)令牌
            String url = "https://github.com/login/oauth/access_token";
            // 傳遞參數(shù)grant_type、code、redirect_uri、client_id
            String param = "grant_type=authorization_code&code=" + code + "&redirect_uri=" +
                    GITHUB_REDIRECT_URL + "&client_id=" + GITHUB_CLIENT_ID + "&client_secret=" + GITHUB_CLIENT_SECRET;

            // 申請(qǐng)令牌,注意此處為post請(qǐng)求
            String result = HttpClientUtils.sendPostRequest(url, param);

            /*
             * result示例:
             * 失?。篹rror=incorrect_client_credentials&error_description=The+client_id+and%2For+client_secret+passed+are+incorrect.&
             * error_uri=https%3A%2F%2Fdeveloper.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-oauth-app-access-token-request-errors%2F%23incorrect-client-credentials
             * 成功:access_token=7c76186067e20d6309654c2bcc1545e41bac9c61&scope=&token_type=bearer
             */

            Map<String, String> resultMap = HttpClientUtils.params2Map(result);
            // 如果返回的map中包含error,表示失敗,錯(cuò)誤原因存儲(chǔ)在error_description
            if(resultMap.containsKey("error")) {
                throw  new Exception(resultMap.get("error_description"));
            }

            // 如果返回結(jié)果中包含access_token,表示成功
            if(!resultMap.containsKey("access_token")) {
                throw  new Exception("獲取token失敗");
            }

            // 得到token和token_type
            String accessToken = resultMap.get("access_token");
            String tokenType = resultMap.get("token_type");

            // 3、向資源服務(wù)器請(qǐng)求用戶信息,攜帶access_token和tokenType
            String userUrl = "https://api.github.com/user";
            String userParam = "access_token=" + accessToken + "&token_type=" + tokenType;
            
            // 申請(qǐng)資源
            String userResult = HttpClientUtils.sendGetRequest(userUrl, userParam);

            // 4、輸出用戶信息
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write(userResult);
        }
        二、QQ 登錄

        2.1 注冊(cè)應(yīng)用

        進(jìn)入 QQ 互聯(lián)管理中心:https://connect.qq.com/manage.html,創(chuàng)建一個(gè)新應(yīng)用(需要先審核個(gè)人身份):
        然后注冊(cè)應(yīng)用信息,和 GitHub 的步驟大差不差:

        注冊(cè)后,可以看到應(yīng)用的 APP ID、APP Key,以及你被允許的接口,當(dāng)然只有一個(gè)獲取用戶信息。

        關(guān)注公眾號(hào):Java項(xiàng)目精選,后臺(tái)回復(fù):Java 。

        官方開(kāi)發(fā)文檔點(diǎn)擊這里:
        http://wiki.connect.qq.com/%E5%BC%80%E5%8F%91%E6%94%BB%E7%95%A5_server-side
        注意:審核狀態(tài)為審核中和審核失敗也是可以使用的,不用擔(dān)心(只是無(wú)法實(shí)際上線而已,作為 Demo 足夠了)。

        2.2 QQ 登錄方法

        private static String QQ_APP_ID = "101474821";
        private static String QQ_APP_KEY = "00d91cc7f636d71faac8629d559f9fee";
        private static String QQ_REDIRECT_URL = "http://127.0.0.1:8080/qqCallback";

        @RequestMapping("/qqLogin")
        public void qqLogin(HttpServletResponse response) throws Exception {
            // QQ認(rèn)證服務(wù)器地址
            String url = "https://graph.qq.com/oauth2.0/authorize";
            // 生成并保存state,忽略該參數(shù)有可能導(dǎo)致CSRF攻擊
            String state = oauthService.genState();
            // 傳遞參數(shù)response_type、client_id、state、redirect_uri
            String param = "response_type=code&" + "client_id=" + QQ_APP_ID + "&state=" + state
                    + "&redirect_uri=" + QQ_REDIRECT_URL;

            // 1、請(qǐng)求QQ認(rèn)證服務(wù)器
            response.sendRedirect(url + "?" + param);
        }

        2.3 QQ 回調(diào)方法

        /**
         * QQ回調(diào)方法
         * @param code 授權(quán)碼
         * @param state 應(yīng)與發(fā)送時(shí)一致
         * @author jitwxs
         * @since 2018/5/21 15:24
         */

        @RequestMapping("/qqCallback")
        public void qqCallback(String code, String state, HttpServletResponse response) throws Exception {
            // 驗(yàn)證state,如果不一致,可能被CSRF攻擊
            if(!oauthService.checkState(state)) {
                throw new Exception("State驗(yàn)證失敗");
            }

            // 2、向QQ認(rèn)證服務(wù)器申請(qǐng)令牌
            String url = "https://graph.qq.com/oauth2.0/token";
            // 傳遞參數(shù)grant_type、code、redirect_uri、client_id
            String param = "grant_type=authorization_code&code=" + code + "&redirect_uri=" +
                    QQ_REDIRECT_URL + "&client_id=" + QQ_APP_ID + "&client_secret=" + QQ_APP_KEY;

            // 申請(qǐng)令牌,注意此處為post請(qǐng)求
            // QQ獲取到的access token具有3個(gè)月有效期,用戶再次登錄時(shí)自動(dòng)刷新。
            String result = HttpClientUtils.sendPostRequest(url, param);

            /*
             * result示例:
             * 成功:access_token=A24B37194E89A0DDF8DDFA7EF8D3E4F8&expires_in=7776000&refresh_token=BD36DADB0FE7B910B4C8BBE1A41F6783
             */

            Map<String, String> resultMap = HttpClientUtils.params2Map(result);
            // 如果返回結(jié)果中包含access_token,表示成功
            if(!resultMap.containsKey("access_token")) {
                throw  new Exception("獲取token失敗");
            }
            // 得到token
            String accessToken = resultMap.get("access_token");

            // 3、使用Access Token來(lái)獲取用戶的OpenID
            String meUrl = "https://graph.qq.com/oauth2.0/me";
            String meParams = "access_token=" + accessToken;
            String meResult = HttpClientUtils.sendGetRequest(meUrl, meParams);
            // 成功返回如下:callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
            // 取出openid
            String openid = getQQOpenid(meResult);

            // 4、使用Access Token以及OpenID來(lái)訪問(wèn)和修改用戶數(shù)據(jù)
            String userInfoUrl = "https://graph.qq.com/user/get_user_info";
            String userInfoParam = "access_token=" + accessToken + "&oauth_consumer_key=" + QQ_APP_ID + "&openid=" + openid;
            String userInfo = HttpClientUtils.sendGetRequest(userInfoUrl, userInfoParam);

            // 5、輸出用戶信息
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().write(userInfo);
        }

        /**
         * 提取Openid
         * @param str 形如:callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
         * @author jitwxs
         * @since 2018/5/22 21:37
         */

        private String getQQOpenid(String str) {
            // 獲取花括號(hào)內(nèi)串
            String json = str.substring(str.indexOf("{"), str.indexOf("}") + 1);
            // 轉(zhuǎn)為Map
            Map<String, String> map = JsonUtils.jsonToPojo(json, Map.class);
            return map.get("openid");
        }

        三、項(xiàng)目源碼

        QQ 登錄的具體流程我就不啰嗦了,都差不多。代碼只列出了關(guān)鍵方法,具體程序還包含工具類和 redis 的配置。具體請(qǐng)參考文章開(kāi)頭源碼,該項(xiàng)目采用 SpringBoot 搭建,需要 Redis 支持。

        文章來(lái)源:https://jitwxs.cn/33ad9e35.html


        (完)




        加我"微信獲取一份 最新Java面試題資料

        請(qǐng)備注:666,不然不通過(guò)~


        最近好文


        1、Spring Boot 實(shí)現(xiàn)掃碼登錄,這種方式太香了?。?/a>

        2、SpringSecurity + JWT 實(shí)現(xiàn)單點(diǎn)登錄

        3、基于 Vue+Spring 前后端分離管理系統(tǒng)ELAdmin

        4、Spring Boot 接入支付寶完整流程實(shí)戰(zhàn)

        5、Spring Boot 實(shí)現(xiàn)多圖片上傳并回顯,漲姿勢(shì)了~



        最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
        獲取方式:關(guān)注公眾號(hào)并回復(fù) java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
        明天見(jiàn)(??ω??)??
        瀏覽 67
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            人人爱人人看| 精品一区二区三区四区五区| 伊人天天色| 国产高清精品软件丝瓜软件| 淫色淫香综合网| 黄色日逼网站| 欧美特黄AAAAAA| 蜜臀AⅤ在线| 特级西西人体WWWww| 欧美在线成人视频| 精品国内自产拍在线观看视频| 亚洲日韩AV电影| 偷偷撸在线| 国产成人一区二区三区| 欧美成人午夜视频| 日韩不卡在线观看| 日本A片免费| 欧美成人午夜影院| 韩日黄色| 欧美一级片在线观看| 久久99精品久久久水蜜桃| www.豆花视频成人版| 年轻女教师高潮2| 校园春色成人| 久久久一区二区三区四曲免费听| 午夜性视频| 中文字幕+乱码+中文字幕电视剧 | 一起操在线| 青春草在线观看国产| 亚洲91网站| 久草视频2| 特一级黄色电影| 肏逼网| 久热精品视频在线观看| AV中文字幕网| 激情人妻av| 99久久国产精| 国产乱子伦一区二区三| 久艹在线观看视频| 一级黄色视频日逼片| 黄色在线免费看| 人善交精品一区二区三区| 骚虎av| 国产精品一区二区在线观看| 另类TS人妖一区二区三区| 欧美性爱在线网站| 成人免费内射视频| 国产操老女人| 色婷婷久久| 中文字幕乱码人妻二区三区| 九色一区| 婷婷色色网| 国产精品成人免费视频| 青青色综合| 大屌在线| 日韩欧美大香蕉| 人人操人人干人人| 日本成人中文字幕在线观看| 亚洲秘无码一区二区三区胖子| 久久久9999| 欧美性爱一区二区三区| 热久久精品| 无码爱爱| 性生活黄色视频| 狠狠狠狠狠狠狠狠狠| 91久久婷婷亚洲精品成人| 看免费操逼视频| 伊人久久大香线蕉| 亚洲高清无码播放| 成人精东影业JDAV3密友| 毛片网| 激情六月婷婷| 久久水蜜桃| 国产肏逼视频| 一本色道久久综合无码欧美| 人妻丰满熟妇av无码区| 狠狠综合网| 日本国产在线| 高潮流水视频| 91鲁| 国产精彩无码视频| 污网站18禁| www.xxx国产| 清清草在线视频| 国产一级A片免费播放| 中文字幕日韩欧美在线| 麻豆91久久久| 老女人操逼网| 中文字幕免费看高清| 大香蕉av一区二区三区在线观看| 黑人操逼| 少妇做爱视频| 中文字幕无码人妻| 午夜激情在线观看| 国产高清无码在线| 激情一区二区| 中文字幕亚洲有码| 九九热精品在线| 婷婷五月天激情四射| 中国熟妇XXXX18| 国产h在线观看| 亚洲成人av在线观看| 日本精品在线| 午夜无码在线| 超碰手机在线| 97人妻人人澡| 麻豆视频在线观看| 精产国品一区二区区别| 亚洲播播| 国产A√| 国产精品久久久久久久久免费无码| 日本在线免费| 亚洲高清无码免费| 视频一区在线观看| 99电影网手机在线观看| MAD033_后宫秘密陶子.| 肥臀AV在线| 手机看片福利一区二区| 香蕉av在线播放| 午夜探花视频| A片欧美| 天天操夜夜操视频免费高清| 免费看黄色电影| 亚洲香蕉国产| 波多野结衣在线无码视频| 大香蕉久久精品| 91吴梦梦无码一区二区| 日本黄色高清视频| 蜜桃亚洲AV无码一区二区三区| 日本成人电影一区二区三区| 欧美日韩中文字幕在线视频| 日韩精品免费在线观看| 94久久| 午夜天堂精品久久| 91好爽| 亚洲高清av| 在线视频一区二区三区| 江苏妇搡BBBB搡BBB| 国产啊啊啊| 蜜桃传媒一区二区| 一级a片激情啪啪免费观| 欧美性爱永久| 伊人日韩| 三级操逼| 男女黄色免费网站| 精品成人影视| 中国免费XXXX18| 北条麻妃中文字幕在线观看| 大香蕉久久久久| 久草热在线| 黄片免费观看视频| 色综合99| 综合色国产精品欧美在线观看| 丝袜足交视频在线观看| 狼友视频免费| 精品国产精品三级精品AV网址| 国产又粗又大又长| 91色区| 成人电影无码| AV天堂无码| 久久免费视频观看| 在线视频第一页| 大香蕉国产视频| 人人操碰成人网| 亚洲AV色香蕉一区二区三区| 国产一级A片免费播放| 艹逼无码| 艹逼在线观看| A视频免费观看| 五月丁香婷中文| 欧美一级黄色电影| 大香蕉久久久| 国产在线一二三| 日本三级片无码| 国产色拍| 国产老熟女久久久| 中文字幕+乱码+中文字幕在线| A片视频在线观看| 欧美精品一区二区三区成人片在线| 色色免费黄色视频| 中文字幕天天在线| 蜜芽成人精品久久久视频| 亚洲A片一区二区三区电影网 | 久久99精品久久久久久| 91视频在线观看免费| 久久99影院| 国产精品色色色| 夜夜爽7777精品国产三级| 无码无码一区二区三区| 爱逼av| 亚洲AV无码成人精品区国产| 无码天堂| 国产,亚洲91| 深爱激情综合网| 99色99| 亚洲无码人妻| 国产精品无码永久免费不卡| AV一区二区三区| 能看的黄色视频| 亚洲中文无码av| 欧美久久大香蕉| 能看的av网站| 水果派av| 1024黄| 国产成人V在线精品一区| 五月大香蕉| 日本一区二区三区免费观看| 日日碰狠狠| 99视频在线免费观看| 五月亚洲六月婷婷| 欧美二区视频| 国产午夜精品一区二区| 牛牛影视av| 狠狠肏| 北条麻妃一区二区三区在线观看| 一卡二卡在线视频| 无码福利视频| 精品999| 色婷婷综合网| 欧美熟妇性爱视频| 成人影视在线免费观看| 天堂网中文| 亚洲青草| 国产美女精品久久AV爽| 一本色道无码人妻精品| 亚洲国产无码在线观看| 黄网站免费在线观看| 人人色人人| 3D精品啪啪一区二区免费| 四虎影成人精品A片| 日本九九视频| 在线免费看av| 免费AV网站观看| 丁香六月色| 五月丁香婷婷综合网| 无码免费婬AV片在线观看| 麻豆91免费看| 一级内射片在线网站观看| 精品蜜桃秘一区二区三区在线播放| 亚洲网站视频| 91三级片| 影音先锋AV天堂| av在线中文| 亚洲精品在线观看视频| 成人做爱免费网站| 精品人妻一区二区三区蜜桃| 亚洲高清无码视频在线| 色欲99| 欧美性之站| 少妇人妻AV| 激情精品| 无码三级片在线观看| 亚洲小电影在线观看| 成人亚洲av| 亚洲成人网在线观看| 日韩中文字幕在线播放| AV大片免费看| 山西真实国产乱子伦| 人人操人人操人人操| 2012天天夜夜| 91熊猫| 国产一级AV国产免费| 蜜桃91精品秘入口| 国产伦精品一区二区三区妓女下载 | 99精品视频在线| 欧美性爱a视频| 怡春院欧美| 不卡AV在线| 欧美3P视频| 学生妹一级片内射视频| 男男做受A片AAAA| 胖老板办公室沙发无套爆秘书 | 日韩成人中文字幕| 亚洲日日干| 国产精品无码中文在线| 亚洲精品日韩无码| 日韩无码18| 婷婷国产综合| 欧美黑吊大战白妞欧美大片| 亚洲va综合va国产va中文 | 狠狠干综合| 久久久久久久久久久国产精品| 国产精品成人无码专区| 91人妻无码一区二区三区| 91色五月| 欧美自拍视频在线| 中文字幕免费在线| 欧美性受XXXX黑人XYX性爽一| 伊人蕉久| 69无码| 成人欧美一区二区三区在线观看| 色欲一区二区| 青青草无码成人AV片| 免费观看黄片网站| 日本免费在线观看| 亚洲欧洲有码在线| 操逼视频一级| 日韩黄色av| 毛片黄色片| 一级a免一级a做免费线看内裤的注意事项| 翔田千里珍藏版无码| 成人综合激情| 国产精品国三级国产a11| a视频在线观看| 免费无码国产在线| 麻豆二区| 91狠狠爱| 黄色片网站免费观看| 制服丝袜人妻| aV无码av天天aV天天爽第一| 先锋影音资源网站| 白白操白白干| 丁香五月婷婷中文字幕| 一级A片| 中文字幕无吗| 边吃边摸| 99久久免费网| 玖玖激情| 亚洲国产精品视频| 99成人在线视频| 人妻二区| www.色欲av| 三级AV网站| 99热这里只有精品9| 日韩无码一| 伊人88| 丁香五香天堂| 日本中文字幕免费| 国产精品电影大全| 亚洲毛片网站| 免费观看av| 蜜芽成人在线视频| av网站免费观看| 人人看人人搞人人摸| 国产精品高清无码| 国产黄色免费看| 操逼视频在线免费看| 91绿帽人妻-ThePorn| 亚洲性图第一页| 在线黄色AV| 中出欧美亚洲| 91人妻人人澡人人爽精品| 欧美精产国品一二三区| 日韩小视频+国产| 激情性爱五月天| 伊人久久久影视大全| 18av在线观看| 日韩中文字幕无码人妻| 色老板视频在线观看| 东京热久久综合色五月老师| 国产成人自拍视频在线观看| 久草视频免费在线观看| 一区视频免费观看| 人妻人人爱| wwwxx国产| 男人的天堂2019| 欧美在线A片| 北条麻妃无码中文| 婷婷五月免费视频| 黄色视频在线观看国产| 欧美在线观看视频一区| 亚洲区成人777777精品| 中文无码人妻少妇| 欧美A片在线| 嫩草视频在线观看免费网站| 国产一级麻豆| 最新国产激情视频| 老熟女导航| 免费一级片视频| 久久成人三级片| 午夜视频在线| 黄色国产AV| 亚洲中文字幕人妻。| 四虎A片| 骚妇一区| 久久久久无码精品国产91福利 | 国产福利电影在线| 51黄片库| 先锋资源久久| 大香蕉久草| 国产久久久久久久久久| 青青草无码视频| 天天爱av| 操逼视频在线| 五月婷婷网| 黄片免费视频| 亚洲AV无码精品久久一区二区| 久久精品美臀| 粉嫩护士小泬18p| 巨乳无码噜噜噜久久久| 香蕉AV777XXX色综合一区| 亚洲成人69| 国产日韩欧美一区二区| 日韩精品毛片一区二区视频免费 | 你操综合| 麻豆黄网| 在线免费看a| 国产欧美精品一区二区三区| 日逼www| 亚洲一区二区视频在线观看 | 男女av网站| 五月av| 欧一美一婬一伦一区二区三区自慰,| 天堂在线最新资源| 四川少妇BBBB| 成人精品A片免费网站| 国产一级女婬乱免费看| 亚洲一区黄色| 波多野成人无码精品69| 亚洲第一成年人网站| a视频在线| 91西安站街老熟女露脸| 国产成人精品八戒| 粉嫩小泬BBBB免费看-百度| 亚洲天堂在线观看网站| www.男人天堂| av天堂资源| 国产激情视频在线观看| 成人性爱视频在线播放| 伊人成人视频在线观看| 毛片在线观看视频| 污污污污污www在线观看优势 | 无码不卡在线观看| 国产女人18水真多18精品| 人妻无码免费视频| 亚洲A片一区二区三区电影网| 国产欧美综合视频一区二区在线 | 亚洲网站在线播放| 欧美久久一区二区三区四区视频| 熟女18p| 狠狠做深爱婷婷久久综合一区 | 综合色色婷婷| 手机不卡黄色视频在线| A片视频免费观看| 东北女人毛多又黑A片| 中文字幕第83页| 抽插影院| 老司机永久免费91| 超级人人操| 熟女视频网| 欧美日韩A片| 99热精品国产| 国产女人18毛片水真多18| 欧美熟妇精品一级A片视色| 亚洲精品女人| 视频一视频二在线视频| 久久艹国产| 国产对白视频| 波多野结衣一区二区三区| 国产传媒_色哟哟| 亚洲无码一区二区三区蜜桃 | 亚洲成人网站在线观看| 日操夜操| 亚洲综合图色40p| 黄色三级片网站| 国产黄色视频在线免费看| 精品蜜桃秘一区二区三区观看| 久久人爽| 波多野结衣大战黑人| 波多野结衣av在线观看窜天猴 | 欧美成人看片黄a免费看| 欧美大香蕉伊人网| 午夜无码在线| 成人日韩在线| 波多野结衣vs黑人巨大| 亚洲黄色免费在线观看| 天天爆操| 操屄视频播放| 第一福利视频导航| 国产手机拍视频推荐2023| 婷婷五月天激情丁香| 欧日无码| 国产精品V亚洲精品V日韩精品| 五月天色色小说| 超碰精品在线| 蜜臀久久99精品久久久久久婷婷| 日韩黄色免费视频| av久草| 熟妇高潮| 人人人妻人人人操| 亚洲三级片无码| 成人在线免费观看视频| 亚洲制服中文字幕| 国产探花视频在线免费观看| 伊人成人大香蕉| 五月天操逼网站| 中文字幕成人| 欧美熟妇性爱| 黄色电影视频在线| 国产黄色AV片| 狠狠躁日日躁夜夜躁A片无码| 人人妻天天干| 在线观看免费欧美操逼视频| 日本A级视频| 国产精品秘久久久久久一两个一起| 久久久综合网| 无码免费看| 日韩性做爰免费A片AA片| 手机看片欧美+日韩+国产| 伊人黄片| 天天撸天天射| 99热日本| 国产成人精品片| 91女人18毛片水多国产| 日本爱爱免费| 欧洲性爱视频在线观看| 毛片在线看片| 99视频内射三四| 成人精品电影| 久久综合无码内射国产| 骚妇一区| 日韩成人无码视频| 韩国无码观看| 欧美在线视频一区二区| 亚洲精品国产成人无码区在线| 国产激情在线播放| 国产成人免费视频在线| 四虎亚洲无码| 中文人妻av| 国产激情无码视频| 北条麻妃在线视频聊天| 在线观看国产一级片| 黄色电影免费网站| 色综合久久88色综合天天| 国产a级视频| 色老板综合| 国产精品伦理| 一级爱爱免费视频| 91污| 多啪啪免费视频| 大香蕉第一页| 成人aaa| 午夜天堂网| 日本女人高潮视频| 天天干天天操天天| 国产主播在线播放| 蜜臀AV网| 午夜一本道| 一级调教看片| 日韩爱爱视频| 日韩色色网| 丁香婷婷综合网| 综合激情五月婷婷| 国产无码免费视频| 91人人妻人人澡人人爽| 三级片亚洲| 大肉大捧一进一出免费阅读| 秋霞无码一区二区三区| 国产又粗又大| 337p西西人体大胆瓣开下部| 青青草公开视频| 色婷婷在线视频播放| 无码字幕| 日韩成人中文字幕| 国产精品成人99一区无码| 在线观看的AV| 久久久久久久久久久国产精品| 免费看AV大片| 狠狠色婷婷7777| ThePorn日本无码| 久久婷婷六月| 草久在线观看| 日本久久精品| 青青在线视频| 伊人久久网站| 日批免费视频| 九九精品在线视频| 亚洲无色| 伊人网在线免费视频| 亚洲AV动漫| 另类欧美色图| 俄罗斯老熟妇与子伦| 天堂网免费视频| 99热在线播放| www.久久99| 成人在线黄色| 黃色一級片黃色一級片尖叫声-百度-百 | 人人操人| 最近中文字幕| 国产精品成人一区二区| 欧美后门菊门交3p、| 乱伦a片| 全国最大成人网站| 欧美一级婬片AAAA毛片| 97超级碰| 狠狠热视频| 人人色人人黄| 成人无码欧美大片免费看| 国产香蕉视频| 在线视频第一页| 西西西444www无码视| 日韩av中文字幕在线| 一级黄色免费片| 日韩无码视频播放| 色99在线视频| 日本色色网站免费| 乱伦专区| 丰满欧美熟妇免费视频| 大鸡巴操骚逼视频| 日韩中文无| 69成人视频| 国产激情一区二区三区| 操逼视频试看| 五月天无码av| 日本成人中文字幕在线观看| 亚洲综合区| 国产又粗又大| 久久久久久久性爱| 国产精品成人99一区无码| 精品日韩一区二区三区| 在线国产福利| 日韩AV无码一区二区| 亚洲精品美女视频| 欧美日韩一区二区三区四区五区六区| 精品一区二区三区毛片| 免费黄色视频在线观看| 91热视频| 蜜桃传媒一区二区亚洲AV| 国产九色| 亚洲无码在线免费| 国产女人18毛片水18精品| 日韩免费a| 日韩a在线观看| 蜜桃久久久亚洲| 91一级A片在线观看| 国产成人小视频在线观看| 免费做爱视频网站| 影音先锋成人| 99热在线免费观看| 青青久草| 国产TS丝袜人妖系列视频| 欧美日韩网站| 麻豆午夜成人无码电影| 亚洲欧洲综合| 日韩人妻AV| 国产一区二区免费| AV免费网址| 欧洲AV在线| 超碰国产97| 成人无码影院日韩,成人年… | 69成人导航| MAD033_后宫秘密陶子. | 大香蕉在线视频观看| 肏逼在线观看| 亚洲AV无码成人网站国产网站| 亚洲搞清视频日本| 中文视频免费播放| 无码中文字幕| 99性爱视频| 黄色无码视频| 中文字幕一区二区三区四区| 影音先锋aV成人无码电影| 三级片久久久| 中文毛片| 成人福利| 香蕉成人电影| 国产三级自拍视频| 91看片| 欧美日韩国产一区二区| 激情动态视频| 人妻少妇一区二区三区| HEZ-502搭讪绝品人妻系列| 日韩精品91| 69精品无码成人久久久久久| 你懂的在线网站| 在线天堂AV| A片在线观看免费| 北条麻妃99精品| 97精品在线观看| AV无码免费一区二区三区不卡| 中文区中文字幕免费看| 婷婷丁香一区二区三区| 欧美在线日韩| 亚洲中文久久| 日韩免费中文字幕| 国产一级黄| 青青草原网址| 亚洲图片小说区| 苍井空一区二区三区| 久久久久久久久国产精品| 日韩啪| 日日夜夜拍| 你懂的在线网站| 国产精彩视频| 韩国无码一区二区三区| 国产精品精品| 九九九亚洲| 操逼网站免费| 精品成人| 韩国精品久久久| 国产色婷婷一区二区| 国产精品久久久久国产A级| 大香蕉第一页| 亚洲网站在线免费观看| 少妇高潮一区二区三区99| 美女人人操| 欧美成人电影在线观看| 黄片无码视频| 91久久成人| 色综合国产| 欧美在线一级| 一级A片免费视频| 亚洲精品中文字幕无码| 久久精品免费观看| 国产成人视频| 秋霞一区二区三区无码| 婷婷激情五月综合| 青青热久| 国产亚洲精品久久久波多野结衣 | A片在线观看免费| 欧美午夜三级| www.色五月| 免费A片在线观看| 中文字幕日本精品5| 超碰青青青| 噜噜影院| 婷婷丁香五月亚洲| 特级A级毛片| 777免费视频| 操批视频| 超碰9| 最近中文字幕高清2019中文字幕 | 免费69视频| 久久青青| 亚洲AV电影在线| 美女综合网| 五月丁香亚洲综合| 91av在线免费观看| 能看的黄色视频| 国产在线视频一区| 男女怕怕网站| 嫩BBB揍BBB揍BBB| 91毛片观看| 欧美日逼网站| www插插| 一区二区三区精品视频| 做爱视频91| 91网站免费| 日本黄色大全| 中日韩无码| 家庭乱伦影视| 国产一区二区AV| 一级真人毛片| 国产传媒在线观看| 天天操天天日天天射| 日本黄色电影网址| 国产麻豆精品成人免费视频| 欧美亚洲成人精品| 激情视频在线免费观看| 午夜操逼逼| 青娱乐国产| 日韩啊v| 日韩精品一区二区三免费视频| 51精品国产| 无码精品黑人| 日韩一区二区三区四区| 人妻丝袜无码视频专区| 午夜探花视频| 亚洲网站视频| 在线看v片| 中文字幕成人在线| 国产精品91在线| 国产变态另类| 欧美日韩99| 97色色网站| 久久一级片| 国产黄色一级| 久久性爱免费视频| 免费高清无码视频| 国产成人无码Av片在线公司 | 国产尤物在线观看| 亚洲欧洲免费视频| 青草青草视频| 成人手机看片| 天天拍夜夜操| 日韩AV无码专区亚洲AV| 国产成人电影一区二区| 久久免费黄色视频| 风流少妇一区二区三区91| 日韩av无码电影| 中文字幕免费久久| 夜夜嗨AV一区二区三区| 亚洲第一成年人网站| 伊人婷婷色香综合| 国产色情在线观看| 黄片高清无码在线观看| 色婷婷久久久久swag精品| 成人免费黄色| 成人午夜精品无码区| 三级高清无码视频| 亚洲成人三区| 久久77777| 波多野结衣视频无码| 亚洲天堂中文字幕| 欧洲成人在线视频| 午夜丁香婷婷| 少妇被躁到高潮无码| 国产激情片| 99精品视频网站| 国产精品超碰| 中文字幕亚洲在线观看| 国产三级片AV| 亚洲第一a| 男人的天堂在线视频| 丁香五月五月婷婷| 一级片网址| 日韩无码人妻久久一区二区三区 | 天堂在线中文网| 99色播| 国产内射在线观看| 日本黄色录像| 自慰在线观看网站| 91中文字幕| 国产精品午夜成人免费| 国产精彩无码视频| 亚洲无码伊人| 国产无码av| 日韩AV高清| 欧洲a视频| 伊人大香蕉久久| 色婷婷婷| 国产AV黄| 北条麻妃在线播放一区| 日韩AV毛片| 亚洲日本国产| 成人色色| 黄色a片网站| 成人视频在线免费观看| 亚洲三级视频在线观看| 亚洲天堂手机在线| 内射视频网| 在线一级A片| 亚洲在线视频观看| 激情综合五月| 久久九九综合| 久热超碰| 国产一级AV国产免费| 中文字幕无码成人| 久久久久99精品成人片直播| 亚洲婷婷丁香| 欧美精品久久久久久久多人混战| 午夜激情视频网站| 熟女综合网| 91无码人妻精品1国产四虎| 中日韩精品A片中文字幕| 色色网站免费| 亚洲黄色成人网站| 成人视频在线观看免费| 黄色电影视频网站| 嫩BBB槡BBBB槡BBBB百度| 影音先锋91视频| 亚洲青草视频| 婷婷综合网| 特级西西人体大胆无码| 97午夜| 欧美成人毛片一级A片| 亚洲天堂大香蕉| 日本国产黄色| 国产91www| 啪啪网网站| 辽宁模特张雪馨视频最新| 99人妻视频| 四虎成人网站| 青草精品| 九九在线观看视频| 久久精品久久久久久久| 成人777777免费视频色| 337P大胆粉嫩银噜噜噜| 国产午夜精品视频| 国产精品18在线| 黄片视频免费| 77777色| 欧美级毛片一进一出| 成人第一页| 操少妇视频| 欧美成人精品激情在线视频| 乱子伦国产精品www| 免费Av在线| 五月天丁香花| 亚洲AV无码乱码国产精品| 欧美激情一区二区A片成人牛牛| 成人无码日本动漫电影| 成人欧美一区二区三区白人| 91麻豆精品A片国产在线观看| 黄片视频免费| 91老熟女| 国产午夜激情| 欧美成人精品一区二区| 亚洲天堂偷拍| 人人操网| 69成人网| 无码久久| 亚洲天堂在线免费观看| 蝌蚪窝视频在线观看| www.婷婷五月天| 大鸡巴在线观看| 欧美视频在线观看免费| 一级A片免费观看| 亚洲激情五月天| 精品人妻一区二区|