阮一峰老师曾经在他的博文理解OAuth 2.0里对这个概念有了深入浅出的阐述。

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, 文本内容如下:

在SAP CRM完成必需的配置之后,该tweet能够被SAP CRM的后台作业抓取到CRM呼叫中心。坐席通过在Inbox(收件箱)里指定相应的搜索条件,如下图所示,即可检索出对应存储在CRM的tweet。

更多细节参考我的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可以由创建者指定:

然后把创建的渠道同某个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。

扩展阅读

  • 理解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

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

OAuth 2.0协议在SAP产品中的应用的更多相关文章

  1. OpenID Connect:OAuth 2.0协议之上的简单身份层

    OpenID Connect是什么?OpenID Connect(目前版本是1.0)是OAuth 2.0协议(可参考本人此篇:OAuth 2.0 / RCF6749 协议解读)之上的简单身份层,用 A ...

  2. Web验证方式(3)--OAuth 2.0协议

    介绍 OAuth协议是用来解决第三方应用程序访问Http Service的时候的认证问题.举个例子:某视频网站支持用户通过微信登陆,然后获取用户在微信上的图像信息. 在这个场景里 微信充当的就是Htt ...

  3. OAuth 2.0 / RCF6749 协议解读

    OAuth是第三方应用授权的开放标准,目前版本是2.0版,以下将要介绍的内容和概念主要来源于该版本.恐篇幅太长,OAuth 的诞生背景就不在这里赘述了,可参考 RFC 6749 . 四种角色定义: R ...

  4. OAuth 2.0 RFC 框架 中文

    Internet Engineering Task Force (IETF) D. Hardt, Ed.Request for Comments: 6749 MicrosoftObsoletes: 5 ...

  5. 深入理解OAuth2.0协议

    1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店 ...

  6. 我也想聊聊 OAuth 2.0 —— Access Token

    这是一篇待在草稿箱半年之久的文章 连我自己都不知道我的草稿箱有多少未发布的文章了.这应该是我在上一家公司未解散之前写的,记得当时是要做一个开发者中心,很不幸. 今天,打开草稿箱有种莫名的伤感,看到这个 ...

  7. 我也想聊聊 OAuth 2.0 —— 基本概念

    这是一篇待在草稿箱半年之久的文章 连我自己都不知道我的草稿箱有多少未发布的文章了.这应该是我在上一家公司未解散之前写的,记得当时是要做一个开发者中心,很不幸. 今天,打开草稿箱有种莫名的伤感,看到这个 ...

  8. 帮你深入理解OAuth2.0协议

    1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店 ...

  9. OAuth 2.0介绍学习

    OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0. OAuth 2.0关注客户端开发者的简易性.要么通过组织在资源拥有者和HTTP服务商之间的被批 ...

随机推荐

  1. C. Nice Garland-------字符串

    C. Nice Garland time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  2. 中间件使用之(UA,IP,selenium)的使用

    一.UA池:User-Agent池 - 作用:尽可能多的将scrapy工程中的请求伪装成不同类型的浏览器身份. - 操作流程: 1.在下载中间件中拦截请求 2.将拦截到的请求的请求头信息中的UA进行篡 ...

  3. Linux批量杀掉挂掉的进程

    $ `ps aux | grep test | grep -v grep | awk '{print $2}'` 杀掉含有test且不含有grep的进程,后面的 awk '{print $2}' 是进 ...

  4. 生产者与消费者模式-阻塞 wait,notify

    设计思路:生产者push ,消费者 拿,篮子装,syncstack先进后出,while 判断 index=0 wait,      当 Producer生产了 并push到篮子里  notify(唤醒 ...

  5. [實現DDD] 第11章 工廠

    創建過程中須考慮一些重要細節, 否則所創建的聚合將處於不正確的狀態, 使用適當的工廠方法可以確保這一點, 而客戶端只需輸入基本的參數(通常是值對象), 另外, 工廠能更好地表達出通用語言, 使團隊成員 ...

  6. 深入理解JavaScript系列(3):全面解析Module模式

    简介 Module模式是JavaScript编程中一个非常通用的模式,一般情况下,大家都知道基本用法,本文尝试着给大家更多该模式的高级使用方式. 首先我们来看看Module模式的基本特征: 模块化,可 ...

  7. Javascript怎么跳出循环,嵌套循环。

    今天要实现一个功能,在数组a中的每一项,对应数组b中的每一项,如果对应上了就给数组b的checked增加ture属性,如果查找不到就给数组b的checked增加false属性. 如果有哪里写的不对欢迎 ...

  8. ssm(spring、springmvc、mybatis)框架整合

    第一次接触这3大框架,打算一个一个慢慢学,参照网上资料搭建了一个ssm项目,作为新手吃亏在jar包的导入上,比如jdbc DataSource配置的时候由于导入的jar包不兼容或者缺包导致项目无法正常 ...

  9. 04.Dictionary字典键值对集合

    Dictionary字典键值对集合和Hashtable键值对集合的功能非常类似, 只是在声明的时候,必须为其制定值的类型. 示例代码: namespace _11.Dictionary字典集合的学习 ...

  10. SVN服务器在Ubuntu16.04下搭建多版本库详细教程

    1  介绍  Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可 以很方面恢复到以前的版本,并可以查看数据 ...