외부다른서버 로그인화면에서 그누보드에 로그인하려면 어떻게 해야 하나요
본문
회원가입 및 mb_id/mb_password는 그누보드를 사용하고,
외부에서는 그누보드에 id와 password를 보내 등록 사용자인지 확인하려고 합니다.
그누보드에 어떻게 api를 설치해야 할까요.
포스트맨에서는 post 하고 어떻게 그누보드의 id와 password가 맞는지 확인할 수 있을까요.
bbs/login.php 나 bbs/logincheck.php 에 포스트맨이 포스트하면 로그인 성공 / 실패 결과를 받을 수 있을까요
답변 3
bbs/logincheck.php 는 외부로그인api로 성립되지않습니다.
하여, 별도의 외부에서 로그인할수있는 엔드포인트로 api로 만들어주시고 그리고 외부에서 호출을 하도록 해야할것입니다.
또한 api키관리를 위한 벡엔드가 설계되어야 하며, 그리고 이를 외부에서 사용용할 사용자에게 SECRET_KEY 발급을 해줘야하겠지요. 그리고 엔드포인트 api로 체크하여 로그인이되도록 할수가 있겟습니다.
이는 제작의뢰(개발)에 맞겨셔야 할것같네요
bbs/logincheck.php를 외부 로그인 API로 사용하기에는 적합하지 않습니다.
별도의 API 엔드포인트를 설계하고,
외부에서 호출 가능한 안전한 인증 시스템을 구현하셔야 합니다.
문헌을 정리하니, 아래와 같은 단계로 정리됩니다:
1. 새로운 API 엔드포인트 설계
- 별도의 파일(bbs/auth_login.php)을 생성하여 POST 요청을 처리합니다.
- 요청 데이터는 JSON 형식으로 전달합니다 (ID, 비밀번호 등).
*예시 - 아래는 auth_login.php에 들어갈 기본 PHP 코드
<?php
// 그누보드 공통 설정 파일 포함
include_once('./_common.php');
// 요청 메서드 확인
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405); // Method Not Allowed
echo json_encode(['error' => 'Invalid request method']);
exit;
}
// 요청 데이터 파싱
$data = json_decode(file_get_contents('php://input'), true);
$mb_id = isset($data['mb_id']) ? trim($data['mb_id']) : '';
$mb_password = isset($data['mb_password']) ? trim($data['mb_password']) : '';
// 입력값 검증
if (!$mb_id || !$mb_password) {
http_response_code(400); // Bad Request
echo json_encode(['error' => 'ID and password are required']);
exit;
}
// 데이터베이스에서 사용자 확인
$sql = "SELECT * FROM {$g5['member_table']} WHERE mb_id = '{$mb_id}'";
$member = sql_fetch($sql);
// 비밀번호 검증
if ($member && password_verify($mb_password, $member['mb_password'])) {
echo json_encode([
'success' => true,
'message' => 'Login successful',
'data' => [
'mb_id' => $member['mb_id'],
'mb_name' => $member['mb_name'],
'mb_email' => $member['mb_email']
]
]);
} else {
http_response_code(401); // Unauthorized
echo json_encode(['error' => 'Invalid ID or password']);
}
?>
2. API 키 관리 및 발급
- 사용자별 고유 API 키와 SECRET_KEY를 생성하고 관리합니다.
- API 호출 시, 헤더 또는 쿼리 파라미터에 API 키를 포함하도록 설계합니다.
3. 보안 강화
- 데이터는 반드시 HTTPS를 통해 암호화하여 전송합니다.
- 비밀번호는 `password_hash`와 `password_verify`를 사용해 처리합니다.
- 필요 시, 요청당 사용 가능한 일회용 토큰(예: JWT)을 추가합니다.
*lib 디렉토리에 API 키 검증을 위한 api_key.lib.php 파일 생성.
<?php
function is_valid_api_key($key) {
$valid_keys = ['your_predefined_api_key']; // 사전 정의된 API 키
return in_array($key, $valid_keys);
}
?>
*auth_login.php에 API 키 검증 로직 추가.
include_once('../lib/api_key.lib.php');
$api_key = $_SERVER['HTTP_API_KEY'] ?? '';
if (!is_valid_api_key($api_key)) {
http_response_code(403); // Forbidden
echo json_encode(['error' => 'Invalid API key']);
exit;
}
4. 응답 형식 정의
- 성공 시: 사용자 정보와 인증 상태를 포함한 JSON을 반환합니다.
- 실패 시: 오류 코드와 메시지를 포함한 JSON을 반환합니다.
성공 시:
{
"success": true,
"message": "Login successful",
"data": {
"mb_id": "example",
"mb_name": "홍길동",
"mb_email": "*** 개인정보보호를 위한 이메일주소 노출방지 ***"
}
}
실패 시:
{
"error": "Invalid ID or password"
}
5. 추가적인 확장 가능성
- OAuth2를 통해 외부 서비스와의 인증을 확장합니다.
- 외부 시스템에서 인증 후, 세션/토큰을 통해 지속적인 인증 상태를 유지합니다.
6. Postman이나 cURL로 다음과 같이 테스트:
- URL: "http://yourdomain.com/bbs/auth_login.php"
- Method: POST
- Headers:
*Content-Type: application/json
*API-Key: your_predefined_api_key
- Body:
{
"mb_id": "testuser",
"mb_password": "password123"
}
이 작업은 보안 강화, 확장성, API 표준화를 모두 충족해야 하고,
프로젝트의 요구 사항에 적합해야 하니,
보안과 기능 요구사항을 완벽히 만족시키기 위해서는
전문적인 백엔드 설계가 필요하며, 전문 개발자와 협업하시는 것을 권장드립니다.
!-->!-->!-->!-->!-->!-->가능합니다.
A 서버 : 회원정보가 있는 서버
B 서버 : A 서버에 회원정보가 있는지 채크할 서버.
A 서버에서 json 형태로 응답할수 있게 만드시고
B 서버에서 요청하시면 됩니다.
단순 B 서버에서 요청한 값이 A 서버에 등록되어있는지 채크 용도이며
양 서버의 로그인 등을 동기화하려면 DB 를 분리하는게 맞습니다.