尝试使用带有OAuth2令牌的Liferay7.2的GraphQL版本进行访问的结果(2019年12月版)
由于Liferay 7.2发布了GraphQL API,所以试着调用一下。
据推测,Liferay 7.21版本开始支持GraphQL。
-
- New GraphQL APIs in Liferay 7.2
- GraphQL APIs | Liferay Documents
由于 Chrome 浏览器插件 Altair 作为一款方便的 GraphQL 客户端而广为人知,因此我尝试使用它来访问 API。
如果这样下去,不仅Mutation系列的API,甚至一些query系列的API也会遭受权限不足的指责。如果没有登录,就意味着没有被授权,这是理所当然的!因此,我想在Liferay中尝试使用OAuth,但Altair没有像Postman一样轻松地获取OAuth2.0令牌的功能…这就是为什么我要呼唤Postman。
邮递员!
好的,现在我将向您介绍如何使用 Postman 获取 OAuth 2.0 令牌。
1. Lifray的设置
首先,与KeyCloak相同的方式,在门户网站上注册一个”客户端”。
请参考以下手册并尝试注册一个Postman客户端。
- OAuth 2.0 | Liferay Deployment
在Liferay管理员登录后,打开控制面板并进入“OAuth2管理”页面。
点击”OAuth2 管理”页面右上角的”+”按钮以添加新的客户端。
应用程序名称可以随意,可以用Liferay的首页作为回调URI。
将”客户端配置文件”作为Web应用程序。只需点击”保存”按钮即可。
从注册完成后的页面上复制并保存“客户ID”。同样地,点击“编辑”按钮来显示对话框并复制并保存客户密钥。点击“取消”按钮关闭对话框。
接下来进行权限设置。打开顶部的“范围”选项卡。
请点击并选择所需的权限进行许可,并点击“保存”。
在这里重要的是,在这里设置的权限关键字(例如Liferay.Headless.Admin.Workflow.everything)对应于后来在Postman中请求令牌时的范围(scopes),以及必须与在这里设置的内容完全匹配,否则会被拒绝访问。请记下逐一勾选的范围关键字。
2. 通过Postman获取令牌
根据以下 Liferay 手册的参考,在 Postman 中设置上述的客户端配置和访问点。
- Authorizing Account Access with OAuth2
这可能有点难理解,但这是关于在Postman中获取新的OAuth访问令牌的对话框的截图。
-
- 令牌名称 → 这是可以随意并且是可以的。
-
- 授权类型 → 选择授权码。
-
- 回调URL → 输入在Liferay中输入的“回调URI”的地址。
-
- 授权URL → 输入http://<Liferay的主机>/o/oauth2/authorize的地址。
-
- 访问令牌URL → 输入http://<Liferay的主机>/o/oauth2/token的地址。
-
- 客户端ID → 输入在Liferay中注册的“客户端ID”。
-
- 客户端密钥 → 输入在Liferay中注册的“客户端密钥”。
- 范围 → 列出在Liferay的“范围”选项卡中设置的权限关键字,以空格分隔。
请点击上方的“请求令牌”按钮!
当显示登录界面时,希望您使用Liferay中已有的用户进行登录。
成功登录后,将显示Liferay权限确认界面。对于Facebook或Twitter的OAuth登录也是一样的。 (因为启用了“分阶段功能”,所以可能会出现额外的显示,请不用在意。)
当您在这里点击“同意”时….
是的,已经被添加到Postman的令牌管理对话框中了!
3. GraphQL 查询
那么,立即让我们尝试访问GraphQL的API吧。由于Altair在GraphQL的输入方面更简便,我们将使用Altair来创建查询。
我写了一个查询来获取一篇博客文章,虽然有点难看。在使用Altair访问时,出现了Access denied的错误。HTTP状态码为200的情况下,这个Access denied的异常引发了我的关注…
好的,现在我们尝试在 Postman 上执行这个查询。
是的,很好….啊,嗯~?!?
跟Altair一样,发生了一个HTTP状态码为200但却是拒绝访问的异常。
可能是OAuth的令牌没有生效吗…?
实际上,即使在Altair中使用的HTTP 200,没有登录也可以调用这个API,就是这个意思吧。。。
我觉得在后续的处理中可能没有传递使用令牌获得的权限。
或者说…这是什么意思?
Liferay 7.2的GraphQL API非常复杂,这是我不接受的。(哎呀,这不行吧。。。)
2019年12月19日补充: 你懂得?我成功了。
在Liferay的配置中进行”服务访问策略”的设置后,可以通过GraphQL进行访问。以下是补充的步骤。
打开控制面板中的“服务访问政策”。
请在代理登录行的菜单中选择“编辑”。
将“代理登录”的“默认”更改为“否”→“是”。
请点击“保存”,然后再次从Postman获取令牌并尝试发送GraphQL查询。
我能够获取到一篇列举了”这是一次测试”的博客文章!
我正在使用”代理登录”这个强大的权限,但是在正式网站上我们到底应该授予多少权限呢…?我想试试看!
无论如何,HTTP 状态码 200 都不行啊…
闲聊:关于Postman和Altair的截图。(Windows 10)
通常,我們在文章中使用的截圖大多是網頁畫面,因此只需要使用 Chrome 的截圖插件”Awesome Screenshot”就可以了。但由於 Postman 是一個獨立的應用程序,而 Altair 是 Chrome 的插件,所以無法使用”Awesome Screenshot”來進行截圖。
我以前一直用 Alt + PrtScr(也可以是 Alt + Fn + PrtScr)来截取最前面的 Windows 应用的截图,然后粘贴到画图应用等中,并保存为 PNG 格式并命名。但这个方法太麻烦了,所以我决定找一个一键保存文件的快捷键。
整个桌面的截屏图:
Windows键+打印屏幕(几乎是Win + Fn + PrtScr)键
请提供一个关于活跃应用程序的截图。
使用 Windows 键 + Alt 键 + PrintScreen(几乎等同于 Win + Alt + Fn + PrtScr)组合键。
所以,截图将直接保存在C:\Users\用户名\Videos\Captures文件夹中,就像在资源管理器中的视频>截图文件夹一样,保存为PNG格式!
所以,如果是PNG格式的图像,可以使用”Awesome Screenshot”进行处理,因此拍下截图并进行裁剪等操作变得非常轻松。