将client_secret放在客户端有危险吗?

时间:2019-03-05 20:51:05

标签: laravel vue.js laravel-passport

我想用laravel,passport和vue js创建一个身份验证系统。哪个是最好的选择

1-laravel

public function login(Request $request)
{
$http = new GuzzleHttp\Client;
$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => $request->username,
        'password' => $request->password,
        'scope' => '',
    ],
]);

return json_decode((string) $response->getBody(), true);
}

1-vuejs

    axios.post('/login', {
                    'username': 'xxxxxx',
                    'password':'xxxxxxxxx'
                })
                    .then(response => {
                 //login
                    }).catch(error => {
                   //error
                })

2-vuejs

    axios.post('/oauth/token', {
                    'username': 'xxxxxx',
                    'password':'xxxxxxxxx',
                    'grant_type' => 'password',
                     'client_id' => 'client-id',
                     'client_secret' => 'client-secret',

                })
                    .then(response => {
                 //login
                    }).catch(error => {
                   //error
                })

在解决方案2中,将client_secret放置在客户端是否危险?

4 个答案:

答案 0 :(得分:0)

一点也不。将其保存在.env文件中,并确保将其放入.gitignore

答案 1 :(得分:0)

我希望使用解决方案1。在解决方案2中,每个人都可以读取client_secret并假装自己是客户端。

答案 2 :(得分:0)

我建议选择3:using passports built in JS authentication

您使用Laravel随附的标准身份验证流进行身份验证。然后在服务VueJS的路由上添加\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class中间件。确保您的axios默认配置为包括CSRF令牌。如果您使用laravel随附的app.js,那么已经为您完成了。然后,您可以照常发出axios请求。 (确保包含CSRF令牌。Th。

答案 3 :(得分:0)

我建议您使用解决方案1。它可以保护OAuth服务,使其保持隐藏状态且无法访问。另外,您应该实现一种刷新令牌的机制。