国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

OAuth 2.0 第三方平臺(tái)授權(quán)及 OAuth scribe 庫(kù)介紹

vincent_xyb / 3329人閱讀

摘要:注冊(cè)成功后,下次用戶再進(jìn)入當(dāng)前平臺(tái)時(shí),就可以使用第三方平臺(tái)賬號(hào)登錄了。上圖是的授權(quán)流程。當(dāng)前平臺(tái)跳轉(zhuǎn)到第三方平臺(tái)的授權(quán)請(qǐng)求,在中攜帶當(dāng)前平臺(tái)在第三方平臺(tái)注冊(cè)的應(yīng)用應(yīng)用以及回調(diào)地址信息。第三方平臺(tái)返回受保護(hù)的內(nèi)容。

在網(wǎng)上寫(xiě) OAuth 授權(quán)的文章有很多,不過(guò)其中內(nèi)容質(zhì)量很高的較少,以至于我自己在學(xué)習(xí)的過(guò)程中也走了不少?gòu)澛? =。借著這次發(fā)博客的機(jī)會(huì),也做一個(gè)小結(jié)吧。

什么是 OAuth

近幾年來(lái),很多網(wǎng)站都默默地在自己的登錄鏈接旁邊加上了一個(gè)“用XXX平臺(tái)賬號(hào)登錄”的鏈接,比如

使用第三方平臺(tái)賬號(hào)登錄,當(dāng)前平臺(tái)并不會(huì)獲取到用戶的密碼,登錄的動(dòng)作在第三方平臺(tái)下完成。
在登錄完成后,會(huì)跳出一個(gè)頁(yè)面,由當(dāng)前平臺(tái)請(qǐng)求對(duì)第三方平臺(tái)的操作授權(quán)。

用戶同意之后,一般情況下,當(dāng)前平臺(tái)還會(huì)要求用戶注冊(cè)一個(gè)在當(dāng)前平臺(tái)使用的獨(dú)立賬號(hào)。

注冊(cè)成功后,下次用戶再進(jìn)入當(dāng)前平臺(tái)時(shí),就可以使用第三方平臺(tái)賬號(hào)登錄了。登錄后,當(dāng)前平臺(tái)及第三方平臺(tái)的賬號(hào)都會(huì)進(jìn)入在線狀態(tài)。

  

OAuth 就是為了提供跨平臺(tái)訪問(wèn)而產(chǎn)生的一種標(biāo)準(zhǔn)。
OAuth 1.0 的標(biāo)準(zhǔn)在 2007 年發(fā)布,2.0 的標(biāo)準(zhǔn)則在 2011 年發(fā)布。其中 2.0 的標(biāo)準(zhǔn)取消了 Request token 和所有 Token 的加密過(guò)程,但因?yàn)閺?qiáng)制使用 Https 協(xié)議,因此被認(rèn)為安全性高于 1.0 的標(biāo)準(zhǔn)。

顯而易見(jiàn)的是,第三方平臺(tái)授權(quán)有非常大的優(yōu)點(diǎn)。
首先,用戶可以只使用一個(gè)社交賬號(hào)來(lái)登錄眾多平臺(tái),這就避免了對(duì)于很多非重度使用的平臺(tái),注冊(cè)后忘記用戶名和密碼的情況。
其次,對(duì)于一些小的平臺(tái)來(lái)說(shuō),通過(guò) OAuth 授權(quán),可以依托大平臺(tái)的賬號(hào)帶來(lái)用戶,對(duì)于服務(wù)提供方來(lái)說(shuō),因?yàn)橘~號(hào)會(huì)在授權(quán)雙方平臺(tái)同時(shí)在線,也會(huì)為己方平臺(tái)帶來(lái)可觀的流量。
最后,對(duì)于用戶來(lái)說(shuō),簡(jiǎn)化的注冊(cè)環(huán)節(jié)以及跨平臺(tái)訪問(wèn),則帶來(lái)了相當(dāng)多的便利。

OAuth 2.0流程簡(jiǎn)介

因?yàn)?1.0 標(biāo)準(zhǔn)的 OAuth 在流程中有非常多的參數(shù)傳遞以及程序加密步驟。如今各大平臺(tái)幾乎已經(jīng)全部切換到了 2.0 的授權(quán)標(biāo)準(zhǔn)。

上圖是 OAuth 2.0 的授權(quán)流程。(下文編號(hào)與圖中編號(hào)對(duì)應(yīng))

用戶在當(dāng)前平臺(tái)發(fā)送一個(gè)通過(guò)第三方登錄的請(qǐng)求。

當(dāng)前平臺(tái)跳轉(zhuǎn)到第三方平臺(tái)的授權(quán)請(qǐng)求 URL,在 Request 中攜帶當(dāng)前平臺(tái)在第三方平臺(tái)注冊(cè)的應(yīng)用 id, 應(yīng)用 secret 以及回調(diào)地址信息。

第三方平臺(tái)在確認(rèn) Request 中包含的應(yīng)用 id, 應(yīng)用 secret,回調(diào)地址與此前注冊(cè)的一致后,給當(dāng)前用戶提供登錄界面。

用戶在第三方平臺(tái)完成登錄及對(duì)當(dāng)前平臺(tái)的授權(quán)。
>授權(quán)內(nèi)容通常包括通過(guò)當(dāng)前平臺(tái)訪問(wèn)第三方平臺(tái)的用戶信息,以及操作第三方平臺(tái)內(nèi)容的權(quán)限。

第三方平臺(tái)攜帶驗(yàn)證碼回調(diào)當(dāng)前平臺(tái)。

當(dāng)前平臺(tái)攜帶驗(yàn)證碼獲取 Access token。

第三方平臺(tái)驗(yàn)證碼通過(guò),生成 Access token 回傳給當(dāng)前平臺(tái)。

當(dāng)前平臺(tái)攜帶 Access token 訪問(wèn)第三方平臺(tái)的受保護(hù)內(nèi)容鏈接。

第三方平臺(tái)返回受保護(hù)的內(nèi)容。

當(dāng)前平臺(tái)保存受保護(hù)的內(nèi)容。
>通常會(huì)讓用戶在當(dāng)前平臺(tái)注冊(cè)一個(gè)新賬號(hào),然后將新賬號(hào)與第三方平臺(tái)的賬號(hào)綁定,綁定過(guò)后,用戶在當(dāng)前平臺(tái)會(huì)成功登錄。

有關(guān) OAuth Scribe 庫(kù)的使用
  

Scribe是一個(gè)用 Java 開(kāi)發(fā)的 OAuth 開(kāi)源庫(kù),支持 OAuth 1.0a / OAuth 2.0 標(biāo)準(zhǔn)。

項(xiàng)目地址

在 Maven 的 pom.xml 中加入庫(kù)依賴:


        
            scribe-java-mvn-repo
            https://raw.github.com/fernandezpablo85/scribe-java/mvn-repo/
            
                true
                always
            
        



        
            org.scribe
            scribe
            1.3.6
        

初始化依賴之后,就可以使用 Scribe 庫(kù)了。

此外,為了從當(dāng)前平臺(tái)訪問(wèn)第三方平臺(tái),我們還需要構(gòu)建服務(wù)配置類(lèi)(OAuthServiceConfig)以及服務(wù)提供類(lèi)(OAuthServiceProvider)。

/**
 * 服務(wù)配置類(lèi),配置向第三方平臺(tái)請(qǐng)求的服務(wù)配置項(xiàng)
 */
public class OAuthServiceConfig {

//以下信息在消費(fèi)平臺(tái)配置的與第三方平臺(tái)注冊(cè)的要保持完全一致
    private String apiKey; //在第三方平臺(tái)注冊(cè)后生成的消費(fèi)平臺(tái)應(yīng)用id
    private String apiSecret;//在第三方平臺(tái)注冊(cè)后生成的消費(fèi)平臺(tái)應(yīng)用secret
    private String callback;//第三方平臺(tái)在用戶登錄及授權(quán)操作通過(guò)后,消費(fèi)平臺(tái)的回調(diào)地址。
    private String scope;//申請(qǐng)的權(quán)限范圍,可選
    private Class apiClass;//記載獲取第三方校驗(yàn)信息api地址的類(lèi),大平臺(tái)的api類(lèi)多在scribe中有封裝

    /**
     *  getters & setters
     */

    public OAuthServiceConfig() {
    }

    public OAuthServiceConfig(String apiKey, String apiSecret, String callback, String scope,
                              Class apiClass) {
        super();
        this.apiKey = apiKey;
        this.apiSecret = apiSecret;
        this.callback = callback;
        this.apiClass = apiClass;
        this.scope = scope;
    }
}
/**
 * 服務(wù)提供類(lèi),通過(guò)獲取服務(wù)配置類(lèi)中的配置,生成發(fā)送給第三方平臺(tái)的Request
 */
public class OAuthServiceProvider {

    private final static Logger logger = LoggerFactory.getLogger(OAuthServiceProvider.class);
    private OAuthServiceConfig config;

    public OAuthServiceProvider() {
    }

    public OAuthServiceProvider(OAuthServiceConfig config) {
        this.config = config;
    }

    public OAuthService getService() {
        return new ServiceBuilder().provider(config.getApiClass())
                .apiKey(config.getApiKey())
                .apiSecret(config.getApiSecret())
                .callback(config.getCallback())
                .scope(config.getScope())
                .build();
    }
}

將服務(wù)配置的參數(shù)初始化配入 Spring 配置文件。


    
    
    
    
   
 
  


      

最后是訪問(wèn)接口類(lèi)。/callback接口為用戶同意授權(quán)后,Weibo回調(diào)當(dāng)前平臺(tái)的接口

/**
 * Controller類(lèi)
 */
@Controller
public class WeiboController {

    @Autowired
    @Qualifier("weiboServiceProvider")
    private OAuthServiceProvider weiboServiceProvider;

    //獲取受保護(hù)內(nèi)容的地址(例如某用戶信息)
    private static final String PROTECTED_RESOURCE_URL = "https://api.weibo.com/2/users/show.json";

    //以下代碼和授權(quán)流程中的步驟編碼對(duì)應(yīng)
    //1.接收來(lái)自客戶端的第三方登錄請(qǐng)求
    @RequestMapping(value = "/oauth/weibo/login", method = RequestMethod.GET)
    public String loginByWeibo() {
        OAuthService service = weiboServiceProvider.getService();
        //2.重定向到第三方平臺(tái)的授權(quán)請(qǐng)求URL,其中URL已經(jīng)在OauthServiceConfig類(lèi)中配置
        return "redirect:" + service.getAuthorizationUrl(EMPTY_TOKEN);
    }

    //5.攜帶驗(yàn)證碼回調(diào)當(dāng)前平臺(tái),code參數(shù)為驗(yàn)證碼
    @RequestMapping(value = "/oauth/weibo/callback", method = RequestMethod.GET)
    public String callback(
            @RequestParam(value = "code") String oauthVerifier) throws CoreException {
        OAuthService service = weiboServiceProvider.getService();
        Verifier verifier = new Verifier(oauthVerifier);
        //6.7.攜帶驗(yàn)證碼獲取access token
        Token accessToken = service.getAccessToken(requestToken, verifier);

        OAuthRequest oauthRequest = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
        //8.access token作為參數(shù)發(fā)送獲取受保護(hù)內(nèi)容的request
        service.signRequest(accessToken, oauthRequest);
        //9.第三方平臺(tái)response返回受保護(hù)的內(nèi)容
        Response oauthResponse = oauthRequest.send();
        oauthResponse.getBody();
        //...處理從response獲取的信息
        }
    }
}
最后……

感謝耐心觀看。
鄙人才疏學(xué)淺,一點(diǎn)點(diǎn)經(jīng)驗(yàn),如有謬誤,歡迎指正。

  Zhao Xiaoxi
  
  

Coding 官方技術(shù)博客:http://blog.coding.net/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/64166.html

相關(guān)文章

  • PHP小知識(shí)點(diǎn)

    摘要:那些瑣碎的知識(shí)點(diǎn)作者記錄的的很奇特很難記的知識(shí)點(diǎn)。易錯(cuò)知識(shí)點(diǎn)整理注意和的區(qū)別中和都是輸出的作用,但是兩者之間還是有細(xì)微的差別。今天手頭不忙,總結(jié)一下,分享過(guò)程中掌握的知識(shí)點(diǎn)。 深入理解 PHP 之:Nginx 與 FPM 的工作機(jī)制 這篇文章從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。 PHP 那些瑣碎的知識(shí)...

    hover_lew 評(píng)論0 收藏0
  • 基于oauth 2.0 實(shí)現(xiàn)三方開(kāi)放平臺(tái)

    摘要:本文單純從簡(jiǎn)單的技術(shù)實(shí)現(xiàn)來(lái)講,不涉及開(kāi)放平臺(tái)的多維度的運(yùn)營(yíng)理念。它的特點(diǎn)就是通過(guò)客戶端的后臺(tái)服務(wù)器,與服務(wù)提供商的認(rèn)證服務(wù)器進(jìn)行互動(dòng)能夠滿足絕大多數(shù)開(kāi)放平臺(tái)認(rèn)證授權(quán)的需求。 本文單純從簡(jiǎn)單的技術(shù)實(shí)現(xiàn)來(lái)講,不涉及開(kāi)放平臺(tái)的多維度的運(yùn)營(yíng)理念。 什么是開(kāi)放平臺(tái) 通過(guò)開(kāi)放自己平臺(tái)產(chǎn)品服務(wù)的各種API接口,讓其他第三方開(kāi)發(fā)者在開(kāi)發(fā)應(yīng)用時(shí)根據(jù)需求直接調(diào)用,例如微信登錄、QQ登錄、微信支付、微博登錄...

    Simon 評(píng)論0 收藏0
  • 基于oauth 2.0 實(shí)現(xiàn)三方開(kāi)放平臺(tái)

    摘要:本文單純從簡(jiǎn)單的技術(shù)實(shí)現(xiàn)來(lái)講,不涉及開(kāi)放平臺(tái)的多維度的運(yùn)營(yíng)理念。它的特點(diǎn)就是通過(guò)客戶端的后臺(tái)服務(wù)器,與服務(wù)提供商的認(rèn)證服務(wù)器進(jìn)行互動(dòng)能夠滿足絕大多數(shù)開(kāi)放平臺(tái)認(rèn)證授權(quán)的需求。 本文單純從簡(jiǎn)單的技術(shù)實(shí)現(xiàn)來(lái)講,不涉及開(kāi)放平臺(tái)的多維度的運(yùn)營(yíng)理念。 什么是開(kāi)放平臺(tái) 通過(guò)開(kāi)放自己平臺(tái)產(chǎn)品服務(wù)的各種API接口,讓其他第三方開(kāi)發(fā)者在開(kāi)發(fā)應(yīng)用時(shí)根據(jù)需求直接調(diào)用,例如微信登錄、QQ登錄、微信支付、微博登錄...

    xiaodao 評(píng)論0 收藏0
  • 基于 github issues 實(shí)現(xiàn)三方評(píng)論系統(tǒng)

    摘要:什么是第三方評(píng)論系統(tǒng)博客或系統(tǒng),一般都是有內(nèi)容和評(píng)論兩部分組成。而且垃圾評(píng)論和過(guò)濾非法關(guān)鍵字難度較大,所以在國(guó)內(nèi)外都有第三評(píng)論系統(tǒng)。三評(píng)論系統(tǒng)實(shí)現(xiàn)預(yù)備工作創(chuàng)建。 本文只是介紹如何基于 github issues 實(shí)現(xiàn)第三方評(píng)論系統(tǒng),對(duì)于 Hexo 介紹,本文并不打算詳述,如果有童鞋之前還沒(méi)有了解 Hexo 的,可以先看一下之前文章《靜態(tài)博客框架 Hexo 入門(mén) 》,或者直接訪問(wèn) Hex...

    waltr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<