안녕하세요!
새로운 주제를 생성하기 위해 API 호출을 시도하고 있습니다. Discourse API Docs
Postman을 사용하여 헤더에 API 키 / 사용자 이름 / Content-Type을 보내고, 본문에는 JSON 데이터를 전송하고 있습니다.
API 사용자 이름과 키가 정확한지 확인했지만, API 호출 시 로그인 페이지의 HTML이 반환됩니다.
이것이 정상적인가요? 어떻게 우회할 수 있을까요?
안녕하세요!
새로운 주제를 생성하기 위해 API 호출을 시도하고 있습니다. Discourse API Docs
Postman을 사용하여 헤더에 API 키 / 사용자 이름 / Content-Type을 보내고, 본문에는 JSON 데이터를 전송하고 있습니다.
API 사용자 이름과 키가 정확한지 확인했지만, API 호출 시 로그인 페이지의 HTML이 반환됩니다.
이것이 정상적인가요? 어떻게 우회할 수 있을까요?
실제로 시도 중인 API 호출의 cURL 버전을 붙여넣어 주시겠습니까?
네…
curl -X POST 'https://staging-discuss.newrelic.com/posts.json' \
-H 'Api-Username: RyanVeitch' -i \
-H 'Api-Key: My-API-Key' -i \
-H 'Content-Type: application/json' \
-d \
'{
"title": "My fancy title",
"raw": "Some random text to fill my topic",
"category": 212,
"created_at": "2020-06-22"
}'
터미널에서는 다음과 같은 출력을 얻습니다:
HTTP/1.1 307 Temporary Redirect
Proxied-By: Service Gateway
Strict-Transport-Security: max-age=31536000; includeSubDomains
Location: https://staging-login.newrelic.com/login?return_to=https%3A%2F%2Fstaging-discuss.newrelic.com%2Fposts.json
content-type: text/plain;charset=UTF-8
content-length: 138
Redirecting to a different URI: https://staging-login.newrelic.com/login?return_to=https%3A%2F%2Fstaging-discuss.newrelic.com%2Fposts.json%
문제 해결을 위해 제가 추가로 도와드릴 것이 있으면 말씀해 주세요 ![]()
중간에 프록시를 사용한 매우 특별한 설정을 하고 있는 것 같습니다.
이는 표준 Discourse 동작이 아니므로, 이 문제는 사용자님의 특수한 프록시 설정으로 인해 발생하는 것으로 보입니다.
프록시를 우회하기 위해 보낼 수 있는 특별한 헤더가 있는지 해당 제품 문서를 확인해 보시는 것이 좋습니다.
좋아요! @Falco님 감사합니다 - 개발 팀과 함께 자세히 살펴보겠습니다 ![]()
Hey @Falco - 프록시를 통과하긴 했는데, 이제 403 BAD CSRF 오류가 발생하고 있어요.
이 스레드가 아직 마무리되지 않은 것 같은데…
이 오류를 해결하는 방법에 대해 어떤 생각이 있으신가요?
방금 로컬에서 예제 curl 명령어를 테스트해 보았는데 제 환경에서는 정상적으로 작동하고 있으므로 구문은 모두 올바른 상태입니다. 프록시가 일부 헤더를 제거하고 있는 것은 아닌지요? 그렇게 되면 API 자격 증명을 더 이상 읽거나 액세스할 수 없기 때문에 BAD CSRF 오류가 발생하는 원인이 될 수 있습니다.
@blake 감사합니다
우리의 프록시는 완전히 자체 개발한 것이며, 대외적인 프론트 레이어 역할을 합니다.
저는 VPN을 통해 내부 네트워크에 접속해 있으며, 공개 URL이 아니라 프록시 뒤의 백엔드 URL을 직접 호출하고 있습니다. 따라서 요청이 프록시를 거치지 않아야 합니다.
스테이징 디스커스 인스턴스는 v 2.3.10 버전입니다.
해당 버전에서 API 동작이 다른가요?
아니요, v2.3.10에는 여전히 헤더 기반 인증 관련 기능이 포함되어 있으므로 동작 방식이 달라질 리가 없습니다.
현재 이 줄에 도달하고 있습니다:
즉, 요청이 어떤 방식으로든 잘못 형성되어 있어 API 요청임을 감지하지 못하고 있다는 뜻입니다.
이것은 로컬이 아닌 스테이징 인스턴스이므로, 요청이 Discourse에 도달하기 전에 nginx 또는 다른 웹 서버가 실행 중입니다. 설정에 따라 nginx가 일부 헤더를 제거할 수 있습니다. 이러한 문제는 nginx 로그에 표시될 수 있습니다.
이 행은 요청 헤더에서 API 자격 증명을 읽는 부분입니다. 헤더가 여기까지 전달되는지 확인하려면 이 파일에 디버그 문장을 추가할 수도 있습니다.