目录
一、引子
最近看到群里有小伙伴在问PO里怎么搞OAuth的登陆验证。突然想起REST adaptor里确实有一个checkbox是跟OAuth相关的,但一直也没怎么去研究过,就趁此机会搞一搞把。
二、原理介绍
OAuth原理其实蛮简单的,找了张图,能看得很清楚。概括性的讲,就是用户会被提供一个密钥。
1.用户在访问接口之前,需要先调用授权接口,传入密钥等参数,授权服务器会返回一个token。
2.用户在拿到token之后,方可正式访问业务接口,访问的同时传入step1拿到的token
至于NW内部的工作机制,看看下图基本就懂了。
三、实战一下
1. 现有接口测试
此时调用接口,会返回401授权错误
2. REST sender CC 设置
这里设置蛮简单的,只需要勾选对应的OAuth开关即可。(此时调用接口依然会报401 - Not Authorized)
3. OAuth授权服务配置
配置路径:
NWA->SOA->Monitoring->REST OAuth Server
值得注意的是老版本的NW不一定有这个菜单,需要先升级才会出现。
我这以前的7.50.22,没有这个菜单,BASIS直接升级到7.50.28之后就出现了。
创建客户端:
按照如下顺序进行操作,几个参数解释一下:
Client ID: 客户端名称,可以自定义命名规范
SAP NetWeaver User: 该用户是NW内部用来获取token的用户,可以用PO的标准用户
Secret: 客户端密码,这个很重要。生成后复制出来,需要提供给调用端的
Token Exporation: token有效期,默认3600秒。即调用端每次获取的token可以保持有效1个小时,这期间如果还需调用接口,直接用之前已获取的token就行了,不用再请求token了
Restrict to Specific Channels: 限制到指定接口,一般这个要勾上。表示该client仅对添加进来的指定接口才有效。
创建完之后,是这样的:
4. 接口测试:
4.1 获取token
调用地址是:http://:/RESTAdapter/OAuthServer
grant_type:client_credentials,固定值
client_id: 前一步“OAuth授权服务配置”中创建的客户端ID
client_secret:前一步“OAuth授权服务配置”中创建客户端ID时生成的密码
调用后拿到如下图的返回参数:
access_token: token,无需解释,调业务接口时要用
token_type: token类型,,调业务接口时要用
expires_in: token有效时常,此时间内token都有效,不用再获取token
4.2 调用业务接口
调用实际业务接口,在原来的基础之上,需要在header中增加参数:Authorization
Authorization = token_type + 空格 + access_token
根据4.1的返回消息,则为:Authorization = bearer UM0PZm8guF3Mvs9Q0xvJXdz3Bk5-Yxhqq-hiN3x
至此,算是测通了。