之前的文档中创建RESTful endpoints时,都没有启用security,这样方便测试。本部分内容针对之前创建的 /test/ttest/ service,启用授权。
控制对保护resource的访问,是通过定义privileges实现的。限制访问后,用户至少要有Privileges中指定的一系列角色中的一个,才能访问相应的resource。一个privilege会和一个或者更多resource module关联:访问这些resource modules之前,用户必须被授权,也就是说用户要有相应的角色。
权限管理
连接上REST数据服务后,右击权限节点
点击应用,然后右击新增加的privilegetest权限,点击上载。
上载后,4test resource保护生效,再访问时需要提供用户密码。使用安装ORDS时,使用的test用户及密码即可。test是整个ORDS的管理员。
浏览器输入http://192.168.12.55:8080/ords/test/testm/ttestget,会提示没有授权,不再能直接访问,需要用户密码。
点击【sign in】,输入test用户密码。
点击【Sign in】,弹出如下界面
授权第三方
这部分讨论如何注册应用(所谓的第三方应用),使其能够访问REST API。
OAuth2.0是一个标准互联网协议,该协议为提供REST API s的HTTP servers提供了一种能够被第三方应用有限访问的方法。
<------ OAuth不需要如下内容,OAuth2需要
RESTful Services是被OAuth2 协议保护,控制非公共数据的访问。为预防数据窥探,OAuth2要求所有牵涉到OAuth2授权处理的requests传输时都要使用HTTPS,这也是Oracle REST Data Services的默认校验行为,如果请求使用的是http,则会返回403 Forbidden的HTTP状态码。
如果环境中不是HTTPS,以上的默认行为也可以disabled。操作如下。(这种最好是开发、测试环境。)
- 定位到Oracle REST Data Services配置文件路径
- 编辑defaults.xml文件,在</properties>标签前,增加如下内容
<entry key="security.verifySSL">false</entry>
3、保存文件。若Oracle REST Data Services正在运行,则重启。
-------->
因此,在第三方应用能够访问REST API之前,必须先把它注册,并且(REST)用户必须审核这个注册。拥有SQL Developer角色的用户,例如之前《Oracle数据发布为REST数据服务》中的创建用户中的用户test_developer,这样的用户是被允许(即有权限)注册OAuth clients的。(而安装ORDS所用的数据库用户test,虽然死ORDS管理员,注册OAuth clients后,审核时,跳转连接所带参数有问题。)
注册客户端应用
打开浏览器,输入
http://192.168.12.55:8080/ords/test/oauth/clients/
点击【sign in】,输入之前《Oracle数据发布为REST数据服务》中的创建用户中的用户test_developer。
点击【Sign in】
点击【New Client】
点击【Create New Client】,创建完成后,如下所示
在创建完成的上图中,点击铅笔标记。弹出如下界面
使用其中的授权URI,可以进行下一步客户端应用审核操作,具体URI复制出来如下所示
说明:截图中URL的ip部分发生了变化,是因为测试时耗时比较久,后期去了另一个局域网,但其他配置没有变化,总体步骤不影响。
审核客户端应用
在浏览器中,输入上一步中的授权URI
点击【sign in】
点击【sign in】
点击【Approve】后,弹出如下界面
URL地址带有token
http://example.org/#token_type=bearer&access_token=UCI1m56mKFOOqUVyj9s1eg&expires_in=3600&state=f1933f1-957f-9180-a299-a8d47fce8956
浏览器中,输入如下的URL,首次发出这个请求,才会出现上述步骤中的【Approval】环节,后续再次发出这个URL时,就会直接生成token,不再经过【Approval】。
Postman验证
没有token时,无法正常访问
添加token信息后,正确的访问信息显示如下