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>

        快速實(shí)現(xiàn) GitHub、QQ 第三方登錄方式

        共 11511字,需瀏覽 24分鐘

         ·

        2021-04-23 09:44

        本文提及第三方登錄涉及到 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)檫@兩種無需審核,即可食用。歷史也發(fā)布過 Spring Boot 的其他實(shí)戰(zhàn),可以關(guān)注微信公眾號(hào)「武哥聊編程」回復(fù)「筆記」下載技術(shù)棧手冊。

        一、GitHub 登錄

        1.1 注冊應(yīng)用

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

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

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

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

        1.2 HTML 頁面

        頁面十分簡單,只有兩個(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è)方法中,我們需要訪問 GitHub 的認(rèn)證服務(wù)器,使用 Get 請(qǐng)求,這里使用重定向來實(shí)現(xiàn)。
        遵循 Oauth 2.0 規(guī)范,需要攜帶以下參數(shù):
        • response_type :對(duì)于授權(quán)碼模式,該值固定為 code

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

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

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

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

        關(guān)于如何校驗(yàn),我一開始的想法是使用 session 來存儲(chǔ) state 進(jìn)行校驗(yàn)的,但是我發(fā)現(xiàn)使用重定向后 session 不是同一個(gè) session,方案一失敗。
        然后我想通過 ajax 請(qǐng)求,在頁面中使用 window.location.href 方法跳轉(zhuǎn)到認(rèn)證服務(wù)器,使用 session 存儲(chǔ),但是很不幸這樣也不是同一個(gè) session,方案二失敗。
        最后我的解決辦法是使用 redis 緩存,使用 set 存儲(chǔ),回調(diào)時(shí)判斷是否存在。當(dāng)然你也可以用 HashMap 來存儲(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)頁,當(dāng)用戶登錄并點(diǎn)擊確認(rèn)后,GitHub認(rèn)證服務(wù)器會(huì)跳轉(zhuǎn)到我們填寫的回調(diào)URL中,我們在程序中處理回調(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 :注冊應(yīng)用時(shí)的Client ID
        • client_secret :注冊應(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 注冊應(yīng)用

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

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

        官方開發(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)心(只是無法實(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來獲取用戶的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) {
            // 獲取花括號(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)參考文章開頭源碼,該項(xiàng)目采用 SpringBoot 搭建,需要 Redis 支持。

        文章作者: Jitwxs

        文章鏈接: https://jitwxs.cn/33ad9e35.html

        版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 CC BY-NC-SA 4.0 許可協(xié)議。轉(zhuǎn)載請(qǐng)注明來自 Jitwxs!


        我已經(jīng)更新了我的《10萬字Springboot經(jīng)典學(xué)習(xí)筆記》中,點(diǎn)擊下面小卡片,進(jìn)入【Java開發(fā)寶典】,回復(fù):筆記,即可免費(fèi)獲取。

        點(diǎn)贊是最大的支持 

        瀏覽 55
        點(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>
            成人免费黄| 午夜福利视频网站| 密臀91| 欧美在线成人网| 山东熟妇搡BBBB搡BBBB| 日韩一区二区三区在线| 狼友精品| 欧美肉大捧一进一出小说| 在线看亚洲| 久久青娱乐| 成人毛片在线大全免费| 亚洲va综合va国产va中文| 国产三级毛片| www.久久99| 七十路の高齡熟妇无码| 一级片视频在线观看| 日韩无码视频网站| 中文字幕99页| 男人操女人免费网站| 免费看黄色录像| 欧美精品在线免费| 69久久久久久久久久| AV解说| 高清无码人妻| 成人乱无码AV在线观看| 一级片在线视频| 熟妇女人妻丰满少妇中文字幕| 中文字幕AV一区| av亚洲波多野结衣白嫩水多波 | 蜜桃91视频| 免费av在线播放| 久久婷婷网| 国产人妻精品一二三区| 91九色TS另类国产人妖| 国产又爽又黄视频在线看| 色噜噜网站| 人妖黃色一級A片| 中国少妇| 中文字幕乱码视频32| 国产45页| 韩国GOGOGO高清| 亚洲无码偷拍| 超碰AV在线| 欧美日韩91| 最新中文字幕在线视频| 激情国产av| 91视频人人| 成人做爰黄A片免费视频网站野外| AV乱伦网站| av手机在线| 可以看的黄色视频| 狠狠干B| 免费无码国产在线怀| 夜夜骑免费视频| 第四色网站| 亚洲三区视频| 无码精品黄色片| 黄色大片久草| 2015中文字幕黄色视频| 日韩TV| 欧美色综合| 亚洲高清无码免费| 国产黄色免费看| 最新中文字幕777私人在线| 无码免费一区二区| 91无码电影| 国产成人精品三级麻豆| 亚洲夜夜撸| 亚洲香蕉| 国产欧美精品一区二区| 大香蕉性爱| 日韩欧美操逼| 91夫妻视频| 无码人妻一区| 五月婷婷六月激情| 激情网五月天| 国产激情在线播放| 亚洲中文字幕在线免费观看视频| 学生妹一级J人片内射视频| 华女与黑人91A∨| 一道本无吗一区| 色五月婷婷中文字幕| 91蜜桃在线| 欧美草逼视频| 大香蕉中文在线| 日韩黄色电影网站| 亚洲av影院| 成人三级片在线观看| 黄片无码| 欧美日韩视频在线| 精品视频在线观看| 欧美综合亚洲图片综合区| 一区二区在线不卡| 91在线91| 国产一级A片免费看| 一本色道久久综合狠狠躁| 欧美日韩一区二区三区四区五区六区| 超碰观看| 在线免费观看成人网站| 欧美操逼电影| 成人自拍视频在线观看| 国产免费a| 日本免费在线观看| 日本親子亂子倫XXXX50路| 久久99精品久久久久久水蜜桃| 国产三级网址| 色色综合视频| AV在线免费网站| 中文字幕日本人妻| 久久肉| 久久成人18免费网站波多野结衣 | 超级人人操| 精品码一区二在线观看| 嫩BBB搡BBB槡BBB小号| 亚洲第一av| 看毛片的网站| 国产91人妻| 国产高清做爱免费在线视频| 俺来也俺去也www色| 青青草黄色片| 国产夫妻露脸| 男女91视频| 青青草原成人视频| 婷婷综合素质二区| 免费黄片视频在线观看| 内射极品美女| 成人A片免费| 91久| 国产婷婷久久Av免费高清| 国产人与禽zoz0性伦| 五月婷婷色色网| 超碰永久| 亚洲淫秽视频| 色视频在线播放| 亚洲av图片| 色婷婷免费视频| 亚洲一二三四| 青青草手机在线视频| 亚洲天堂在线播放| 午夜午夜福利理论片在线播放| 亚洲国产av电影| 久草视频2| 丰满人妻一区二区三区四区不卡 | 99久久精品国产精品有折扣吗| 亚洲国产婷婷| 黄色一区二区三区| 午夜av在线播放| 伊人偷拍视频| 淫香淫色天天影视| 啪一啪操一操| 91丨PORNY丨丰满人妻网站 | 男同人到爽无套狂欢| 亚洲av色图| 国产精品卡一| 内射熟妇| 伊人天天操| 伊人亚洲综合| 欧美色综合| 亚洲国产成人精品综合99| 亚洲综合自拍| 欧美日韩中文字幕无码| 黃色A片一級二級三級免費久久久 亚洲AV无码第一区二区三区蜜桃 亚洲综合免费观看高清完整版在线 | 国产成人一区二区| 日韩三级AV在线观看| 日韩二| 天天拍天天干| 久久欧洲成人精品无码区| 亚洲最新无码视频| 看一级黄色视频| 超碰97av| 午夜亚洲无码| 国产精品综合| 亚洲三级黄片| 色五月婷婷激情| 淫色淫香综合网| 国产一区二区三区免费播放| 插菊花综合| 欧美自拍一区| 国产无码高清在线| 性爱av天堂| 无码群交| 91视频在线看| 婷婷玖玖| 91丨PORN丨国产| 国产作爱| 免费看黃色AAAAAA片| 亚洲在线视频| 国产精品色色色| 黄色免费无码| 四季AV一区二区夜夜嗨| 一区二区三区四区五区在线| 国产一级婬片A片免费妖精视频 | 在线观看成人三级片| 国产又黄又| 久久精品99久久久久久| 婷婷日韩中文字幕| 婷婷一区二区| 亚洲丁香五月激情| 青青草视频91| 黑人巨大精品欧美| 91狠狠| 国产成人在线视频| 婷婷色色五月| av在线中文| 搞搞爱| 国产成人在线视频| 中文字幕国产综合| 97AV人妻无码视频二区| 中文字幕国产精品| 久久精品| 骚BBBB槡BBB槡BBB| 国产午夜成人免费看片无遮挡| 高清无码操逼| 国产成人免费视频| 国产精品啪啪啪啪| 女生操逼网站| 日日干日日| 香蕉国产AV| 91啦丨熟女露脸| 国产无遮挡又黄又爽| 欧美操操| 欧美h| 伊人久久成人| 91丝袜| 91久久国产综合久久| 日韩不卡高清在线观看视频| 无码人妻在线播放| 国产精品秘麻豆免费版现看视频 | 中文字幕乱码亚洲无线码在线日噜噜 | 日韩aaa| 麻豆熟妇乱妇熟色A片在线看 | 男人天堂视频网站| 秋霞午夜| 亚洲成人性爱av| 91理论片| 尤物视频在线| 国产熟女乱伦| 91欧美精品成人AAA片| 欧美精品在线观看视频| 国产亚洲色婷婷| V天堂在线视频| 精产国品一区二区三区| 成人做爰黄AAA片免费直播岛国| 国产大奶一区二区| 国产精品自拍在线观看| 毛片91| 91人妻人人澡人人精品| 亚洲中文AV在线| 激情伊人| 欧美做爱网站| 日韩资源站| 天天爽天天日| 51成人网站| 黄色一级片在线看| 日本久久精品18| 深爱婷婷| 日本免费一二三区| www.日本色| 亚洲在线视频观看| 在线一区观看| 91足浴店按摩漂亮少妇| 欧美无人区码suv| 国产欧美综合三级伦| 日韩亚洲欧美在线观看| 国产主播在线观看| 啪啪91| 亚洲av| 欧美淫秽视频| 久久久久久久久久成人| 日韩啪啪视频| 污污污污污www网站免费民国| 黄色A片免费观看| 亚洲A片在线观看| 久久黄色A片| 99天天操| www操逼| 久久综合伊人7777777| 人人草人人摸人人看| 99热在线免费观看| 国产精品国产三级囯产普通话2| 五月天久久婷婷| 九九精品12| 国产无码性爱| 东北嫖老熟女一区二区视频网站| 亚洲视频在线观看播放| 99热在线观看免费精品| 亚洲AV在线观看| 一本一道久久综合| 色婷婷色99国产综合精品| 激情日逼| 中文字幕在线观看二区| 国产一区二区av| 成人做爰100片免费着| 欧美啪啪啪| 日韩无码人妻久久一区二区三区| 蜜桃91在线观看| 亚洲无码免费在线| 亚洲精品久久久久毛片A级牛奶| 天堂网中文| 大乳奶一级婬片A片| 精品一区二区三区四区五区| 在线91| 五月天婷婷在线播放视频免费观看| 欧美色插| 青娱乐AV| 色图15p| 欧美不卡一区| 欧洲亚洲无码| 七十路の高齢熟妇无码| 亚洲vs无码蜜桃少妇| 91第一页| 欧美丝袜脚交xxxxBH| 鸡巴操骚逼视频| 操B视频网站| 精品国产精品三级精品AV网址 | 亚洲一二三四区| 一本色道久久综合无码人妻| 伊人三级| 一级一A片一a免费看| 日韩成人精品中文字幕| 日韩专区在线观看| 日韩视频第一页| 手机AV在线观看| 特黄AV| 欧美日韩亚洲另类| 国产精品自拍小视频| 开心五月婷| 亚洲日本国产| 人妻无码一区二区三区免费| 久久久精品午夜人成欧洲亚洲韩国 | 国产人妖在线观看| 日韩欧美大香蕉| 天天爽天天射| igao在线观看| 看看AV| 大香蕉美女视频| 精品资源成人| 五月婷婷性爱| 婷婷五月AV| 日韩一级性爱| 五月婷婷激情综合| 狠狠大香蕉| 久久丁香五月| 成人av影院| 91视频人人| 91麻豆精品国产91久久久久久久久| 国产精品大全| 美女做爱在线观看| 久草视频首页| 日韩成人激情| 日韩亚洲视频| 天天插天天| jizz在线观看| av天天av无码av天天爽| 亚洲欧洲日韩| 欧美日韩一区二区三区视频| 香蕉网址| 欧美怡红院视频| 婷婷五月天在线播放| 97人人爽人人爽人人爽| 99这里只有精品视频| 日韩视频中文字幕在线| 无码AV网站| 大香蕉少妇| 国产精品视频免费| 免费在线观看黄片视频| 91青青草| 影音先锋女人av噜噜色| 国产精品色情A级片| 亚洲精品秘一区二区三小| 国产无码一| 国产精品乱子伦视频一区二区| 亚洲一区日韩| 色婷婷免费视频| 亚洲一级一级黄色| a片网| 操逼999| 日韩乱伦小说| 麻豆视频一区二区三区| 天天色天天色| 操人视频在线观看| 成人av影院| 男女AV在线| 操B视频在线播放| 日本AV在线播放| 五月天综合在线| 91人妻成人精品一区二区| 熟女人妻在线| 黄色视频在线观看亚洲一区二区三区免费 | 亚洲青草视频| 操逼视频观看| 大陆搡BBBBB搡BBBBBB| av黄色在线观看| 日本黄色a片| 成人做爰黄A片免费看三区蜜臀| 制服无码| 欧美自拍视频| 91免费| 麻豆www| 97超碰在线播放| www.日韩一区| 三级一区二区| 日韩欧美分区视频| 影音先锋91| 大香伊人| 不卡视频一区二区三区| 色老板在线视频| 国产成人无码在线| 久久久久久久AV| v天堂在线| 国产内射网站| 亚洲成人中文字幕在线| a视频免费在线观看| 欧美视频久久| 欧美精品久久久| 免费A在线观看| 五月欧美激情| 国产精品A片守望| 国产成人AV一区二区三区在线观看| 99热在线播放| 国产高清色| 色五月婷婷小说| 九九偷拍视频| 西西人体44www大胆无码| 国产免费激情视频| 欧美精品网站| 91西安站街老熟女露脸| 偷拍92| 日精品| 国产精品理论片| 欧美三级在线| 乖我硬了让老子cao你小视频| 色欲一区二区三区| 影音先锋一区二区三区| 91吴梦梦一区二区传媒| 免费69视频| 丁香久久| 国产黄色视频网站在线观看| 国产毛片18水真多18精品| 超碰97人人操| 无码专区中文字幕| 九九色在线视频| 在线无码AV| 九九热8| 国产激情123区| 一区二区三区电影高清电影免费观看| 人妻av无码| 蜜桃精品久久久| 91小仙女jK白丝袜呻吟| 亚洲伊人成人| 亚洲福利一区二区| 国产女人在线观看| 91国产乱伦| 91视频黄| 三级片大香蕉| 免费黄色视频网址| 97人妻人人| 91香蕉| 人妻人人澡| 国产免费久久久| 3级片网站| 韩日一区二区| 日韩无码少妇| 蜜柚Av| 91av在线看| 91丝袜一区在线观看| 午夜成人无码视频| 高清一区二区| www.99精品| 国产字幕| 俺来俺去www色婷婷| 无码高潮| 日韩操逼电影| 亚洲婷婷视频| 久久视频理论| 麻豆mdapp03.tⅴ| 韩国三级HD久久精品| 粉嫩小泬BBBB免费看| 激情六月婷婷| 伊人成年网| 日韩一级片在线| 成人国产精品免费观看| 国产成人免费在线观看| 牛牛精品一区二区| 1024大香蕉| 亚洲一区| 天天操b| 亚洲精选一区二区三区| 欧洲在线观看| 另类老妇奶性生BBwBB| 色欲av伊人久久大香线蕉影院| 免费在线观看AV网站| 久久久国产一区二区三区| 久久精品视频在线观看| 在线免费观看亚洲| 日本成人一区二区三区| 欧美视频综合| 精品国产91乱码一区二区三区| 一区成人| 日韩群交视频| 麻豆国产成人AV一区二区三区| 国产一区二区av| 日本二区三区| 亚洲欧美久久久| 欧美A片在线免费观看| 西西444WWW大胆无| 北条麻妃高清无码| 亚洲视频欧美视频| 久久av一区二区三区观看| 久久99久久99久久| 国产女人18毛片18精品| 黄页免费视频| 麻豆AV免费看| 久久九九国产精品怡红院| 中文字幕色| 中文字幕乱码亚州无线码日韩理论电 | 黄网国产手机在线观看| 四虎性爱| 91福利视频网站| 国产在线播放av| AV在线播放中文字幕| 国产成人亚洲日韩| 五月丁香婷中文| 日本成人电影在线观看| 人妻九九九| 在线草| wwwA片| 欧美日韩在线一区| 91视频中文字幕| 亚洲最大网站| 欧美日韩国产三级| 欧美午夜乱伦电影| 亚洲手机在线| 国产一区二区成人久久919色| 玖玖在线播放| 一区高清| www.日韩系列| 香蕉久久国产AV一区二区| 日韩人妻在线观看| 亚洲精品乱码久久久久久| 亚洲中文偷拍| 粉嫩99精品99久久久久久特污兔 | 成人精品| 99热这里只有精品99| 国产91探花秘入口| 91视频你懂的| 一本一道久久综合| 欧美激情xxx| 炮友露脸青楼传媒刘颖儿| 九九国产视频| ThePorn日本无码| 国产成人AV在线观看| 一级大香蕉| 久草精品在线| 麻豆MD传媒MD0071| 91免费在线| 韩国精品一区二区| 囯产精品久久久久久久| www.三级片| 黄色操逼片| 国产精品免费人成网站酒店 | 男女日皮视频| www香蕉成人片com| av一区二区三区四区| 成人午夜在线视频| 黄色电影视频在线| 无码在线播放视频| 色欲成人AV| AAAA毛片视频| 欧美手机在线| 91国产爽黄在线| 开心深爱激情网| 成人A√| 亚洲黄色一级电影| 婷婷另类小说| 欧美一级黄片免费看| 91视频在线观看网| 成人午夜福利| 水蜜桃一区| 欧美一级婬片免费视频华泰老添妇| 先锋影音中文字幕| 无码欧美成人| 操操操av| 婷婷网五月天| 久久私拍视频| 国产精品爽爽久久久| 国产精品视频一区二区三| 日韩人妻中文字幕| 97人妻人人澡| 亚洲无码av在线播放| 欧美日韩一区二区在线观看| 日韩操逼电影| 2019国产精品| 国产亚洲欧美视频| 国产av日韩av| 日韩在线观看免| 中字幕视频在线永久在线观看免费| 中国1级毛片| 黄色操逼网站?| 天天干天天做| 亚洲精品偷拍| 国产成人小视频| 亚洲成人精品视频| 天天色AV| 久久新视频| 国产操逼图| 人人人人人人人人操| 成人午夜婬片A片| 波多野结衣无码网站| 国产精品AV一区| 91吊逼| 人妻超碰在线| 久久亚洲日韩天天做日日做综合亚洲| 国产熟妇码视频黑料| 成人自拍偷拍视频| 国产一级AAAAA片免费| 99精品视频在线观看免费| av在线一区二区| 91人妻人人澡人人| 国产女人18毛片水18精| 一级A级毛片| 中文字幕一二三区| 99黄片| 不卡视频一区二区三区| 免费日韩无码| 日韩中文字幕av在线| 中文字幕日本成人| 国产日韩中文字幕| 成人午夜婬片A片| 免费在线观看AV片| 国精品无码人妻一区二区三区 | 二区三区免费视频| 另类欧美色图| 69堂在线观看| 久久老熟女| 黄色大片网站| 大香蕉啪啪| 婷婷五月天久久| h片在线| 日本AV在线播放| a在线免费| 无码一二三四| 色五月婷婷综合| 日韩欧美二区| 微拍福利一区| 麻豆性爱视频| 九九精品在线观看| 久久国产高清| 成人免费视频一区二区| 一级片学生妹| 大香蕉综合视频| 亚洲肏屄网| 大炕上公让我高潮了六次| 色777网站| 欧美成人网站免费在线观看| 一级大香蕉| 国产真实乱婬A片久久久老牛| 99久久大香蕉| 欧美日韩肏屄视频| 国产精品囯产三级囯产AV野外| 亚洲一区二区视频在线观看| 欧美日韩一级二级三级| 99视频+国产日韩欧美| 看免费操逼视频| 久久成人久久爱| 欧美激情一区二区A片成人牛牛| 91内射| 色播五月天| 日韩在线| 成人aV免费观看| AV天堂国产| 日本高清视频网站| 五月婷婷黄色| 一级a黄片| 午夜精品久久久久久久99热精东| 婷婷丁香五月网| 免费黄色av网址| 自拍偷拍亚洲无码| 欧美国产性爱| 91激情网| 久久久精品免费| 俺去久久| 欧美性69| 国产肏屄视频| 少妇搡BBBB搡BBB搡澳门| 越南小嫩嫩BBWBBw| 91人人澡| 正在播放吴梦梦淫行| 大屌一区二区三区| 久久成人18免费网站波多野结衣 | 97人人爽| 88av在线| 三级视频网站| 九九r在线精品观看视频| 五月天婷婷国产| 日本欧美一级片| 日韩无码乱码| 成人在线黄片| www.久热| 日韩AV一区二区三区四区| 国产做受91一片二片老头| 91丨九色丨老农村| HEZ-502搭讪绝品人妻系列 | 国产乱论视频| 国产精品高清无码| 五月婷婷丁香在线| 久久精品中文| 少妇搡BBBB搡BBB搡视频一级 | 黄色片免费视频网站| 韩国一区二区三区在线观看| 成人性爱视频免费在线观看| 俺也要操| 91大神在线看| 日皮在线观看| www.777av| 操逼大香蕉| 大香蕉伊人视频| 女侠吕四娘第二部| 亚洲精品图片| 91精品国产乱码久久久久| 99精品视频免费在线观看| 国产精品福利导航| 一区二区无码区| 免费看一区二区三区| 99热精品在线播放| 97精品人妻| 中文字幕视频一区| 大鸡巴操小逼视频| 国产又爽又黄免费观看| 农村三级片| 特大妓女BBwBBWBBw| 草草网站| 尤物视频网址| 91国黄色毛片在线观看| 中文无码日本高潮喷水| 人妻体内射精| 国产亚洲精品久久久久久桃色 | 日韩黄片视频| 樱桃av| 久久精品综合| 在线观看亚洲无码视频| 国产精品国产精品国产专区不52 | 日韩免费高清无码| 91视频在线免费观看| 高清无码不卡AV| AV高清无码在线观看| 人人色在线观看| 日韩黄网| 91丨国产丨精品丨丝袜| 麻豆AV在线| 男女操逼免费观看| 台湾成人在线视频| 国产传媒一区| 精品人妻一区二区三区在线视频不卡 | 水果派av| 欧美日韩国产不卡视频| 国产成人精品一区二区三区四区| 国产亚洲99久久精品熟女| 国产18毛片18水多精品| 免费大黄网站| 日韩成人中文字幕| 风情万种AV| 日韩无码一卡| 安微妇搡BBBB搡BBBB| 国产精品视频一区二区三区在线观看 | 东京热久久综合色五月老师| 天天日很很日| 亚洲香蕉视频网站| 午夜福利100理论片| 天堂在线www| 国产理论| 国产精品天天AVJ精麻传媒| 亚洲中文字幕无码爆乳av| 成人精品一区二区三区无码视频 | 亚洲AAA电影| 一区无码高清| 亚洲精品中文字幕乱码三区91 | 欧美在线小视频| 日韩无码一级| 天天撸天天干天天日| 黑种人配中国少妇HD| 自拍亚洲欧美| 色吟AV| 嫩BBB嫩BBB嫩BBB| 日韩性AV| 日韩精品中文无码| sm在线观看| av久草| 91大铭哥| 日韩无码A级片| 国产区在线| 天堂在线中文字幕| 无码一区二区三区四区五区| 久久久免费黄色视频| 人妻无码人妻| 边吃边摸| 久久久国产精品黄毛片| 成人黄色大香蕉| wwwxx国产| 中文字幕一区二区二三区四区| 精品欧美| 人妻无码中文久久久久专区| 99久久久精品久久久久久| 免费无码又爽又黄又刺激网站| 色婷婷影院| 91搞一搞| 91丨精品丨国产丨丝袜| av777777| 亚洲无码在线播放| 黄色色情小说| 中文资源在线a| 欧美一区二区三区不卡| 黄片久久| 日韩激情无码视频精选| 日批无码| a视频免费| 伊人大香蕉在线视频| 国产成人AA| 三级毛片在线| 国产在线无码视频| 久久久久9999| 91在线无码精品入口电车| 影音先锋成人无码| 伊人天天干| 2012天天夜夜| 亚洲AV无码乱码国产精品| 国产jk在线| 国产成人精品一区二区| 国产一视频| 黄色成人视频免费看| 精品一级| 美日韩在线观看| 欧美性综合网| 能看的av| 日韩AV免费在线观看| 在线免费观看国产视频| 国产高清成人| 91麻豆精品传媒国产| 深爱激情综合| 91蜜桃视频在线观看| 欧美囗交荫蒂AAAA| 97日韩天堂| 香蕉视频成人在线观看| 日批视频在线观看| 亚洲成人免费视频| 无码欧美人XXXXX日本无码 | 日本男人天堂| 夜夜爽久久精品91| 婷婷开心五月天| 丁香啪啪| 久久男人天堂| AV性爱社区| 亚州无码精品| 精品一二三| 91大神久久| 男人的天堂aa| 91亚洲一线产区二线产区| 操你啦无码日韩| 美女裸身18禁| 精品999| 北条麻妃在线观看香蕉| 水蜜桃成人网| 91人人草| 2014亚洲天堂| 国产人妖AV| 黄色视频亚洲| 人妻无码HEYZO少妇精品| 日韩精品成人免费观看视频| 亚洲中文字幕一区二区| 夜色福利网| 欧美亚洲日韩一区二区| 九色PORNY自拍视频| 日韩网站在线| 无码在线高清| 国产熟妇婬乱一区二区| 亚洲日韩精品欧美一区二区yw| 成年人免费电影| 九九无码| 午夜亚洲AⅤ无码高潮片苍井空| 亚洲va中文字幕| 国产黄色在线观看| 国产真实乱婬A片久久久老牛| 北条麻妃无码精品AV| 日韩无任何视频在线观看| 伊人婷婷大香蕉| 99在线播放| 亚洲一级av无码毛片精品| 亚洲AV播放| 免费a片在线观看| 视频国产区| 天堂在线www| 欧美一区| 亚洲精品女人| 天堂网av在线| 国精产品一区二区三区在线观看 | 青青草综合| 婷婷综合久久| 水蜜桃视频在线观看| 最新亚洲无码在线观看| 欧美日本在线观看|