외부다른서버 로그인화면에서 그누보드에 로그인하려면 어떻게 해야 하나요

외부다른서버 로그인화면에서 그누보드에 로그인하려면 어떻게 해야 하나요

QA

외부다른서버 로그인화면에서 그누보드에 로그인하려면 어떻게 해야 하나요

답변 3

본문

회원가입 및 mb_id/mb_password는 그누보드를 사용하고, 

외부에서는 그누보드에 id와 password를 보내 등록 사용자인지 확인하려고 합니다. 

그누보드에 어떻게 api를 설치해야 할까요. 

 

포스트맨에서는 post 하고 어떻게 그누보드의 id와 password가 맞는지 확인할 수 있을까요. 

bbs/login.php 나 bbs/logincheck.php 에 포스트맨이 포스트하면 로그인 성공 / 실패 결과를 받을 수 있을까요

이 질문에 댓글 쓰기 :

답변 3

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 표준화를 모두 충족해야 하고,

프로젝트의 요구 사항에 적합해야 하니,

보안과 기능 요구사항을 완벽히 만족시키기 위해서는

전문적인 백엔드 설계가 필요하며, 전문 개발자와 협업하시는 것을 권장드립니다.

bbs/logincheck.php 는 외부로그인api로 성립되지않습니다.

하여, 별도의 외부에서 로그인할수있는 엔드포인트로 api로 만들어주시고 그리고 외부에서 호출을 하도록 해야할것입니다.

또한 api키관리를 위한 벡엔드가 설계되어야 하며, 그리고 이를 외부에서 사용용할 사용자에게  SECRET_KEY 발급을 해줘야하겠지요. 그리고 엔드포인트 api로 체크하여 로그인이되도록 할수가 있겟습니다.

이는 제작의뢰(개발)에 맞겨셔야 할것같네요

가능합니다.

 

A 서버 : 회원정보가 있는 서버
B 서버 : A 서버에 회원정보가 있는지 채크할 서버.

 

A 서버에서 json 형태로 응답할수 있게 만드시고

B 서버에서 요청하시면 됩니다.

 

단순 B 서버에서 요청한 값이 A 서버에 등록되어있는지 채크 용도이며

양 서버의 로그인 등을 동기화하려면 DB 를 분리하는게 맞습니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 22
© SIRSOFT
현재 페이지 제일 처음으로