keenauth test login으로 테스트 사용자 로그인하기

keenauth test login은 development 환경의 테스트 사용자를 로그인시키고 토큰을 출력하므로, 로그인 페이지를 클릭하지 않고도 API를 호출하거나 백엔드를 테스트할 수 있습니다. 브라우저와 같은 방식으로 실제 호스티드 로그인을 거치며, 고정된 개발용 코드 424242를 사용합니다(프로덕션이 아닌 환경의 테스트 사용자 및 메시지 참조).

이 명령에는 API 키나 keenauth login 세션이 필요하지 않습니다. 로그인하는 대상은 본인이 아니라 테스트 사용자입니다.

시작하기 전에

사용법

export KEENAUTH_ISSUER=https://acme-dev.keenauth.app
keenauth test login --user ada+test@example.com --client-id app_01j9z3k4m5n6p7q8r9s0t1v2w3
플래그 설명
--user 테스트 사용자의 이메일 주소(필수).
--client-id 환경의 공개 애플리케이션 ID(필수).
--issuer 환경의 발급자 URL. 기본값: KEENAUTH_ISSUER 환경 변수.
--scope 요청할 스코프(공백으로 구분). 기본값: openid profile email. 리프레시 토큰을 받으려면 offline_access를 추가하십시오.
--resource 액세스 토큰의 대상 API 리소스 지시자(RFC 8707).
--redirect-uri 애플리케이션에 등록된 리디렉션 URI.
--output, -o json, yaml 또는 table. 플래그를 생략하면 터미널에서는 표, 그 외에는 JSON으로 출력합니다.

출력에는 token_type, access_token, id_token(openid를 요청한 경우), refresh_token(offline_access를 요청한 경우에만), expires_in, scope가 포함됩니다. 토큰은 비밀번호처럼 취급하십시오. 만료될 때까지 테스트 사용자로 동작합니다. 명령은 토큰을 표준 출력에만 쓰며, 코드는 어디에도 출력하지 않습니다.

ACCESS_TOKEN=$(keenauth test login --user ada+test@example.com --client-id app_01j9z3k4m5n6p7q8r9s0t1v2w3 -o json | jq -r .access_token)
curl -H "Authorization: Bearer $ACCESS_TOKEN" http://localhost:3000/api/orders

명령이 하는 일

  1. 환경의 디스커버리 문서를 읽고, PKCE(S256), state, nonce를 포함한 인증 요청을 엽니다.
  2. 호스티드 로그인에서 주소를 입력하고, 이메일 코드를 요청한 뒤 424242를 제출합니다. 환경이 이어서 두 번째 인증 요소로 이메일 코드를 요구하면 그 코드를 요청받아 424242를 다시 제출합니다.
  3. 리디렉션 URI로 돌아오는 리디렉션을 따라가 state와 iss를 확인하고, 토큰 엔드포인트에서 인증 코드를 교환합니다.
  4. ID 토큰이 요청의 nonce와 함께 애플리케이션용 발급자가 발급한 것인지 확인한 뒤 토큰을 출력합니다.

로그인에 다른 단계가 필요하면 명령은 오류와 함께 중단됩니다. 예를 들어 비밀번호, 패스키, 인증 앱, 주소 도메인의 Single Sign-On, 동의 페이지, 조직 선택 등이 해당합니다.

환경

고정 코드는 development 환경에서만 허용됩니다. 명령은 개발 환경에서만 사용하십시오.

서버가 단계를 거부하면 CLI는 문제 응답을 변경 없이 출력합니다(error, code, status, detail, request_id). 예를 들어 code: test_feature_not_in_production처럼 표시됩니다.

종료 코드

코드 의미
0 테스트 사용자가 로그인했으며 토큰이 출력되었습니다.
1 로그인에 실패했습니다. OAuth 오류, state, iss 또는 nonce 불일치, 또는 명령이 완료할 수 없는 단계가 있습니다.
2 사용 오류입니다. 주소에 +test 태그가 없거나, 필수 플래그나 발급자가 없거나, 값이 잘못되었습니다. 요청은 전송되지 않았습니다.
3 서버가 401 또는 403으로 응답했습니다(예: invalid_credentials, test_feature_not_in_production).