基於Spring的新浪微博第三方登錄實現

在《Github第三方登錄--通用化的第三方登陸實現》中我們實現了一個通用化的第三方登錄框架,其中包括OAUth的基本流程以及最簡單的用戶註冊。但是不同的第三方登錄因爲其細節不同還是有很多坑的,今天我們就從完善開發者信息開始一步一步添加微博第三方登錄的功能。

注意,需要完成微博的第三方登錄功能需要有一個域名以及修改該域名網站的權限,之後審覈時需要對首頁進行修改。這裏我們假設我們的域名是tianmaying.com。

完善用戶信息

首先我們進入新浪微博開發平臺,登錄我們的微博賬號,點擊右上角的【我的應用】,我們就會看見相關的功能以及相對應需要完善的信息。

alter-text

我們可以看到,如果需要添加第三方應用只需要完善基本信息,但是需要注意的是,如果你添加了微博第三方登錄功能後需要通過其審覈,仍然需要通過【身份認證】。這裏我們只需要完善【基本信息】即可。

點擊右側的【基本信息】,按要求添加相關的信息,最後完成郵箱驗證,我們的基本信息就添加完成了。之後我們需要添加網站的相關信息:

屏幕快照 2015-08-15 下午3.13.09.png

選擇左上角的【微連接】->【網站接入】,之後再選擇【立即接入】:

alter-text

我們需要驗證的是我們是否對於網站擁有所有者權限,需要修改域名相對應的網頁上添加一行代碼,按要求進行修改即可。

驗證通過後,我們就可以在本地進行第三方登錄的測試了。

添加第三方通用登錄框架

Github第三方登錄--通用化的第三方登陸實現》一文中已經完成了一個通用化第三方登錄的框架,如果想對通用化第三方登錄的實現有所瞭解,請先閱讀《Github第三方登錄--通用化的第三方登陸實現》。

我們直接複製上述代碼,去除掉github相關的代碼:

alter-text

添加SinaWeiboOAuthService

按照《Github第三方登錄--通用化的第三方登陸實現》,我們需要爲Weibo添加兩個類,SinaWeiboAPI以及SinaWeiboOAuthService,但是SinaWeiboAPIscribe中已經提供了,我們直接使用即可。接下來我們來添加SinaWeiboOAuthService

public class SinaWeiboOAuthService extends OAuthServiceDeractor {

    private static final String PROTECTED_RESOURCE_URL = "https://api.weibo.com/oauth2/get_token_info";

    public SinaWeiboOAuthService(OAuthService oAuthService) {
        super(oAuthService, OAuthTypes.SINA_WEIBO);
    }

    @Override
    public OAuthUser getOAuthUser(Token accessToken) {
        OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL);
        this.signRequest(accessToken, request);
        Response response = request.send();
        OAuthUser oAuthUser = new OAuthUser();
        oAuthUser.setoAuthType(getoAuthType());
        oAuthUser.setoAuthId(JSONPath.eval(JSON.parse(response.getBody()), "$.uid").toString());
        oAuthUser.setUser(new User());
        return oAuthUser;
    }

}

SinaWeiboOAuthService需要完成獲取用戶的相關信息,並將其轉換成爲OAuthUser對象,關於如何獲取新浪微博的用戶信息以及其相關參數,可以參看新浪微博的官方文檔

配置OAuthService

最後,按照我們從新浪微博中得到的appKey、appSecret以及我們定義的callback_uri對SinaWeiboOAuthService進行相關配置:

@Configuration
public class OAuthConfig {

    private static final String CALLBACK_URL = "http://tianmaying.com/oauth/%s/callback";

    @Value("${oAuth.sina.appKey}") String sinaAppKey;
    @Value("${oAuth.sina.appSecret}") String sinaAppSecret;

    @Bean
    public OAuthServiceDeractor getSinaOAuthService(){
        return new SinaWeiboOAuthService(new ServiceBuilder()
            .provider(SinaWeiboApi20.class)
            .apiKey(sinaAppKey)
            .apiSecret(sinaAppSecret)
            .callback(String.format(CALLBACK_URL, OAuthTypes.SINA_WEIBO))
            .build());
    }

}

修改hosts

由於微博的第三方登錄是與域名相綁定的,因此我們需要我們的hosts文件,將本地127.0.0.1綁定到tianmaying.com即可。

windows系統hosts文件一般在C:\WINDOWS\system32\drivers\etc

mac系統hosts文件地址一般爲:/etc/hosts

在hosts文件添加以下一行:

127.0.0.1       tianmaying.com

調試

進入根目錄,運行sudo mvn spring-boot:run命令,訪問http://tianmaying.com (之前填寫應用信息以及修改hosts時所填寫的域名,這三個域名必須一致),由於必須通過域名進行訪問,所以我們需要監聽80端口,運行時需要超級管理員權限。

注意:將代碼上線後,還需要經過新浪微博的審覈,進入新浪微博--我的應用,按要求進行填寫即可。

版權聲明 本文由Cliff創作,轉載需署名作者且註明文章出處 參考代碼 要獲取本文的參考代碼,請訪問: https://www.tianmaying.com/tutorial/OAuth-login-weibo/repo
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章