47 lines
1.2 KiB
PHP
47 lines
1.2 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Controllers\Api\V1;
|
||
|
|
|
||
|
|
use App\Helpers\ApiResponse;
|
||
|
|
use App\Http\Controllers\Controller;
|
||
|
|
use App\Http\Requests\Internal\ExchangeTokenRequest;
|
||
|
|
use App\Services\InternalTokenService;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 내부 서버간 통신 컨트롤러
|
||
|
|
*
|
||
|
|
* MNG → API 서버간 인증 토큰 교환 등을 처리합니다.
|
||
|
|
*/
|
||
|
|
class InternalController extends Controller
|
||
|
|
{
|
||
|
|
public function __construct(
|
||
|
|
private InternalTokenService $tokenService
|
||
|
|
) {}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 토큰 교환
|
||
|
|
*
|
||
|
|
* MNG 서버에서 HMAC 서명된 페이로드로 API 토큰을 발급받습니다.
|
||
|
|
*/
|
||
|
|
public function exchangeToken(ExchangeTokenRequest $request)
|
||
|
|
{
|
||
|
|
$validated = $request->validated();
|
||
|
|
|
||
|
|
$result = $this->tokenService->exchange(
|
||
|
|
userId: $validated['user_id'],
|
||
|
|
tenantId: $validated['tenant_id'],
|
||
|
|
exp: $validated['exp'],
|
||
|
|
signature: $validated['signature']
|
||
|
|
);
|
||
|
|
|
||
|
|
if (! $result['success']) {
|
||
|
|
return ApiResponse::error($result['error'], 401);
|
||
|
|
}
|
||
|
|
|
||
|
|
return ApiResponse::success(
|
||
|
|
data: $result['data'],
|
||
|
|
message: __('message.internal.token_exchanged')
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|