SAP OData Service - 使用OAuth Auth
基础 - OAuth 验证流程 - 使用 Authorization code
image- 用户(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 上面测试访问,如图:
image
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 会自动生成
配置好之后界面如下:
image
取得 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, 并且回到重定向界面如下:
image
注意地址栏的 code 就是我们需要的授权码.
取得 access code
有了 authorization code, 打开 postman, 输入以下信息:
image
Authorization 需要输入 Client_id 的用户名和密码,也就是在 SOauth2中配置的用户名和密码.
imageBody 中需要输入刚才的到的授权码以及重定向地址,这个地址和 SOAUTH2中配置的地址必须一致.
执行之后,得到访问码(access code).
image
调用 Odata service
输入 Odata 地址,并且加上上面得到的 access code, 就可以访问 Odata service
image
结语
OAuth 的配置并没有那么复杂,我们之所以要这样做的最主要的原因是,在后续的移动应用开发中,可以非常简单的使用 OAuth 进行授权,特别是开发 Fiori for iOS 的应用,配置 oauth 会简单很多.