标签: laravel-passport

在laravel passport客户端应用程序中使用访问令牌获取用户数据

我已经使用Laravel Passport文档成功创建了server.appclient.app.一切都按预期工作.

client.app路由:

Route::get('callback', function (Request $request) {
   $http = new GuzzleHttp\Client;
   $response = $http->post('http://server.app/oauth/token', [
    'form_params' => [
        'grant_type' => 'authorization_code',
        'client_id' => 3,
        'client_secret' => 'secret',
        'redirect_uri' => 'http://client.app/callback',
        'code' => $request->code
    ]
   ]);
   return json_decode((string) $response->getBody(), true)['access_token'];
});
Run Code Online (Sandbox Code Playgroud)

默认情况下,此路由返回access_token,我可以使用它来执行任何操作.

请求:

http://server.app/oauth/authorize?client_id=3&redirect_uri=http%3A%2F%2Fclient.app%2Fcallback&response_type=code&scope=
Run Code Online (Sandbox Code Playgroud)

返回:

http://client.app/callback?code=access_token
Run Code Online (Sandbox Code Playgroud)

题:

如何使用client.app中给定的access_token 向server.app发出正确的请求以获取用户的电子邮件(s).

我应该使用: http://server.app/api/user请求获取数据?如果是的话,我怎么能这样做?如果可能,请写一个代码.

谢谢你的回答.

php json access-token laravel laravel-passport

17
推荐指数
3
解决办法
5万
查看次数

Laravel chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作

更新了以下软件包后,出现了无法找到oauth-public.key文件的错误.

包装操作:1次安装,2次更新,0次删除

更新laravel/framework(v5.4.27 => v5.4.28):正在下载(100%)
安装defuse/php-encryption(v2.1.0):正在下载(100%)
正在更新league/oauth2-server(5.1.3 => 5.1) .4):下载(100%)

首先,我删除了项目/存储中的两个oauth文件,然后执行了这个命令:php artisan passport:install以生成新的oauth文件.

现在,在尝试访问api路由时出现以下错误.

(1/1)ErrorException chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作

堆栈跟踪

在CryptKey.php中(第51行)

at HandleExceptions-> handleError(2,'chmod(/var/dev/project/storage/oauth-public.key):操作失败:操作不被允许','/ var/dev/project/vendor/league/oauth2-server /src/CryptKey.php',51,array('keyPath'=>'file:///var/dev/project/storage/oauth-public.key','passPhrase'=> null,'keyPathPerms'=> '644'))

at chmod('file:///var/dev/project/storage/oauth-public.key',384)在CryptKey.php(第51行)

在ResourceServer.php中的CryptKey-> __construct('file:///var/dev/project/storage/oauth-public.key')(第50行)

文件权限

-rw-r--r-- user:user oauth-private.key
-rw-r--r-- user:user oauth-public.key
Run Code Online (Sandbox Code Playgroud)

更新1

我发现oauth Libaray引入了一个安全修复程序.Oauth V5安全改进

版本5.1.4是与其他5.1.x版本的向后兼容版本.

您将在服务器日志中注意到如下消息:

您必须设置加密密钥以提高此库的安全性 - 有关详细信息,参阅此页面https://oauth2.thephpleague.com/v5-security-improvements/

要在实例化\ League\OAuth2\Server\AuthorizationServer实例后暂停此通知,您应该调用setEncryptionKey()方法传入至少32个字节的随机数据.

您可以使用base64_encode(random_bytes(32))生成它.或者,如果你使用的是Laravel这样的框架,它已经生成了加密密钥,你可以传入(在Laravel的情况下使用env('APP_KEY')).

问题是Laravel Passport的维护者必须解决这个问题.

更新2

删除供应商文件夹并再次执行composer安装后,我仍然遇到同样的错误.

php permissions oauth laravel-5 laravel-passport

17
推荐指数
5
解决办法
8050
查看次数

Auth Guard [:api] 未定义?

当我使用auth:apiGuard 进行注销路由时,我遇到以下异常:

Auth Guard [:api] 未定义

我已经实现了注册/登录 API,但我在使用注销 API 时遇到了此错误,我已使用auth::api.

config/auth.php:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],
Run Code Online (Sandbox Code Playgroud)

routes/api.php:

Route::group(['prefix' => 'auth'], function () {
    Route::post('login','AuthController@login');
    Route::post('signup','AuthController@signup');

    Route::group(['middleware' => 'auth::api'], function () {
        Route::get('logout','AuthController@logout');
        Route::get('user','AuthController@user');
    });
});
Run Code Online (Sandbox Code Playgroud)

我应该能够注销用户。

php api laravel laravel-passport

17
推荐指数
2
解决办法
3万
查看次数

Laravel Passport - 不支持授权类型

我根据文档安装了Laravel Passport,并且修改了所需的代码的所有区域.

我正在设置密码授予令牌,以便用户在使用他们的站点用户名和密码登录时能够获得API令牌.当涉及到grant_type时,我遇到了一个问题.出于某种原因,Laravel抱怨无效的授权类型.

{
  "error": "unsupported_grant_type",
  "message": "The authorization grant type is not supported by the authorization server.",
  "hint": "Check the `grant_type` parameter"
}
Run Code Online (Sandbox Code Playgroud)

这些是我要发布的字段 /oauth/token

client_id = 4
client_secret = SMiYE7XqDNtXKQnmkYmFnXxfAaV83vRhnJ9zwCtZ
username = jcrawford@domain.com
password = **************
grant_type = password
scope = *
Run Code Online (Sandbox Code Playgroud)

我跑了php artisan passport:install,我也跑了php artisan passport:client --password

这两个命令都有效,并且都创建了客户端和机密,但是,我似乎无法通过grant_type的错误.

关于我应该怎样看待解决的任何建议,以便密码授予令牌对我有用?

laravel-5.3 laravel-passport

16
推荐指数
2
解决办法
2万
查看次数

自定义令牌响应Laravel Passport

我目前正在开发一个API并且已经打了一堵砖墙.我正在使用带有"密码"授权类型的Passport.

我想用访问令牌返回用户信息,但是,我不知道如何.

我可以实现,编辑或扩展哪个类来获取它?

我想要退回:

{
    "token_type": "Bearer",
    "expires_in": 31536000,
    "access_token": "lalalalalal",
    "refresh_token": "lalalallala",
    "user": {
        "username": "a username",
        "user_type": "admin"
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

oauth-2.0 laravel laravel-passport

16
推荐指数
3
解决办法
8688
查看次数

使用Laravel Passport注册用户

我设置了密码授权(它是应用程序的后端).现在,我可以发送一个帖子请求oauth/token,它适用于邮递员.但是,如果我也想从api注册用户怎么办?

我知道我可以使用当前/register路由,但是,我是否需要将用户重定向回登录页面并使用他的凭据再次登录?

或者在RegisterController中,在registered()函数中,我应该重定向到oauth/token路由吗?(为此,请注意我发送的所有5个数据都在'x-www-form-urlencoded'中,它似乎有效.但是,我是否需要在标题中分开一些?这对我来说很模糊,所以只是想要当我有机会时问.)

或者我应该oauth/token这个人一样在方法中添加一些东西?实际上,我试图捕获库中方法的发布$request数据AccessTokenController@issueToken,但是我无法弄清楚如何操作parsedBody数组.如果我从实际库中触发我的寄存器功能,我怎么知道它是注册还是登录?

也许我错过了一些信息,但根据这个主题我找不到任何东西.在Passport中处理注册用户的正确方法是什么?


更新:接受的答案显示'注册'周期; 在它下面我添加了'login'和'refresh token'实现.希望能帮助到你 :)

php oauth laravel laravel-passport laravel-5.4

16
推荐指数
2
解决办法
1万
查看次数

Laravel 5.3 Passport Custom Grants?

我知道我不是唯一一个达到这一点的人.有谁知道如何在Laravel(5.3)护照中正确实施自定义补助金?

要么

有一个很好的链接/教程,以参考如何正确地做到这一点?

我知道有这个包裹:

https://github.com/mikemclin/passport-custom-request-grant

但我要求更多"自己动手"的做法.

先感谢您.

laravel laravel-5 laravel-5.2 laravel-5.3 laravel-passport

15
推荐指数
2
解决办法
2655
查看次数

Laravel Passport Route重定向到登录页面

我正在使用Laravel 5.3和Passport.

当使用Postman测试我在api.php文件中设置的任何路由时,它总是返回登录页面.这是我测试路线的一个例子:

Route::get('/getKey', function() {
    return 'hello';
})->middleware('client_credentials');
Run Code Online (Sandbox Code Playgroud)

邮差:

Accept application/json
Authorization Bearer <then my key>
Run Code Online (Sandbox Code Playgroud)

我在寻找答案的过程中找到了另一个解决方案,将中间件设置为'auth:api'.

protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('auth:api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试过几乎所有适用于其他人的解决方案,但仍然没有运气.任何建议将不胜感激.

更新所以我终于得到了一些工作.我创建了一个消费者应用程序并创建了一些测试功能.通过验证令牌,我能够使用api.但是,点击此路线不再返回我的登录页面,而是现在不返回任何内容.因此无论出于何种原因,它仍无法正常工

Route::get('/user', function (Request $request) {

    return $request->user();
})->middleware('client_credentials');
Run Code Online (Sandbox Code Playgroud)

php laravel-5.3 laravel-passport

15
推荐指数
4
解决办法
2万
查看次数

访问令牌:撤销与删除

我正在创建一个路由/user/logout使用dusterio/lumen-passport和在控制器操作中我手动撤销令牌,导致用户被注销.

我有两个注销用户的选项.撤消令牌(将令牌保留在数据库中 - 只需设置一个标志,告知令牌无用)并删除令牌.

我的问题很简单:

管理令牌的最佳方法是什么?我应该通过删除或撤销来退出吗?

将来,我将使用redis存储令牌,所以我想我应该删除令牌,因为在redis服务器中保留过期数据是没有意义的.

security oauth-2.0 laravel lumen laravel-passport

15
推荐指数
1
解决办法
1727
查看次数

如何使用Laravel Passport和密码授予令牌?

我刚刚阅读了https://laravel.com/docs/5.6/passport文档,我有些疑惑,希望有人可以帮助我:

首先,在某些上下文中,我想使用Passport作为为我的移动应用程序(第一方应用程序)提供Oauth身份验证的方法.

  1. 当我使用时,php artisan passport:client --password我会找回客户端ID和客户端密钥.这个值是否必须在我的应用上修复?例如,将它们存储为硬编码或"设置"文件?如果不应存储这些值,那么它应该如何工作?

  2. 要将用户注册到我的应用程序,我使用:$user->createToken('The-App')->accessToken;我得到的是accessToken将用于发送我的所有请求作为标题(Authorization => Bearer $ accessToken),但究竟什么是"The-App"值?

  3. 要登录我正在使用网址的用户:http://example.com/oauth/token并作为参数发送:

    {"username":"user@email.com","password":"userpassword","grant_type":"password","client_id":1,//我从命令获得的客户端ID(问题1) "client_secret":"嘘"//我从命令得到的客户端秘密(问题1)}

  4. 当我使用前一个端点登录用户时,我得到了一个refresh_token,我读到我可以通过http://example.com/oauth/token/refresh刷新令牌,但我尝试请求刷新我得到错误419,我从csrf验证中删除了url oauth/token/refresh,现在我回来了"message": "Unauthenticated.",我正在提出以下请求:

    Content-Type:x-www-form-urlencoded grant_type:refresh_token refresh_token:-refresh-token //我从命令获得的刷新令牌(问题3)client_id:1 //我从命令获得的客户端ID (问题1)client_secret:嘘//我从命令(问题1)范围得到的客户端秘密:''

我应该使用这个端点吗?鉴于我正在努力开发的应用程序,或者没有必要.

  1. 最后,有很多终点,我从护照,我不认为我会如使用得到的:oauth/clients*,oauth/personal-access-tokens*是有办法从护照公布的端点删除它们?

非常感谢你的帮助!

php oauth laravel laravel-passport

15
推荐指数
2
解决办法
7322
查看次数