尝试使用带有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。

Altair_1.png

如果这样下去,不仅Mutation系列的API,甚至一些query系列的API也会遭受权限不足的指责。如果没有登录,就意味着没有被授权,这是理所当然的!因此,我想在Liferay中尝试使用OAuth,但Altair没有像Postman一样轻松地获取OAuth2.0令牌的功能…这就是为什么我要呼唤Postman。

邮递员!

Postman 2019_12_18 12_58_01.png

好的,现在我将向您介绍如何使用 Postman 获取 OAuth 2.0 令牌。

1. Lifray的设置

首先,与KeyCloak相同的方式,在门户网站上注册一个”客户端”。
请参考以下手册并尝试注册一个Postman客户端。

    OAuth 2.0 | Liferay Deployment

在Liferay管理员登录后,打开控制面板并进入“OAuth2管理”页面。

OAuth 2 管理 - コントロールパネル - Liferay.png

点击”OAuth2 管理”页面右上角的”+”按钮以添加新的客户端。

OAuth 2 アプリケーションを追加する - コントロールパネル - Liferay.png

应用程序名称可以随意,可以用Liferay的首页作为回调URI。
将”客户端配置文件”作为Web应用程序。只需点击”保存”按钮即可。

Postman Client - コントロールパネル - Liferay.png

从注册完成后的页面上复制并保存“客户ID”。同样地,点击“编辑”按钮来显示对话框并复制并保存客户密钥。点击“取消”按钮关闭对话框。

接下来进行权限设置。打开顶部的“范围”选项卡。

Postman Client 範囲の設定 - コントロールパネル - Liferay (1).png

请点击并选择所需的权限进行许可,并点击“保存”。

在这里重要的是,在这里设置的权限关键字(例如Liferay.Headless.Admin.Workflow.everything)对应于后来在Postman中请求令牌时的范围(scopes),以及必须与在这里设置的内容完全匹配,否则会被拒绝访问。请记下逐一勾选的范围关键字。

2. 通过Postman获取令牌

根据以下 Liferay 手册的参考,在 Postman 中设置上述的客户端配置和访问点。

    Authorizing Account Access with OAuth2

这可能有点难理解,但这是关于在Postman中获取新的OAuth访问令牌的对话框的截图。

Postman 2019_12_18 15_15_23.png
    1. 令牌名称 → 这是可以随意并且是可以的。

 

    1. 授权类型 → 选择授权码。

 

    1. 回调URL → 输入在Liferay中输入的“回调URI”的地址。

 

    1. 授权URL → 输入http://<Liferay的主机>/o/oauth2/authorize的地址。

 

    1. 访问令牌URL → 输入http://<Liferay的主机>/o/oauth2/token的地址。

 

    1. 客户端ID → 输入在Liferay中注册的“客户端ID”。

 

    1. 客户端密钥 → 输入在Liferay中注册的“客户端密钥”。

 

    范围 → 列出在Liferay的“范围”选项卡中设置的权限关键字,以空格分隔。

请点击上方的“请求令牌”按钮!

当显示登录界面时,希望您使用Liferay中已有的用户进行登录。

Home - Liferay 2019_12_18 15_22_53.png

成功登录后,将显示Liferay权限确认界面。对于Facebook或Twitter的OAuth登录也是一样的。 (因为启用了“分阶段功能”,所以可能会出现额外的显示,请不用在意。)

Home - Liferay 2019_12_18 15_25_45.png

当您在这里点击“同意”时….

Postman 2019_12_18 15_27_06.png

是的,已经被添加到Postman的令牌管理对话框中了!

3. GraphQL 查询

那么,立即让我们尝试访问GraphQL的API吧。由于Altair在GraphQL的输入方面更简便,我们将使用Altair来创建查询。

Altair - Google Chrome 2019_12_18 15_39_46.png

我写了一个查询来获取一篇博客文章,虽然有点难看。在使用Altair访问时,出现了Access denied的错误。HTTP状态码为200的情况下,这个Access denied的异常引发了我的关注…

好的,现在我们尝试在 Postman 上执行这个查询。

Postman 2019_12_18 16_03_33.png

是的,很好….啊,嗯~?!?
跟Altair一样,发生了一个HTTP状态码为200但却是拒绝访问的异常。
可能是OAuth的令牌没有生效吗…?

实际上,即使在Altair中使用的HTTP 200,没有登录也可以调用这个API,就是这个意思吧。。。
我觉得在后续的处理中可能没有传递使用令牌获得的权限。

或者说…这是什么意思?

Liferay 7.2的GraphQL API非常复杂,这是我不接受的。(哎呀,这不行吧。。。)

2019年12月19日补充: 你懂得?我成功了。

在Liferay的配置中进行”服务访问策略”的设置后,可以通过GraphQL进行访问。以下是补充的步骤。

打开控制面板中的“服务访问政策”。

サービス・アクセス・ポリシー - コントロールパネル - Liferay.png

请在代理登录行的菜单中选择“编辑”。
将“代理登录”的“默认”更改为“否”→“是”。

代理ログイン - コントロールパネル - Liferay.png

请点击“保存”,然后再次从Postman获取令牌并尝试发送GraphQL查询。

Postman 2019_12_19 14_20_28.png

我能够获取到一篇列举了”这是一次测试”的博客文章!

我正在使用”代理登录”这个强大的权限,但是在正式网站上我们到底应该授予多少权限呢…?我想试试看!

无论如何,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”进行处理,因此拍下截图并进行裁剪等操作变得非常轻松。

获取模块或源代码的最快途径是通过 SourceForge 上的 Liferay Portal 或 Github 上的 Liferay Portal。
广告
将在 10 秒后关闭
bannerAds