天天看點

OAuth 2.0協定在SAP産品中的應用

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呼叫中心的收件箱裡供坐席處理。

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

OAuth 2.0協定在SAP産品中的應用

在SAP CRM完成必需的配置之後,該tweet能夠被SAP CRM的背景作業抓取到CRM呼叫中心。坐席通過在Inbox(收件箱)裡指定相應的搜尋條件,如下圖所示,即可檢索出對應存儲在CRM的tweet。

OAuth 2.0協定在SAP産品中的應用

更多細節參考我的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/

作為SAP的另一款基于雲的CRM解決方案,SAP Hybris Cloud for Customer(以下簡稱C4C), 毫無疑問也包含了社交媒體的解決方案。

我們還是用上文介紹的SAP CRM呼叫中心的社交媒體使用場景為例。

在C4C系統裡建立一個新的類型為Twitter的Social Medial Channel(社交媒體管道)。該管道的類型為Twitter,管道ID可以由建立者指定:

OAuth 2.0協定在SAP産品中的應用
OAuth 2.0協定在SAP産品中的應用

然後把建立的管道同某個Twitter賬号綁定。在這個例子裡,我建立的ID為I042416的管道綁定到了我的Twitter賬号JerryWang_SAP上。完成之後,該Twitter賬号釋出的tweets就能夠被抓取到C4C系統中。

下圖左邊是我建立好的ID為I042416的社交媒體管道,紅色區域是我的Twitter賬号。右邊的IMPORT RUN包含了一個表格,顯示了三次背景作業的執行情況。這些背景作業完成的邏輯就是把JerryWang_SAP這個賬号在Twitter網站上釋出的tweets抓取到C4C去。

OAuth 2.0協定在SAP産品中的應用

以這三條tweets為例:

OAuth 2.0協定在SAP産品中的應用

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

OAuth 2.0協定在SAP産品中的應用

點選超連結,能看到Ticket明細。下圖紅色區域的内容來自我在Twitter網站上釋出的其中一條tweet。

OAuth 2.0協定在SAP産品中的應用

等等,到目前為止好像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應用:

OAuth 2.0協定在SAP産品中的應用
OAuth 2.0協定在SAP産品中的應用

Twitter官網會給這個應用頒發一對Key和Secret作為其唯一辨別。

OAuth 2.0協定在SAP産品中的應用

通過這對key和Secret, 我可以構造一個oauth_token,這個oauth_token能向Twitter表明我作為i042416這個應用的身份。我把構造好的oauth_token,作為url的一部分發給您。

完整的url如下圖所示。

這個url是屬于Twitter官網的,是以您可以放心使用。該url對應的網頁會詢問您是否願意讓該Twitter第三方應用取得讀取您tweets的權限。如果您願意,點選Authorize app按鈕即可。同時Twitter官網也強調了這個應用并不具有窺探您密碼,郵箱位址或者通路您私信的權限。

OAuth 2.0協定在SAP産品中的應用
OAuth 2.0協定在SAP産品中的應用

您點選了button之後,Twitter就會傳回給我一個access token。利用這個access token,我就可以開工了,在CRM ABAP代碼裡調用Twitter API,讀取您的tweets。

OAuth 2.0協定在SAP産品中的應用

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

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

但是,這個access token是通過明文的形式被浏覽器傳回的。如果這個access token洩漏了怎麼辦?别有用心者一樣可以用它來幹壞事。

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

OAuth 2.0協定在SAP産品中的應用
OAuth 2.0協定在SAP産品中的應用

我拿到這個token之後,會在我的ABAP代碼裡使用這個verifier token向Twitter伺服器發起請求。Twitter收到我的請求,會給我的應用傳回access token。這個access token的擷取過程是發生在ABAP會話期裡的,其他人不可能竊取到。我會使用這個access token來調用Twitter API。

另一方面,即使其他人竊取到了浏覽器傳回的oauth_verifier token, 他們也無法通過同樣的方式擷取到access token, 因為他們不知道我Twitter應用的Key和Secret。這下您放心了吧?

OAuth 2.0協定在SAP産品中的應用

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。

擴充閱讀

了解OAuth 2.0:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

Twitter/Facebook和SAP CRM的內建:https://blogs.sap.com/2013/11/08/twitteralso-facebook-is-official-integrated-into-crm-70-ehp3/

FAQ C4C Social Media:

https://blogs.sap.com/2017/06/26/faq-social-media/

Using Oauth - Twitter Developers:  

https://developer.twitter.com/en/docs/basics/authentication/overview/using-oauth

繼續閱讀