8.5 KiB
“백엔드 로그상 비밀번호 변경은 성공했지만, 실제 로그인 기준으로는 비밀번호가 유효하지 않아서 실패”한 상황입니다.
1) 무엇이 ‘변경됐다고’ 확인된 건가
baron_backend | time="2026-01-26 18:15:46" level=INFO msg="Password updated successfully" svc=baron-sso req_id=2b192000-079d-42d1-937f-5d4bf82859f5 stage=complete op=UpdateUserPassword method=POST path=/api/v1/auth/password/reset/complete status=200 latency_ms=354.398409ms ip=172.22.0.6 user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36" origin=https://sso-test.hmac.kr referer="https://sso-test.hmac.kr/reset-password?loginId=b24053@hanmaceng.co.kr" query.loginId=b24053@hanmaceng.co.kr headers.Host=sso-test.hmac.kr headers.User-Agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36" headers.Cookie="DSRF=eyJhbGciOiJSUzI1NiIsImtpZCI6IlNLMzdEc0dtZXU2SWJUSHVuUXFJaUt6TmdSNEhEIiwidHlwIjoiSldUIn0.eyJhbXIiOlsiZW1haWwiXSwiYXVkIjpbIlAzN0RzR2VwQlQ2dURXYjVUWVlwYjVSeFVQdXEiXSwiZHJuIjoiRFNSIiwiZHYiOjEsImVtYWlsIjoiYjI0MDUzQGhhbm1hY2VuZy5jby5rciIsImV4cCI6MTc3MjAxMDg4NywiaWF0IjoxNzY5NDE4ODg3LCJpc3MiOiJodHRwczovL2FwaS5kZXNjb3BlLmNvbS92MS9hcHBzL1AzN0RzR2VwQlQ2dURXYjVUWVlwYjVSeFVQdXEiLCJzdWIiOiJVMzhtd3NwMUdDYVh2eENKWm4zWU9NWG1uOFJ5In0.BFsSc6tXC-6UHXc-6MJWIabs7CHRVY2oIER2IQUEn1jT0H5SZeXs5zcI5NZjA0ryGGd-JHNY4-x62ozDBRvoiL-xVygRh7HkHyunCq1-5-cf8arQ8k8jRARTl2cjDFj6WbyRgLY3x_ot_GpNK5ciGhhwBs1ajJo5IZhlmUi0soowatCTiE47JRvHqE4zGEdijIEw3h-SuaY_AmkJXIsmhaUkgzbo-pzviDX1YDIpA0-GuBcFavjq8IleonFOkRxMs47Cb9GfKZs-Ib5nEib4b3oWm50jGPA7UCRklEUg5ICClnwQe5I45RsLt_nAlUgH9pSmSglsjnyRBxX27lOYEw" headers.Origin=https://sso-test.hmac.kr headers.Referer="https://sso-test.hmac.kr/reset-password?loginId=b24053@hanmaceng.co.kr" headers.Request-Cookie-Header="DSRF=eyJhbGciOiJSUzI1NiIsImtpZCI6IlNLMzdEc0dtZXU2SWJUSHVuUXFJaUt6TmdSNEhEIiwidHlwIjoiSldUIn0.eyJhbXIiOlsiZW1haWwiXSwiYXVkIjpbIlAzN0RzR2VwQlQ2dURXYjVUWVlwYjVSeFVQdXEiXSwiZHJuIjoiRFNSIiwiZHYiOjEsImVtYWlsIjoiYjI0MDUzQGhhbm1hY2VuZy5jby5rciIsImV4cCI6MTc3MjAxMDg4NywiaWF0IjoxNzY5NDE4ODg3LCJpc3MiOiJodHRwczovL2FwaS5kZXNjb3BlLmNvbS92MS9hcHBzL1AzN0RzR2VwQlQ2dURXYjVUWVlwYjVSeFVQdXEiLCJzdWIiOiJVMzhtd3NwMUdDYVh2eENKWm4zWU9NWG1uOFJ5In0.BFsSc6tXC-6UHXc-6MJWIabs7CHRVY2oIER2IQUEn1jT0H5SZeXs5zcI5NZjA0ryGGd-JHNY4-x62ozDBRvoiL-xVygRh7HkHyunCq1-5-cf8arQ8k8jRARTl2cjDFj6WbyRgLY3x_ot_GpNK5ciGhhwBs1ajJo5IZhlmUi0soowatCTiE47JRvHqE4zGEdijIEw3h-SuaY_AmkJXIsmhaUkgzbo-pzviDX1YDIpA0-GuBcFavjq8IleonFOkRxMs47Cb9GfKZs-Ib5nEib4b3oWm50jGPA7UCRklEUg5ICClnwQe5I45RsLt_nAlUgH9pSmSglsjnyRBxX27lOYEw" login_ids.loginId=b24053@hanmaceng.co.kr has_cookie_DSRF=true parsed_cookie_DSRF=eyJhbGciOiJSUzI1NiIsImtpZCI6IlNLMzdEc0dtZXU2SWJUSHVuUXFJaUt6TmdSNEhEIiwidHlwIjoiSldUIn0.eyJhbXIiOlsiZW1haWwiXSwiYXVkIjpbIlAzN0RzR2VwQlQ2dURXYjVUWVlwYjVSeFVQdXEiXSwiZHJuIjoiRFNSIiwiZHYiOjEsImVtYWlsIjoiYjI0MDUzQGhhbm1hY2VuZy5jby5rciIsImV4cCI6MTc3MjAxMDg4NywiaWF0IjoxNzY5NDE4ODg3LCJpc3MiOiJodHRwczovL2FwaS5kZXNjb3BlLmNvbS92MS9hcHBzL1AzN0RzR2VwQlQ2dURXYjVUWVlwYjVSeFVQdXEiLCJzdWIiOiJVMzhtd3NwMUdDYVh2eENKWm4zWU9NWG1uOFJ5In0.BFsSc6tXC-6UHXc-6MJWIabs7CHRVY2oIER2IQUEn1jT0H5SZeXs5zcI5NZjA0ryGGd-JHNY4-x62ozDBRvoiL-xVygRh7HkHyunCq1-5-cf8arQ8k8jRARTl2cjDFj6WbyRgLY3x_ot_GpNK5ciGhhwBs1ajJo5IZhlmUi0soowatCTiE47JRvHqE4zGEdijIEw3h-SuaY_AmkJXIsmhaUkgzbo-pzviDX1YDIpA0-GuBcFavjq8IleonFOkRxMs47Cb9GfKZs-Ib5nEib4b3oWm50jGPA7UCRklEUg5ICClnwQe5I45RsLt_nAlUgH9pSmSglsjnyRBxX27lOYEw request_body="{\"newPassword\": \"Qwer1234!\"}" new_password=Qwer1234!
/api/v1/auth/password/reset/complete요청에서 백엔드는 200 OK를 반환했고,- 로그에 **
Password updated successfully**가 찍혔습니다. → 즉, 백엔드가 호출한 Descope Management APISetPassword호출은 성공 응답을 받았습니다.
2) 그런데 ‘실제 로그인’은 왜 안 되나
curl -i -X POST "https://api.descope.com/v1/auth/password/signin" \
-H "Content-Type: application/json" \
-d '{
"loginId": "b24053@hanmaceng.co.kr",
"password": "Qwer1234!"
}'
HTTP/2 401
date: Mon, 26 Jan 2026 09:17:59 GMT
content-type: application/json; charset=utf-8
content-length: 84
strict-transport-security: max-age=15552000; preload
set-cookie: __cf_bm=H4GLgDwOP7ZC5X9UDv0amcDO9wH05gTGF6q0DjGXVw0-1769419079.2081797-1.0.1.1-IOtGl.B4mqd8Vwrx0GU20r2mrBJl45rqvQlWBEgvjRWHVHm6aFom4AcGg1grkOzgGWHd.r5Vc0Vpma0SLiHPhILesFU3JP0Vssb0FgFJv.RTJxIj0F70BpjftUC55gLR; HttpOnly; Secure; Path=/; Domain=descope.com; Expires=Mon, 26 Jan 2026 09:47:59 GMT
set-cookie: _cfuvid=Xv3NTdvkt0.kLQzA1Eca.ACTqj9CHVUq_oV7OPgJ7vo-1769419079.2081797-1.0.1.1-kaT.TuPWN0IWj2kmQvzB7TwvQ521A7z5zrls_QtNwEY; HttpOnly; SameSite=None; Secure; Path=/; Domain=api.descope.com
x-xss-protection: 1; mode=block
cf-cache-status: DYNAMIC
x-content-type-options: nosniff
expect-ct: max-age=86400, enforce
referrer-policy: same-origin
x-frame-options: SAMEORIGIN
server: cloudflare
cf-ray: 9c3eeb9d0830ea25-ICN
alt-svc: h3=":443"; ma=86400
{"errorCode":"E011007","errorDescription":"Request is missing a valid bearer token"}%
실제 로그인을 확인하려고 POST /v1/auth/password/signin을 호출했는데, Descope가 아래로 거절했습니다.
- 응답: 401
- 에러:
E011007 Request is missing a valid bearer token
이건 “비밀번호가 틀림”이 아니라, signin 요청 자체가 프로젝트 인증(Authorization)이 빠져서 Descope가 처리하지 않은 겁니다. 즉, 현재 테스트 curl은 “비밀번호 검증” 단계까지 가지도 못했습니다.
3) 그래서 결론은?
- “비밀번호 변경 성공”은 Management API 기준으로는 맞음
- 하지만 “실제로 로그인 가능 여부”는
- signin 요청에 **Authorization: Bearer <프로젝트 토큰>**을 붙여서 다시 검증해야 하고,
- 그 다음에야 비밀번호가 Auth API와 호환되는 방식으로 설정됐는지(
Invalid credentials여부)를 판별할 수 있습니다.
4) 실제로 안 된 ‘직접 원인’
- 원인:
password/signin테스트 요청에 프로젝트 Bearer 토큰이 없어서 Descope가 401로 차단 - 결과: “비밀번호가 맞는지/틀린지”를 확인하기 전에 요청이 실패해서, 로그인 실패처럼 보임
5) 다음에 해야 할 검증(한 줄)
POST /v1/auth/password/signin에Authorization: Bearer P37Ds...헤더를 붙여서 다시 시도해야 “진짜로 비밀번호가 로그인에 적용됐는지”가 확정됩니다.
네, 김용연님
이 응답은 “비밀번호가 틀렸다”가 아니라, 그 프로젝트가 password/signin 호출에 ‘프로젝트 Bearer 토큰(또는 프로젝트 ID)’을 요구하는 설정/테넌트 컨텍스트라서 생긴 에러입니다.
즉 지금 요청은 인증 헤더가 없어서 Descope가 바로 컷한 거예요.
왜 signin에 Bearer 토큰이 필요하냐?
Descope Auth API는 보통 프로젝트를 식별해야 하는데, 환경/설정에 따라
- 헤더로 프로젝트 토큰을 받거나
- 바디에 projectId를 받거나
- SDK가 내부적으로 붙여주거나
- 테넌트/앱 설정에 따라 인증 요구가 달라질 수 있습니다.
지금은 **“헤더에 유효한 Bearer가 없다”**고 명시적으로 말하고 있습니다.
해결: Authorization 헤더에 프로젝트 토큰을 붙여서 호출
김용연님이 예전에 signup에 쓰셨던 것처럼(= Authorization: Bearer P37Ds...) 먼저 시도해보세요.
curl -i -X POST "https://api.descope.com/v1/auth/password/signin" \
-H "Authorization: Bearer P37DsGepBT6uDWb5TYYpb5RxUPuq" \
-H "Content-Type: application/json" \
-d '{
"loginId": "b24053@hanmaceng.co.kr",
"password": "Qwer1234!"
}'
- 여기서 200 OK면 → 로그인 성공(비번도 Auth API 기준으로 인정)
- 여기서
E062903 Invalid credentials면 → “비번이 Auth와 호환 안 됨” 이슈 재현 - 여기서도 401이면 → 프로젝트/테넌트 설정(또는 endpoint 요구사항) 추가 확인 필요
추가로, tenant를 쓰는 경우
만약 이 프로젝트가 tenant 기반이면 signin에 tenant를 같이 넘겨야 하는 설정일 수도 있습니다. 그 경우는 보통:
{
"loginId": "...",
"password": "...",
"tenant": "namecard"
}
같은 형태로 요구될 수 있어요(프로젝트 설정에 따라 다름).
결론
지금 에러는 “로그인 실패”가 아니라 “요청에 프로젝트 인증이 빠졌다” 입니다.
위 curl에 Authorization: Bearer <PROJECT_ID>를 붙여서 다시 한번만 테스트해보세요.