私のモバイルアプリがクライアントになるので、 client_id と client_secret を生成しました。
モバイル アプリを使用するユーザーは、ユーザー名/パスワードを使用してログインする必要があります。
client_id と client_secret はどこに保存すればよいですか? それらを公開して、単にアプリにハードコードして配置しても問題ありませんか?
私のモバイルアプリがクライアントになるので、 client_id と client_secret を生成しました。
モバイル アプリを使用するユーザーは、ユーザー名/パスワードを使用してログインする必要があります。
client_id と client_secret はどこに保存すればよいですか? それらを公開して、単にアプリにハードコードして配置しても問題ありませんか?
それらをハードコーディングしてアプリに配置するだけでは、安全な方法ではありません。
実際にはそれほど単純ではありません。artisan またはビルド済みの Vue コンポーネントからクライアントを作成したと仮定します。どちらの場合でも、アプリの潜在的なセキュリティの脆弱性を公開することなく oauth2 API を安全に使用するには、さらに多くのことを行う必要があります。
モバイル ユーザーがモバイルから登録すると仮定すると、モバイル API からユーザーと oAuth2 クライアントを作成し、クライアント (モバイル アプリ) が消費できるように公開する必要があります。このためには、次のことを行う必要があります。
laravel パスポートをインストールした後、次の職人コマンドを実行します
php artisan migrate
これにより、oauth クライアント、そのトークン、およびその他の関連する重要な情報をデータベース レベルで格納するために必要なテーブルが作成されます。この後、client_id データ型を VARCHAR(255) に変更して、数値の client_id を保存する代わりに、ユーザー名を client_id として保存する必要があります。
モデルに移動し、oauth_clients テーブルのモデルを作成して、ユーザーの作成中にコードから実用的にクライアントを作成できるようにします。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class oAuthClient extends Model
{
protected $table = 'oauth_clients';
}
これにより、アプリに登録する際に oauth クライアントをデータベースに格納できるモデル クラスが作成されます。
Route::post('/register-user', function () {
$email= \Illuminate\Support\Facades\Input::get('email');
$password=\Illuminate\Support\Facades\Input::get('password');
$user = new \App\User(array(
'name' =>\Illuminate\Support\Facades\Input::get('name'),
'email' => \Illuminate\Support\Facades\Input::get('email'),
'password' => bcrypt(\Illuminate\Support\Facades\Input::get('password')),
));
$user->save();
$oauth_client=new \App\oAuthClient();
$oauth_client->user_id=$user->id;
$oauth_client->id=$email;
$oauth_client->name=$user->name;
$oauth_client->secret=base64_encode(hash_hmac('sha256',$password, 'secret', true));
$oauth_client->password_client=1;
$oauth_client->personal_access_client=0;
$oauth_client->redirect='';
$oauth_client->revoked=0;
$oauth_client->save();
return [
'message' => 'user successfully created.'
];
});
これにより、ユーザーテーブルと oauth_clients テーブルにエントリが生成され、laravel パスポートがユーザーのそれぞれの access_tokens を生成するために使用されます。アプリケーションで快適に使用できること。また、同じ手法を使用して、それぞれのクライアント/ユーザーのモバイル アプリで秘密鍵を生成します。
これで、laravel パスポートが提供する標準の POST API を使用して、次のパラメーターを使用して「oauth/token」を使用してパスワード付与を通じてアクセス トークンを要求できます。
grant_type : 'password'
client_id : '<email with which the user is registered>'
client_secret : '<generate the client secret from the mobile app>'
username : '<email with which the user is registered>'
password : '<password entered by the user>'
scope : '<leave empty as default>'
5.上記は、すべてが正しい場合、次のような応答を返します。
{
"token_type": "Bearer",
"expires_in": 3155673600,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjMwZmM0MDk1NWY5YjUwNDViOTUzNDlmZjc2M2ExNDUxOTAxZjc5YTA5YjE4OWM1MjEzOTJlZmNiMDgwOWQzMzQwM2ExZWI4ZmMyODQ1MTE3In0.eyJhdWQiOiJzaHVqYWhtQGdtYWlsLmNvbSIsImp0aSI6IjMwZmM0MDk1NWY5YjUwNDViOTUzNDlmZjc2M2ExNDUxOTAxZjc5YTA5YjE4OWM1MjEzOTJlZmNiMDgwOWQzMzQwM2ExZWI4ZmMyODQ1MTE3IiwiaWF0IjoxNDc4MTQ1NjMyLCJuYmYiOjE0NzgxNDU2MzIsImV4cCI6NDYzMzgxOTIzMiwic3ViIjoiMSIsInNjb3BlcyI6W119.dj3g9b2AdPCK-im5uab-01SP71S7AR96R0FQTKKoaZV7M5ID1pSXDlmZw96o5Bd_Xsy0nUqFsPNRQsLvYaOuHZsP8v9mOVirBXLIBvPcBc6lDRdNXvRidNqeh4JHhJu9a5VzNlJPm3joBYSco4wYzNHs2BPSxXuuD3o63nKRHhuUHB-HwjVxj2GDwzEYXdZmf2ZXOGRJ99DlWGDvWx8xQgMQtd1E9Xk_Rs6Iu8tycjBpKBaC24AKxMI6T8DpelnFmUbMcz-pRsgCWCF_hxv6FpXav3jr1CLhhT58_udBvXjQAXEbtHeB7W_oaMcaqezHdAeOWDcnqREZHsnXHtKt0JpymcTWBkS2cg7sJzy6P9mOGgQ8B4gb8wt44_kHTeWnokk4yPFRZojkHLVZb8YL6hZxLlzgV1jCHUxXoHNe1VKlHArdlV8LAts9pqARZkyBRfwQ8oiTL-2m16FQ_qGg-9vI0Suv7d6_W126afI3LxqDBi8AyqpQzZX1FWmuJLV0QiNM0nzTyokzz7w1ilJP2PxIeUzMRlVaJyA395zq2HjbFEenCkd7bAmTGrgEkyWM6XEq1P7qIC_Ne_pLNAV6DLXUpg9bUWEHhHPXIDYKHS-c3N9fPDt8UVvGI8n0rPMieTN92NsYZ_6OqLNpcm6TrhMNZ9eg5EC0IPySrrv62jE",
"refresh_token": "BbwRuDnVfm7tRQk7qSYByFbQKK+shYPDinYA9+q5c/ovIE1xETyWitvq6PU8AHnI5FWb06Nl2BVoBwCHCUmFaeRXQQgYY/i5vIDEQ/TJYFLVPRHDc7CKILF0kMakWKDk7wJdl5J6k5mN38th4pAAZOubiRoZ+2npLC7OSZd5Mq8LCBayzqtyy/QA5MY9ywCgb1PErzrGQhzB3mNhKj7U51ZnYT3nS5nCH7iJkCjaKvd/Hwsx2M6pXnpY45xlDVeTOjZxxaOF/e0+VT2FP2+TZMDRfrSMLBEkpbyX0M/VxunriRJPXTUvl3PW0sVOEa3J7+fbce0XWAKz7PNs3+hcdzD2Av2VHYF7/bJwcDCO77ky0G4JlHjqC0HnnGP2UWI5qR+tCSBga7+M1P3ESjcTCV6G6H+7f8SOSv9FECcJ8J5WUrU+EHrZ95bDtPc9scE4P3OEQaYchlC9GHk2ZoGo5oMJI6YACuRfbGQJNBjdjxvLIrAMrB6DNGDMbH6UZodkpZgQjGVuoCWgFEfLqegHbp34CjwL5ZFJGohV+E87KxedXE6aEseywyjmGLGZwAekjsjNwuxqD2QMb05sg9VkiUPMsvn45K9iCLS5clEKOTwkd+JuWw2IU80pA24aXN64RvOJX5VKMN6CPluJVLdjHeFL55SB7nlDjp15WhoMU1A="
}
これらのトークンは、クライアント アプリ (モバイル アプリ) から安全に使用できます。それが役に立てば幸い!。