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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
외부다른서버 로그인화면에서 그누보드에 로그인하려면 어떻게 해야 하나요

QA

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

답변 3

본문

회원가입 및 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 를 분리하는게 맞습니다.

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