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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

相关文章
相关标签/搜索