Mr.阮一峰曾在他的博文UnderstandingOAuth2.0中深入浅出地解释了这个概念。http://www.ruanyifeng.com/blo...本文将结合我在SAP做过的项目,介绍这个协议是如何应用到SAP产品上的。最早做的一个OAuth2.0相关项目是2013年作为SAP成都研究院CRM开发团队成员,参与了SAPCRM和社交媒体整合方案的设计和开发。该解决方案实现了Twitter、Facebook、新浪微博等社交媒体与SAPCRMOnPremise(以下简称SAPCRM)呼叫中心(InteractionCenter)的整合。通过在SAPCRM后台配置一个社交媒体账号,比如Twitter账号,SAPCRM的后台工作可以定时抓取Twitter网站上@该Twitter账号的所有推文到CRM呼叫中心的收件箱,供代理处理。例如,客户在推特官网发送推文@AndrewPang6,正文内容如下:SAPCRM完成必要的配置后,推文可以被SAPCRM的后台作业抓取到CRM呼叫中心。代理可以通过在Inbox(收件箱)中指定相应的搜索条件来检索存储在CRM中的相应推文,如下图所示。*作为SAP另一个基于云的CRM解决方案,SAPHybrisCloudforCustomer(以下简称C4C)无疑包含了社交媒体解决方案。我们仍然以上面介绍的SAPCRM呼叫中心的社交媒体使用场景为例。在C4C系统中新建一个Twitter类型的SocialMedialChannel(社交媒体渠道)。这个频道的类型是推特,频道ID可以由创建者指定:那么创建的频道就绑定了某个推特账号。在此示例中,我创建的ID为I042416的频道绑定到我的Twitter帐户JerryWang_SAP。完成后,可以将推特账号发布的推文抓取到C4C系统中。下图左侧是我创建的ID为I042416的社交媒体频道,红色区域是我的推特账号。右侧的IMPORTRUN包含一个显示三个后台作业执行情况的表格。这些后台作业的逻辑是将推特网站上的账号JerryWang_SAP发布的推文抓取到C4C。以这3条推文为例:这3条推文均已成功抓取到C4C系统的Service(服务)工作中心,并生成相应的Ticket:点击超链接可查看Ticket详情。下图红色区域的内容来自我在推特网站上发布的其中一条推文。*等等,OAuth2.0好像还没有出现在这两款产品上?我们以SAPCRM为例,通过模拟Andrew与SAPCRM客户的对话,介绍OAuth2.0在社交媒体集成解决方案中的工作原理。客户:你好SAP,我有一个推特账号,我想把推特网站上@这个账号的相关推文同步到SAPCRM的呼叫中心。安德鲁:好的。请提供您的Twitter帐户和密码。客户:我可以提供账号,为什么要提供密码?Andrew:有了你的Twitter账号和密码,SAP就可以使用RFC7617中定义的BasicAuthentication方法,调用Twitter提供的ReadAPI,获取你想要同步到CRM的推文数据。您可以参考以下维基定义:https://en.wikipedia.org/wiki...客户:等等,您提供的信息太技术化了。好吧,我会让我们的IT人员与您沟通。客户IT:这个密码是我们的私人信息,我们可以不提供给你吗?Andrew:我们可以使用ABAPSecurityStorage的技术将这个密码存储在ABAPNetweaver上。这样SAP的支持人员或者贵企业的员工就不可能通过技术手段盗取这个密码。不用担心SAP的安全技术。以下是ABAPSecurityStorage的官方说明:https://help.sap.com/saphelp_...CustomerIT仔细阅读帮助文档...CustomerIT:除此之外,提供密码给你方法,做你有其他方法调用TwitterAPI吗?Andrew:早期的TwitterAPI只支持BasicAuthentication,后来Twitter也支持其他的认证方式。Twitter允许第三方开发者在官方网站上创建第三方应用程序。比如我创建了下图中名为i042416的Twitter应用:Twitter官网会给这个应用颁发一对Key和Secret,作为它的唯一标识。通过这对密钥和Secret,我可以构造一个oauth_token,它可以向Twitter表明我作为应用程序i042416的身份。我会将构建的oauth_token作为url的一部分发送给您。完整的url如下图所示。该url属于推特官网,大家可以放心使用。该url对应的网页会询问你是否愿意让第三方推特应用获得阅读你推文的权限。如果您愿意,请单击授权应用程序按钮。同时,推特官网也强调,该应用无权窥探您的密码、电子邮箱地址或访问您的私人信息。单击该按钮后,Twitter将返回给我一个访问令牌。使用此访问令牌,我可以开始工作,调用CRMABAP代码中的TwitterAPI,并阅读您的推文。Jerry注:这是阮一峰先生文章中提到的OAuth2.0中的一种认证模式:Simplifiedmode(implicitgranttype)CustomerIT:听起来不错!这样我就不用给你我们公司推特用户的密码了。但是,此访问令牌由浏览器以纯文本形式返回。如果此访问令牌泄露怎么办?别有用心的人可以利用它来干坏事。安德鲁:你太专业了!好吧,让我们换一种方式。这样Twitter就不会直接通过浏览器返回accesstoken给我,而只会返回一个oauth_verifiertoken。在我得到这个令牌之后,我将在我的ABAP代码中使用这个验证者令牌来向Twitter服务器发起请求。Twitter收到我的请求并向我的应用程序返回一个访问令牌。accesstoken获取过程发生在ABAP会话期间,其他人不可能窃取。我将使用此访问令牌来调用TwitterAPI。另一方面,即使其他人窃取了浏览器返回的oauth_verifiertoken,他们也无法以同样的方式获取accesstoken,因为他们不知道我的Twitter应用的Key和Secret。你现在放心了吗?Jerry'sNote:这种方式就是阮一峰文章中介绍的授权码方式。客户IT:嗯,别担心,谢谢你的详细解释。那么我想在SAPCRM的呼叫中心使用这个解决方案,我该如何开始呢?Andrew:请阅读此SAP说明以了解实施的具体步骤:1832462-大师说明:如何实施社交媒体渠道API以与CRM交互中心集成。延伸阅读理解OAuth2.0:http://www.ruanyifeng.com/blo...Twitter/Facebook与SAPCRM整合:https://blogs.sap.com/2013/11...FAQC4CSocialMedia:https://blogs.sap.com/2017/06...使用Oauth-Twitter开发人员:https://developer.twitter.com...
