SAP OData Service - 使用OAuth Auth
基础 - OAuth 验证流程 - 使用 Authorization code

- 用户(RO:Resource Owner)递交请求资源 - 在浏览器或者特定的应用 - 可以定义为 Oauth客户端
- OAuth 客户端将请求重定向到授权服务器,并且提供信息从验证服务器请求授权码( authorization code )
- 授权服务器(AS,Authorization Server) 把授权码发给客户端或者用户,并且重定向到客户端提供的 redirect 链接
- 客户端使用上面得到的授权码到授权服务器请求访问码(Access Token)
- 授权服务器验证并发送访问码到客户端
- 客户端使用访问码访问资源
- 资源服务器返回客户端/用户需要访问的资源
流程很清楚,网络上也有很多相应的资源可以学习,作为一个 SAP 技术人员,对于安全方面也需要很多的了解,这样在以后向架构师方向发展会有极大的助力.
上面是一般的 OAuth 授权码访问流程,作用到 SAP ECC 以及 Gateway 领域,又是怎样的配置和应用呢?
- SAP ECC 是 resource server, 如果使用 Odata 的话, Gateway 作为 resource server, 虽然最终访问的数据来自于 ECC, 因为 Gateway 和 ECC 之间使用 Trust RFC 连接,我们完全可以将 Gateway 看做 RS.
- Gateway 提供 oauth 验证,扮演者 authorization server 的角色
- 测试 - 浏览器/ Postman作为客户端,浏览器用来抓取 authorization code, postman 作为资源请求客户端
说明: oAuth 更多的是授权,而用户验证(Authentication)往往使用Identity Provider(比如 Active Directory)来执行,也就是在获取授权码的时候,需要 idP 来验证用户的身份.
创建/注册 Odata Model
在前文中我有三篇文章介绍如何创建并且注册 Odata service, 如果不熟悉的朋友可以参考以下三篇文章:
在本文中,我们假设已经有现成的 Odata service 可以使用,并且可以在 Gateway Odata client 上面测试访问,如图:

Odata 在注册的时候必须支持 oAuth
配置Gateway Oauth
- 运行事务代码 - soauth2
- 新建一个 oauth 验证
- Client_id: 这个必须是在 sap 中存在的一个 system 类型的用户名,如果没有创建,请在 SU01中创建一个用户.
- Token lifetime: 访问码的有效时间
- 必须选中 Grant Type Authorization Code
- 必须提供 redirect Uri, 如果没有,可以随便创建一个页面来显示,我创建了一个 UI5页面用来显示授权成功,代码如下:
code - Scope ID: 可以搜索你在 gateway 注册的 Odata service,scope ID 会自动生成
配置好之后界面如下:

取得 Authorization Code
完成以上的配置步骤,我们就可以开始测试了,首先是需要取得授权码,在浏览器中输入以下信息:
https://<sap Gateway 服务器>/sap/bc/webdynpro/sap/oauth2_authority?response_type=code&client_id=ZBOBTEST&redirect_uri=<重定向地址>&scope=ZPLANT_SRV_0001&state=anystate
浏览器进入授权界面,需要用户确认授权,如下:

浏览器返回 Authorization code, 并且回到重定向界面如下:

注意地址栏的 code 就是我们需要的授权码.
取得 access code
有了 authorization code, 打开 postman, 输入以下信息:

Authorization 需要输入 Client_id 的用户名和密码,也就是在 SOauth2中配置的用户名和密码.

Body 中需要输入刚才的到的授权码以及重定向地址,这个地址和 SOAUTH2中配置的地址必须一致.
执行之后,得到访问码(access code).

调用 Odata service
输入 Odata 地址,并且加上上面得到的 access code, 就可以访问 Odata service

结语
OAuth 的配置并没有那么复杂,我们之所以要这样做的最主要的原因是,在后续的移动应用开发中,可以非常简单的使用 OAuth 进行授权,特别是开发 Fiori for iOS 的应用,配置 oauth 会简单很多.