OAuth 2.0協議在SAP產品中的應用

阮一峯老師曾經在他的博文理解OAuth 2.0裏對這個概念有了深刻淺出的闡述。html

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html瀏覽器

本文會結合我在SAP作過的項目,來給你們介紹這個協議是如何應用到SAP產品中去的。安全

我作過的最先的一個和OAuth 2.0相關的項目,是2013年時做爲SAP成都研究院CRM開發團隊的一員,參與設計和開發了SAP CRM和社交媒體集成解決方案。該方案實現了Twitter, Facebook和新浪微博等社交媒體和SAP CRM On Premise(如下簡稱SAP CRM)的呼叫中心(Interaction Center)的集成。服務器

經過在SAP CRM後臺配置一個社交媒體帳號,好比某Twitter帳號,使得SAP CRM的後臺做業可以按期把Twitter網站上@了該Twitter帳號的全部tweets抓取到CRM呼叫中心的收件箱裏供坐席處理。app

例如客戶在Twitter官網上發一條@AndrewPang6的tweet, 文本內容以下:網站

在SAP CRM完成必需的配置以後,該tweet可以被SAP CRM的後臺做業抓取到CRM呼叫中心。坐席經過在Inbox(收件箱)裏指定相應的搜索條件,以下圖所示,便可檢索出對應存儲在CRM的tweet。url

更多細節參考個人blog: Twitter(also Facebook) is official integrated into CRM 7.0 EHP3設計

https://blogs.sap.com/2013/11/08/twitteralso-facebook-is-official-integrated-into-crm-70-ehp3/code


做爲SAP的另外一款基於雲的CRM解決方案,SAP Hybris Cloud for Customer(如下簡稱C4C), 毫無疑問也包含了社交媒體的解決方案。htm

咱們仍是用上文介紹的SAP CRM呼叫中心的社交媒體使用場景爲例。

在C4C系統裏建立一個新的類型爲Twitter的Social Medial Channel(社交媒體渠道)。該渠道的類型爲Twitter,渠道ID能夠由建立者指定:

而後把建立的渠道同某個Twitter帳號綁定。在這個例子裏,我建立的ID爲I042416的渠道綁定到了個人Twitter帳號JerryWang_SAP上。完成以後,該Twitter帳號發佈的tweets就可以被抓取到C4C系統中。

下圖左邊是我建立好的ID爲I042416的社交媒體渠道,紅色區域是個人Twitter帳號。右邊的IMPORT RUN包含了一個表格,顯示了三次後臺做業的執行狀況。這些後臺做業完成的邏輯就是把JerryWang_SAP這個帳號在Twitter網站上發佈的tweets抓取到C4C去。

以這三條tweets爲例:

這三條tweets都成功地被抓取到C4C系統的Service(服務)工做中心,生成對應的Ticket:

點擊超連接,能看到Ticket明細。下圖紅色區域的內容來自我在Twitter網站上發佈的其中一條tweet。


等等,到目前爲止好像OAuth2.0在這兩個產品裏沒有露面?下面以SAP CRM爲例,經過模擬Andrew和一個SAP CRM客戶的對話來介紹OAuth2.0究竟是怎麼在社交媒體集成方案中發揮做用的。

背景介紹: 這篇文章第一張截圖裏的Pang Andrew,就是SAP CRM社交媒體集成項目裏實現了Twitter渠道同CRM呼叫中心雙向交互的SAP成都研究院的開發人員之一。因此下面和客戶的對話請他出來客串。該對話純屬Jerry虛構,若有雷同純屬巧合。

客戶: SAP您好, 我有一個Twitter帳號,我想把Twitter網站上@了這個帳號的相關tweets同步到SAP CRM的呼叫中內心。

Andrew: 好的。請提供您的Twitter帳號和密碼。

客戶: 帳號我能夠提供,爲何還要提供密碼?

Andrew: 有了您的Twitter帳號和密碼,SAP可使用在RFC 7617裏定義的Basic Authentication方式,調用Twitter提供的Read API拿到您但願同步到CRM去的tweets數據。您能夠參考下面的wiki定義:

https://en.wikipedia.org/wiki/Basic_access_authentication

客戶: 等等,您提供的這些信息太過技術化了。這樣吧,我讓咱們IT人員來和您溝通。

客戶IT: 這個密碼是咱們的私人信息啊,能不能不提供給大家啊?

Andrew: 這個密碼咱們能夠經過ABAP Security Storage這個技術來存儲在ABAP Netweaver上。這樣,不管SAP的支持人員,仍是您企業裏的工做人員都是不可能經過技術手段來竊取到這個密碼的。SAP的安全技術您就放心吧,下面是ABAP Security Storage的官方說明:

https://help.sap.com/saphelp_nw74/helpdata/en/4e/eb2dce10f2398de10000000a42189b/frameset.htm

客戶IT認真閱讀幫助文檔中...

客戶IT: 除了這個把密碼提供給大家的方式,大家有其餘的方式來調用Twitter的API麼?

Andrew: 早期的Twitter API只支持Basic Authentication, 可是後來Twitter也支持了其餘的認證方式。

Twitter容許第三方開發者在官網上建立第三方應用,好比我建立了下圖名爲i042416的Twitter應用:

Twitter官網會給這個應用頒發一對Key和Secret做爲其惟一標識。

經過這對key和Secret, 我能夠構造一個oauth_token,這個oauth_token能向Twitter代表我做爲i042416這個應用的身份。我把構造好的oauth_token,做爲url的一部分發給您。

完整的url以下圖所示。

這個url是屬於Twitter官網的,所以您能夠放心使用。該url對應的網頁會詢問您是否願意讓該Twitter第三方應用取得讀取您tweets的權限。若是您願意,點擊Authorize app按鈕便可。同時Twitter官網也強調了這個應用並不具備窺探您密碼,郵箱地址或者訪問您私信的權限。

您點擊了button以後,Twitter就會返回給我一個access token。利用這個access token,我就能夠開工了,在CRM ABAP代碼裏調用Twitter API,讀取您的tweets。

Jerry注: 這是阮一峯老師文章裏提到的OAuth2.0中的認證模式之一: 簡化模式(implicit grant type)

客戶IT: 聽起來不錯!這樣我就不須要把咱們公司的Twitter用戶的密碼提供給您了。

可是,這個access token是經過明文的形式被瀏覽器返回的。若是這個access token泄漏了怎麼辦?別有用心者同樣能夠用它來幹壞事。

Andrew: 您真專業!那這樣吧,咱們換一種方式。這種方式Twitter不會直接把access token經過瀏覽器返回給我,而僅僅返回一個oauth_verifier token。

我拿到這個token以後,會在個人ABAP代碼裏使用這個verifier token向Twitter服務器發起請求。Twitter收到個人請求,會給個人應用返回access token。這個access token的獲取過程是發生在ABAP會話期裏的,其餘人不可能竊取到。我會使用這個access token來調用Twitter API。

另外一方面,即便其餘人竊取到了瀏覽器返回的oauth_verifier token, 他們也沒法經過一樣的方式獲取到access token, 由於他們不知道我Twitter應用的Key和Secret。這下您放心了吧?

Jerry注: 這種方式即阮一峯文章裏介紹的受權碼模式(authorization code)。

客戶IT: 恩,放心了,感謝您詳細的講解。那麼我想要在SAP CRM的呼叫中內心使用這個解決方案,具體該如何開始呢?

Andrew: 請閱讀這個SAP note得到實施的具體步驟: 1832462 - Master Note: How to Implement Social Media Channel API to Integrate with CRM Interaction Center。

擴展閱讀

要獲取更多Jerry的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼:

相關文章
相關標籤/搜索