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>

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

        共 11648字,需瀏覽 24分鐘

         ·

        2021-06-05 13:40

        關(guān)注我們,設(shè)為星標(biāo),每天7:30不見不散,架構(gòu)路上與您共享 

        回復(fù)"架構(gòu)師"獲取資源

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

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

        一、GitHub 登錄

        1.1 注冊應(yīng)用

        進入 Github 的 Setting 頁面,點擊 Developer settings,如圖所示:

        進入后點擊 New Oauth App,如圖所示:

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

        點擊注冊后,上方會生成 Client IDClient Secret,這兩個后面要用到。

        1.2 HTML 頁面

        頁面十分簡單,只有兩個跳轉(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 登錄方法

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

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

        • state :回調(diào)時會原樣返回

        • redirect_uri : 回調(diào) URL,注冊應(yīng)用時填寫的

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

        關(guān)于如何校驗,我一開始的想法是使用 session 來存儲 state 進行校驗的,但是我發(fā)現(xiàn)使用重定向后 session 不是同一個 session,方案一失敗。
        然后我想通過 ajax 請求,在頁面中使用 window.location.href 方法跳轉(zhuǎn)到認(rèn)證服務(wù)器,使用 session 存儲,但是很不幸這樣也不是同一個 session,方案二失敗。
        最后我的解決辦法是使用 redis 緩存,使用 set 存儲,回調(diào)時判斷是否存在。當(dāng)然你也可以用 HashMap 來存儲,這也是一個解決辦法。
        關(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、請求Github認(rèn)證服務(wù)器
          response.sendRedirect(url + "?" + param);
        }

        1.4 Github 回調(diào)方法

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

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

            // 2、向GitHub認(rèn)證服務(wù)器申請令牌
            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;

            // 申請令牌,注意此處為post請求
            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,表示失敗,錯誤原因存儲在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ù)器請求用戶信息,攜帶access_token和tokenType
            String userUrl = "https://api.github.com/user";
            String userParam = "access_token=" + accessToken + "&token_type=" + tokenType;
            
            // 申請資源
            String userResult = HttpClientUtils.sendGetRequest(userUrl, userParam);

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

        2.1 注冊應(yīng)用

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

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

        官方開發(fā)文檔點擊這里:
        http://wiki.connect.qq.com/%E5%BC%80%E5%8F%91%E6%94%BB%E7%95%A5_server-side
        注意:審核狀態(tài)為審核中和審核失敗也是可以使用的,不用擔(dān)心(只是無法實際上線而已,作為 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、請求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ā)送時一致
         * @author jitwxs
         * @since 2018/5/21 15:24
         */

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

            // 2、向QQ認(rèn)證服務(wù)器申請令牌
            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;

            // 申請令牌,注意此處為post請求
            // QQ獲取到的access token具有3個月有效期,用戶再次登錄時自動刷新。
            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來獲取用戶的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來訪問和修改用戶數(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) {
            // 獲取花括號內(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");
        }

        三、項目源碼

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

        文章來源:https://jitwxs.cn/33ad9e35.html



        到此文章就結(jié)束了。如果今天的文章對你在進階架構(gòu)師的路上有新的啟發(fā)和進步,歡迎轉(zhuǎn)發(fā)給更多人。歡迎加入架構(gòu)師社區(qū)技術(shù)交流群,眾多大咖帶你進階架構(gòu)師,在后臺回復(fù)“加群”即可入群。







        這些年小編給你分享過的干貨

        《第七期打卡送書5本(5月1日-6月1日)

        Kubernetes的前世今生

        你們公司的架構(gòu)師是什么樣的?

        《Docker與CI持續(xù)集成/CD持續(xù)部署》

        《還有40天,Java 11就要橫空出世了》

        《JDK 10 的 109 項新特性》

        《學(xué)習(xí)微服務(wù)的十大理由》

        轉(zhuǎn)發(fā)在看就是最大的支持??

        瀏覽 76
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        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>
            国产黄色视频在线免费看| 国产乱妇乱子伦视频免费观看| 牛牛影视av| 日本无码在线视频| 老女人网站| 97pao| 亚洲青娱乐在线| 国产真人一级a爱做片| 日韩中文字幕无码| 丁香五月在线观看| 久久逼逼| 国产免费麻豆| 久久精品9| 精品国产污污免费网站入口| 免费中文字幕av| 91麻豆精品在线观看| 欧美在线A| 第四色色综合| 国产精品黑人ThePorn| 欧美黄片AAA| 亚洲性爱视屏| 日韩AAA| 欧美一级性爱| 口爆在线观看| 五月天激情影院| 刘玥91精一区二区三区| 婷婷五月天成人电影| 中文字幕第69页| 人人操人人操人人操人人| 三级片网站在线观看| aaa三级片| 欧洲性爱视频在线观看| 天天射天天日天天干| 欧美一区二区精品| 一级a毛片| 激情婷婷色五月| 岛国av无码免费| 国产成人精品a视频| 韩日黄色| 女人A片一级黄色| 丝袜内射| 露脸偷拍AV2025| 国产视频一区二区三区四区| 91干穴穴在线观看| 肏逼网| 人人摸人人爱| 午夜亚洲| 激情一区| 长泽梓黑人初解禁BDD07| 久久草| 丁香花在线小说免费全文| 在线看A片| 天天色综| www.尤物| 亚洲美眉综合网| 伊人久久福利视频| 996热| AⅤ中文字幕在线免费观看| 99视频在线| 日韩福利| 人人妻人人澡人人爽久久con| 亚洲中文在线观看| 国产小视频在线观看| 日本A视频| 欧美AⅤ| 成人一级片| 日韩性爱视频| 洞av| 不卡无码免费| 国际精品久久久| 一级片黄色免费| 婷婷开心色四房播播免费| 国产做受精品网站在线观看| 色福利网| 人人爱人人爽人人操| 人人妻日日摸狠狠躁| 成人毛片在线大全免费| 精品人人人人| 国产伦精品一区二区三区妓女下载 | 嫩BBB槡BBBB槡BBB小号| 午夜AV福利影院| 在线观看AⅤ| 国精产品九九国精产品| 国产极品无码| 人妻无码中文字幕蜜桃| 久久精品视频国产| 操B视频免费看| 久久国产精品免费视频| 欧美激情三区| 欧美精品日韩在线观看| 丁香五月婷婷网| 欧美精品无码| 亚洲大片| 亚洲高清无码视频在线观看| 天天日天天干天天射| 五月天婷婷乱伦| 黃色A片一級二級三級免費久久久| 婷婷综合缴情亚洲另类在线| 成人电影三区| 国产成人精品一区二区三区四区 | 岛国无码AV在线观看| 成年人免费毛片| 91精品婷婷国产综合| 青青草原成人视频| 亚洲中文字幕免费在线观看| 天天撸一撸视频| 国产一卡二卡在线观看| 国产色无码网站www色视频| 日本成人中文字幕| 国产黄色录像| 亚洲AV第一页| www.seses| 一本久道视频一本久道| 国产中文字幕免费| 骚逼综合网| 国产色视频一区二区三区QQ号| 亚洲AV无码一区东京热久久| 特黄aaaaaaaa真人毛片| 国产女18毛片多18精品| 豆花视频在线观看| 4080yy午夜理论片成人| 蜜桃在线一区| 3D动漫操逼视频| 91精品网| 99er在线视频| 一本色道久久综合亚洲精品小说| 免费在线成人网站| 国产精品揄拍一区二区| 成人抽插视频| 先锋影音亚洲无码av| 亚洲中文免费观看| 成人高清无码在线| 精品久久99| 精品视频久久久| 久久视频免费看| jizz国产精品| 黄色A片免费看| 黄色福利在线观看| 大鸡吧在线观看| 久久婷婷六月综合| 日韩免费在线观看视频| 久操精品| 骚妇一区| 国产真人无码| 国內精品久久久久久久| 日本熟妇高潮BBwBBwBBw| 91好爽| 国产乱码一区二区三区的解决方法 | A一级黄片| www.操操网| 熟女人妻一区二区三区| 福利视频导航自拍| 成人视频网站在线观看| 18禁网站禁片免费观看| 日韩精品视频在线免费观看| 欧美黄色影院| 日韩性爱视频| 亚洲人成777| 欧美熟妇擦BBBB擦BBBB| 成人肏逼视频在线| 欧美爱| 中文字幕在线观看视频www| 黄色片在线免费观看| 日产无码久久久久久| 青青超碰| 777777国产7777777| 国产一级婬片A片免费无成人黑豆| 成人免费在线观看| 日批视频网站| 丰满人妻一区二区三区视频在线不卡 | 欧美亚洲成人视频| 西西4444WWW无码精品| 亚洲高清无码一区| 欧美肏屄视频| 日韩精品久| 97天天操| 色福利视频| 91农村站街老熟女露脸| 久久久久综合| 甘肃WBBBB搡wBBBB| 亚洲高清视频一区| 丰满人妻-区二区三区| 无码欧美成人AAAA三区在线| 91超碰在线免费观看| H片在线免费观看| 日韩A级片| 五月激情婷婷基地| 午夜国产在线视频| 色色色热| 二区在线观看| 成人三级在线| 手机AV网站| 久婷婷| 99久re热视频精品98| 另类老太婆性BBWBBw| 国产三级片在线视频| 日韩大香蕉| 超碰二区| 日韩色逼| 中文字幕不卡无码| 动漫3d啪啪成人h动漫| 乱码中文字幕日韩欧美在线| 欧美黄片无码| 黄色操逼大片| AV黄色在线观看| 好叼操| 午夜福利影院在线| 在线观看日韩精品| AV无码免费一区二区三区不卡| 国产乱国产乱300精品| 亚洲一区二区在线| 8050午| 欧美成人无码一区二区三区| 西西4444WWW无码精品| 中文字幕h| AAA三级视频| 亚洲欧美在线视频观看| 成人午夜在线| 久久精品三级片| 最新国产激情视频| 欧美成人A片AAA片在线播放| 女生操逼网站| 日韩人妻无码一区二区| 91操美女视频| 久久电影精品| 亚洲成人一级片| 99在线视频免费观看| 日本一区二区三区免费看| 亚洲一二三四区| 日日操夜夜爽| 久久国内视频| 青娱乐亚洲精品视频| 奥门黄片| 成人看片黄a免费看视频| 免费播放片色情A片| 国产AVwww| 色色综合视频| 人人妻人人澡人人爽人人DVD | 欧美一卡二卡| 妹子色综合| 亚洲草逼| 免费看黃色AAAAAA片| 三级电影久久麻豆| 午夜福利区| 国产一级女婬乱免费看| 无码激情视频| 日韩午夜无码| 开心五月激情婷婷| 伊人大香蕉在线观看| 五月婷婷性爱| 伊人99re| 亚洲一级在线观看| 亚洲伊人在线| 韩国一区二区三区| 中国操逼视频| 日韩一a| 色黄网站在线观看| 一本一道无码| 菊花插综合网| 国产AV18岁| 日本一区二区三区视频在线观看| 九九自拍视频| av先锋资源| 另类毛片| 影音先锋资源| 亚洲色图欧美| 乱伦内射| 伊人五月在线| 欧美人成人无码| 99热香蕉| 日韩欧美日本| 欧美伊人久久| 高清无码免费在线| 欧美日韩岛国| 可以免费观看的av| 91视频在线观看免费| 国产精品高清网站| 91精品丝袜久久久久久久久粉嫩| 三级A片| 97人妻人人| 伊人影院在线视频| 欧美成人视频大全| 国产91白丝在线播放| 超碰少妇| 国产精品毛片一区视频播| 久操av在线| 91精品国产欧美一区二区成人| www.黄色在线| 亚洲成人无码在线播放| 大香蕉啪啪| 福利在线看| 最近中文字幕| 日韩一级电影在线| 欧美久久久久久| 成人免费无遮挡无码黄漫视频| 日韩wuma| 国产人人色| 中文字幕免费视频在线播放| 亚洲天堂国产| 熟女人妻人妻の视频| 超碰997| 亚洲区成人777777精品| 俺去也| 99精品视频网站| 国产精品成人午夜福利| 中文字幕免费中文| 玖玖99视频| 久久性爱视频| 特色毛片| 91成人亚洲| 中文字幕在线视频日本| 无码四区| 特级特黄A级高潮播放| 婷婷精品在线视频| 亚洲色婷婷| 日韩中文AV| 亚洲日韩中文字幕在线| 国产波霸爆乳一区二区| 大香蕉网伊| 国产成人精品视频免费看| 成人午夜在线视频| 黄色视频网站在线观看| 影音先锋无码专区| 东北嫖老熟女一区二区视频网站 | 这里只有精品91| 欧美精品亚洲| 亚洲无码成人电影| 精品视频网站| 日本女人操逼视频| 欧美一级A片在免费看| 久久国产成人| 人人草在线| AV网站免费看| 无码xx| 成人av中文字幕| 亚洲丁香五月激情| 香蕉国产2023| 操你啦无码日韩| 草在线| 特级西西444www高清视频| 中文在线A∨在线| 男人天堂网在线| 肏屄在线观看| 婷婷五月av| 无码色网| 欧美国产日韩在线| 2021国产精品视频| 操逼视频在线播放| 99久久人妻无码中文字幕系列 | 91综合久久| 婷婷激情综合| 俺来俺也去www色在线观看| 韩国久久| 久久私拍| 91在线无码精品国产三年| 国产精品美女视频| 精品国产乱子伦一区二区三区,小小扐 | 好逼天天有| 91在线资源| 性欧美欧美巨大69| 国产成人无码A片V99| 国产不卡一| 欧美精品在线观看| 99久久久精品| 国产三级性爱| 91啦丨露脸丨熟女色啦| 91白丝在线观看| 国产无码在线看| 青青草视频免费在线观看| 欧一美一婬一伦一区二区三区黑人| 国产成人久久精品麻豆二区| 怡春院成人| 日韩无码视频一区二区| 欧美激情五月| 三级网址在线| 漂亮人妻吃鸡啪啪哥哥真的好| 操屄视频网站| 亚洲国产精品成人网站| 大荫蒂hd大荫蒂视频| 成人免费一级视频| 91爱爱视频| 国产69精品久久| 黄色网页在线观看| 迷情校园综合| 国产精品国内自产拍| 国精产品久拍自产在线网站| 在线91网站| 国产一级a爱做片免费☆观看| 中文字幕精品一级A片| 五月天婷婷丁香| 在线观看视频无码| 最美孕交vivoestv另类| 日韩精品久久久久久久酒店| 婷婷五月天成人社区| 国产又粗又长的视频| 另类老妇极品BBWBBw| 五月天黄色电影| 国内久久婷婷| 99热中文字幕在线观看| 九色PORNY国产成人| 欧美日韩高清丝袜| 影音先锋一区二区| 日韩精品在线免费| 这里视频很精彩免费观看电视剧最新 | 俺去听听婷婷| 色色免费| 色网在线观看| 亚洲日韩欧美一区二区天天天| 99成人电影| 国产ww| 国产免费久久久| 91大香蕉| 四虎成人精品无码永久在线的客服| 亚洲欧美久久久久久久久久久久| 亚洲热在线观看| 国语操逼| 成人免费毛片视频| 国产又爽又黄免费网站在线看| 狠狠色狠狠撸| 久久三级电影| 欧美级毛片一进一出夜本色| 久久久精品少妇| 香蕉视频色| 免费网站观看www在线观| 午夜久操| 狠狠视频| 免费一级AAAAA片在线播放| 无码免费视频| 国产精品无码天天爽视频| 天天干,天天日| 樱桃av| 60分钟上大床又黄又爽| 天天日天天干天天爽| 91中文字幕在线| 欧美日屄视频| 蜜挑视频一区二区三区| AV一区二区三区四区| 免费在线观看内射| 一本道无码在线| 亚洲日韩欧美一区二区| 色婷婷7777| 91亚洲国产| 大香蕉国产精品视频| 国产精品7777| 黄色日本视频| 先锋影音资源网站| 色欲AV秘无码一区二区三区| 亚洲欧美色图| 精品免费国产一区二区三区四区 | AV小说在线观看| 91视频美女| 三级片大香蕉| 亚欧成人网站| 51福利导航| 天天天天干| 日韩黄色在线| 男人手机天堂| 欧美在线观看一区| 欧美老熟妇乱大交XXXXX| 大蕉网| 欧美久久一区二区三区四区视频 | 乱子伦国产精品视频一级毛| 猫咪亚洲AV成人无码电影| 婷婷精品| 九九色网| 国产婬片lA片www777| 伊人黄片| 欧美日本国产| 丰满人妻一区二区三区四区53 | 成人免费在线网站| 欧美黄色a片| 丁香色婷婷| 色婷婷一区二区三区久久| 亚洲日韩精品成人无码专区AV| 久久久三级片| 日韩精品视频一区二区| 欧美特黄一级视频| 很色很黄的A片一| 亚洲成人A片| 九九在线观看视频| 久久另类TS人妖一区二区免费| 午夜福利干B在线免费小视频| 超碰在线看| 人妻天天爽夜夜爽| 人人艹人人艹| 日韩三级电影| 久操视频在线免费观看| 大学生一级特黄大片| 国产精品无码乱伦| 日韩欧美一级片| 91精品大屁股白浆自慰久久久| 国产c区| 91久久精品国产91久久公交车| 国产高清在线观看| 久久精品亚洲无码| 国产乱论视频| 欧美色啪| 伊人在线| h网站在线| 成人久久综合| 久久久视频6r| 中文字幕免费在线观看| 婷婷AV在线| 成人午夜在线观看| 91精品国产乱码久久| 老鸭窝av免费入口在线观看| 亚洲精品蜜桃| 国产精品福利小视频| 水蜜桃成人网| 五月丁香在线播放| 国产视频福利| 欧美性猛交XXXX乱大交蜜桃| 成年人黄色视频在线观看| 日韩激情一区二区| 成人手机看片| 免费v片| 男女视频网站| XXXXⅩHD亚洲人HD| 超碰蜜桃| 天天干天天色天天射| 久久久久9999| 国产肏屄视频| 怡红院欧美| 国产成人午夜高潮毛片| 成人免费无码激情AV片| 999reav| 91偷拍网| 国产精品无码天天爽视频| 大香蕉黄色片| 国产91在线拍揄自揄拍无码九色 | 嫩草在线视频| 亚洲区在线| 四房五月婷婷| 精品国产免费无码久久噜噜噜AV | 不卡视频在线观看| 97在线精品| 日本黄色直播| 在线看一区二区三区| 成人国产精品秘在线看| 99在线观看免费视频| 综合一区二区三区| 丰满人妻一区二区三区四区54| 中文字幕在线高清| 中文字幕播放| 91亚洲视频| 黄页网站在线免费观看| 久久AV秘一区二区三区水生| 少妇4p| 成人一级黄色片| 日韩极品视频在线| 欧美日本成人网站入口| 国产精品久久久久永久免费看| 2025天天干| 一级黄色操逼视频| 久久大香蕉网| 啊啊啊在线| 日本免费福利视频| 初学影院WWWBD英语完整版在线观看 | 正在播放ADN156松下纱荣子 | 国产男女AV| 亚洲AV成人无码精品区| 黄色视频网站观看| 久草a视频| 怡春院综合成人社区| 露脸丨91丨九色露脸| 日韩欧美爱爱| 日本高清无码视频| 亚洲一区欧美| 中文字幕牛牛婷婷| 日韩不卡视频在线观看| 免费黄片视频大全| 精品國產一區二區三區久久蜜月| 五月天婷婷影院| 亚洲中文字幕免费观看| 国产剧情在线| 天天综合7799| 无码日韩人妻精品久久蜜桃| 黄色视频日本免费| 大肉大捧一进一出免费阅读| 国产一二三区在线| 青吴乐大香蕉| 无码视频在线观看| 亚洲日韩AV在线| 韩国精品无码一区二区三区18 | 精品视频一区二区三区| 骚逼AV| 亚洲有码在线播放| 天天操夜| 成年人黄色视频在线观看| 男女乱伦视频| 久草com| 中文字幕在线视频日本| 精品国产免费无码久久噜噜噜AV| 无码成人在线观看| 国产麻豆AⅤMDMD0071| 在线观看免费黄色视频| 操中国老女人| 日韩免费A片| 黄色小网站在线观看| 青娱乐国产在线视频| 欧美AA视频| 亚洲精品免费在线观看| 成人一区视频| 俺也去官网| 你懂的在线免费观看| 亚洲一级一级黄色| 99久久综合国产精品二区| 欧美熟女性爱视频| 亚洲中文无码第一页| 亚洲福利| 欧美精品一区二区三区四区| 国产女人在线| 永久免费一区二区三区| 婷婷五月av| 丰满少妇在线观看网站| 亚洲日韩中字| 三级片一区二区| 久久久WWW成人免费精品| 三级片导航| 日本中文视频| 欧洲亚洲在线| 无码人妻在线播放| 国产69久久精品成人看| 欧美69影院| 日韩三级精品| 中文字幕亚洲专区| 日本中文不卡| 久久无码人妻精品一区二区三区| 日韩无码2024| 无码国产精品一区二区性色AV | 一区二区三区电影高清电影免费观看| 亚洲色情在线| 刘玥91精一区二区三区| 亚洲AV成人精品日韩在线播放| 国产足交| 欧美在线视频免费观看| 国产在线观看无码免费视频| 欧美一区二区三区精品| 欧美黄片免费在线观看| 久久AV秘一区二区三区水生| 日逼视频免费| 中文字幕不卡无码| 欧美性爱五月天| 欧美一级特黄A片免费看| 欧美狂操| 国产真实乱婬A片三区高清蜜臀| 婷婷综合五月天| 久久久精品亚洲| 久久精品一区二区三区蜜芽的特点| 亚洲中文字幕网站| 呦小BBBB小小BBBB| 国产又爽又黄免费网站在线看| 黄色视频网站国产| 大香蕉黄色网| 蜜桃视频网站18| 黄色成人网站免费在线观看| 丁香成人五月天| 永久免费视频| 性爱视频免费网站| 日韩欧美性爱| 亚洲天堂在线视频观看| 91无码人妻传媒tv| 日韩无码人妻| 亚洲无码精品视频| 美国一级A片草草视频| 午夜无码鲁丝午夜免费| 久久久久久久毛片| 天天天天天天天天干| 国产精品爽爽久久久| 另类视频区| 亚洲中文字幕免费观看视频| 国产欧美综合在线观看| 国产精品香蕉国产| 91在线一区| 加勒比无码视频| 国产美女精品视频| 人人干天天干| 俺也去大香蕉| 免费看成人A片无码照片88hⅤ| 午夜电影无码| 三级成人无码| 免费黄色一级片| 波多野结衣无码视频在线观看| 国产黄色视频在线| 少妇精品无码一区二区免费视频| 国产成人宗合| 国产香蕉视频免费| 蜜桃视频免费网站| 欧美系列在线| 无码熟妇人妻无码AV在线天堂 | jizz丝袜| 青青草原成人在线视频| 少妇bbb搡bbbb搡bbbb| 午夜福利影视| 日韩久久综合| 亚洲一级在线观看| 足浴小少妇-88AX| 欧美无人区码suv| 国精久久久久| 精品伊人大香蕉| 无码在线视频播放| 天天干天天日天天干天天日| 欧美中文字幕视频| 大香蕉伊人婷婷| www.日韩无码| 久久一二三区| 青青草综合网| 日韩无码精品视频| 麻豆传媒嫂子| 国产精品视频在线看| 伊人久久大香蕉视频| 亚洲一区高清无码| 男女av免费观看| 青青草无码在线| 无码日韩视频| 国产免费一区二区| 精品国产久久久| 国产中文| A片在线免费播放| 久久国产高清视频| 人妻少妇偷人精品久久| 国外成人性视频免费| 国产乱子伦-区二区三区四区| 日韩小视频在线观看| 久久久久网站| 欧美综合网| 精品国产一区二区三区性色AV| 婷色五月| 特黄无码| 日本黄色毛片| 强开小嫩苞一区二区电影| 免费高清无码在线观看| 91操操| 2025av中文字幕| 大香蕉伊人电影| 亚洲国产精品VA在线看黑人| 仓井空一区二区| 欧美性夜黄A片爽爽免费视频| 九九热热| 91视频在线观看免费| 五月丁香六月情| 国产又粗又长又硬又大毛苴茸图片 | 国产亚洲成人综合| 波多野结衣久久中文字幕| 中文字幕AV播放| 亚洲成人AV在线| S28AV| 人人艹人人艹| 人人人人人人操| XXXXⅩHD亚洲人HD| 极品人妻疯狂3p超刺激| 婷婷五月天中文字幕| 99成人乱码一区二区三区在线| 国产1区在线观看| 黄色一级片免费| 香蕉一区二区| 亚洲第一页在线观看| 中文字幕综合网| 麻豆91久久久| 337p粉嫩噜噜噜| 超碰人人操人人摸| 无码a片| 老熟女视频| 日都一级A片| 玖玖国产精品| 成人网站www污污污网站公司| 中文字幕日本在线| 一区二区三区电影高清电影免费观看| 日本东京热视频| 五月丁香在线播放| 国内自拍视频网| AV无码在线免费观看| 免费黄色一级片| 国产96在线亚洲| 国产aaaaaaaaaaaaa| 91人妻人人澡人人爽人人玩| 92久久| 俺来也俺也去| 欧美不卡在线播放| 操逼首页123| 精品无码人妻一区二区媚黑| 久久这里只有精品99| www.俺去也| 欧美aaa| 一区二区三区无码精品| 91在线无码精品秘国产-百度| 五月婷婷中文| 亚洲AVwww| 国产无限资源| 狠狠狠狠狠操| 日韩高清中文字幕| 婷婷五月在线| 特一级黄A片| 婷婷五月天影视| 欧美女人操逼| 黄色福利| 亚洲无码一区二区在线| 特级西西444www无码视频免费看 | 五月婷婷六月香| 38t6电影网logo高清图片| 成人AV电影在线观看| 人妻国产| 国产精品乱子伦一区二区三区视频 | 久久综合伊人| 欧美精产国品一二三区| 亚洲综合伊人无码| 欧美久操| 日韩性爱AV| 日韩三级视频| 五月黄片| www.97色| 国产一区二区三区免费播放| 天堂在线最新资源| 人人色人人黄| 六月婷婷中文字幕| 日本草逼| 国产精品无码永久免费A片| 大香蕉亚洲在线| 最新中文字幕免费MV第一季歌词| 成人AV无码| 日韩免费在线观看| 免费看操逼逼| 不卡免费视频| 女同二人91| 精品一区二区三区四区五区六区七区八区九区 | 成人网站在线免费| 国产精品3| 七十路の高齢熟女千代子下载| 91久久久久久久| 法国《少女日记》电影| 一级一级a免一级a做免费线看内裤 | 色伊人| 亚洲av性爱| 91亚洲国产成人久久精品网站 | 蜜臀av在线| 2022天天干| 男人的天堂社区| 91在线无码| 大地资源第三页在线观看免费播放最新 | 麻豆成人91精品二区三区| 青青草原视频在线免费观看 | 亚日韩在线| 3D动漫精品一区二区在线播放免费 | 婷婷久久网| 四虎精品一区二区三区| 天天爱夜夜爱| 99热这里只有精| 亚洲黄色电影网站| 亚洲人人色| 亚洲无码视频专区| 毛片毛片毛片毛片| 国产精品一级二级三级| 人人澡视频| 91黄色电影| 激情小视频在线| 亚洲欧美日韩另类| 国产女人18毛片水真多18精品| 超碰在线观看2407| 影音先锋男人资源网| www.91麻豆| 久热婷婷| 熟女人妻ThePorn| 黄片免费看| 日本特黄一级片| 成人日皮视频| 免费在线观看A片| 91人妻一区二区三区| 99视频| 黄色片免费在线观看| 91在线无码精品入口电车| 家庭乱伦av| 69av在线| 青娱乐国产av| 黄片在线免费观看视频| 欧美日韩男女淫乱一区二区| 九一国产在线| 成人视频一区二区三区| 很色很黄的A片一| 福利视频一区二区| 特黄网站| 一卡二卡在线视频| 国产操美女| 小日本91在线观看| 91久久婷婷亚洲精品成人| 黄色成人网站免费在线观看| 新超碰在线观看| 成年人免费视频在线观看| 欧美77777| 欧美日韩免费在线视频| 大香蕉中文网| 91精品人妻| 亚洲中文字幕有码| 91亚洲国产成人精品一区| 中文字幕无码毛片| 成人中文字幕在线观看| 17.3c一起起草| 干老女人逼| 大香蕉尹在线| 国产精品视频在线看| 国产黄a|