1
0
forked from baron/baron-sso
Files
baron-sso/ISSUE2.md

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 API SetPassword 호출은 성공 응답을 받았습니다.

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 기준으로는 맞음
  • 하지만 “실제로 로그인 가능 여부”는
    1. signin 요청에 **Authorization: Bearer <프로젝트 토큰>**을 붙여서 다시 검증해야 하고,
    2. 그 다음에야 비밀번호가 Auth API와 호환되는 방식으로 설정됐는지(Invalid credentials 여부)를 판별할 수 있습니다.

4) 실제로 안 된 ‘직접 원인’

  • 원인: password/signin 테스트 요청에 프로젝트 Bearer 토큰이 없어서 Descope가 401로 차단
  • 결과: “비밀번호가 맞는지/틀린지”를 확인하기 전에 요청이 실패해서, 로그인 실패처럼 보임

5) 다음에 해야 할 검증(한 줄)

  • POST /v1/auth/password/signinAuthorization: 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>를 붙여서 다시 한번만 테스트해보세요.