【发布时间】:2022-08-24 01:42:05
【问题描述】:
我正在尝试使用 guzzle 连接到 oauth2 系统,但我不断收到此消息:
$guzzle = new GuzzleHttp\\Client;
$response = $guzzle->post(\'https://logincert.anaf.ro/anaf-oauth2/v1/authorize\', [
\'form_params\' => [
\'grant_type\' => \'authorization_code\',
\'response_type\' => \'token\',
\'client_id\' => \'xxxx\',
\'client_secret\' => \'xxxxx\',
\'redirect_uri\' => \'http://redirect\'
],
]);
return json_decode((string) $response->getBody(), true)[\'access_token\'];
{
\"error\":\"invalid_client\",
\"error_description\":\"The client app does not support implicit grant\"
}
提供者没有提供太多关于返回消息的信息,他们提供的唯一信息是:
- 类型:OAuth 2.0
- 将授权数据添加到:请求标头
- 授权类型:授权码
- 回调网址:http://redirect
- 授权端点:https://logincert.anaf.ro/anaf-oauth2/v1/authorize
- 令牌端点:https://logincert.anaf.ro/anaf-oauth2/v1/token
- 令牌撤销端点:https://logincert.anaf.ro/anaf-oauth2/v1/revoke
- 客户端 ID:xxx
- 客户端密码:xxx
- 客户端身份验证类型:作为基本身份验证标头发送
任何想法我做错了什么?
谢谢, 克里斯
-
看来您并不真正了解 OAuth2 的工作原理。有关说明,请参阅this。
-
没错,我对 oauth 系统没有任何经验。我查看了链接中的信息,我注意到用户必须请求授权然后请求令牌,但是在提供者网站上发布的数据中,我没有看到任何参考和此登录的范围是能够访问 api 并在没有用户干预的情况下执行操作。如果您能提供有关如何执行此操作的更多有用信息,我们将不胜感激。谢谢
-
实际上,您必须将用户发送到授权页面(由您的“授权端点”构建),并且他们必须同意。之后,您将获得授权码,用于交换访问令牌和可能的刷新令牌。访问令牌是短暂的,但刷新令牌不是(您可以存储它)。只要刷新令牌有效,您就可以使用它来获取新的访问令牌。当刷新令牌过期时,您必须再次将用户发送到授权页面。有关详细信息,请参阅this。
-
是的,我创建了一个 php 页面,当从安装了令牌的 PC 访问时,该页面将 client_id、client_secret 和 callbak_url 发送到授权页面。用户通过输入令牌 PIN 来获得他的许可,然后他被重定向到 callback_url 并获得一个新的代码参数,该参数可用于获取令牌。
-
另一件事,而不是遵循他们糟糕的文档,搜索有关 php oauth 实现的信息,您将获得更好的质量信息。