我想用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放置在客户端是否危险?
答案 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服务,使其保持隐藏状态且无法访问。另外,您应该实现一种刷新令牌的机制。