我尝试在Laravel Passport上创建oauth2服务器并从第三方应用程序进行测试。 Oauth服务器使用Laravel,客户端使用Yii框架。我无法修改客户端前端,我创建了一个route / api / oauth / login,将请求转发给oauth服务器:
public function actionOauthLogin()
{
$query = http_build_query([
'client_id' => '12',
'client_secret' => '',
'redirect_uri' => 'http://client.loc/api/oauth/callback',
'response_type' => 'code',
'scope' => '',
]);
return $this->redirect('http://oauth-server.loc/oauth/authorize?' . $query);
}
此方法处理/ api / oauth /回调路由:
public function actionOauthCallback()
{
$http = new Client();
$response = $http->post('http://oauth-server.loc/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => '3',
'client_secret' => 'TJDyfygkuga45rtyfj8&65567Yhhgjjjj',
'redirect_uri' => 'http://client.loc/api/oauth/callback',
'code' => Yii::app()->request->getParamFromRequest('code'),
],
]);
return json_decode((string) $response->getBody(), true);
}
所有人都像在文档中那样实现了。但是当我打开/ api / oauth / login时,将重定向转发到oauth-server.loc / oauth / authorize?{params},我看到一个http基本的auth窗口。跆拳道? Nginx没有这样的设置。有人知道我做错了什么吗?请帮帮我。
答案 0 :(得分:1)
确保'redirect_uri' => 'http://client.loc/api/oauth/callback'
与oauth_clients
表中保存的匹配client_id
答案 1 :(得分:0)
我有同样的问题,在我的情况下,返回的参数告诉我,我的解析范围无效;一些OAuth2 API需要范围,这可能是这个问题所在。
解决方案是将应用程序允许的作用域数组添加到AuthServiceProvider引导方法中。
// ../app/Providers/AuthServiceProvider.php
// ...
public function boot()
{
$this->registerPolicies();
Passport::tokensCan([
'manage-devices' => 'Manage devices',
'place-orders' => 'Place orders',
'check-status' => 'Check order status',
]);
//..
答案 2 :(得分:0)
您需要为列设置0" personal_access_client"," password_client" in" oauth_clients"我们客户的表,并设置redirect_uri与请求相同。