PassKeys를 사용한 권한 부여

· 기능

WebAuthn(Web Authentication)은 공개 키 암호화를 사용하여 안전하고 비밀번호 없는 피싱 방지 인증을 가능하게 하는 W3C 표준이에요. 보안과 사용자 경험을 향상시키기 위해 패스키와 함께 널리 사용돼요. 하지만 WebAuthn으로 사용자를 인증하는 것은 첫 번째 단계에 불과해요 — 성공적인 인증 후, 여러 API 엔드포인트에서 사용자의 작업을 권한 부여해야 해요.

이 글에서는 다음 방법을 다뤄요:

1. WebAuthn 인증 흐름 이해하기

WebAuthn은 클라이언트(예: 브라우저나 디바이스의 패스키)에 안전하게 저장된 공개 키 암호화자격 증명을 중심으로 해요. 인증 흐름은 일반적으로 다음 단계를 포함해요:

1단계: 인증 시작 2단계: 클라이언트 측 자격 증명 어서션 3단계: 서버 측 검증

이 시점에서 사용자가 누구인지 확인했지만 API에 대한 접근 권한을 부여하는 방법이 여전히 필요해요. 

2. WebAuthn 성공 후 Bearer 토큰 반환

성공적인 인증 후 서버가 새로운 WebSocket 또는 HTTP 연결을 열기 위해 bearer 토큰을 보내길 원한다면 token = true 매개변수를 전달해요. 예제:

{
"username": "alice@example.com", "token": true
}

성공적인 인증 후 서버가 다음과 같은 응답을 보내요:

{
"verified": "ok",
  "authentication": {
    "token": "C760C1C39E3D4E829693A13F18F5CFDE537B516336FC48F7BAB0276176F9E6DE"
  }
}


요청이 인증되지 않아 연결이 끊길 때 OnWebAuthnUnauthorized 이벤트가 호출돼요. 여기서 WebAuthn 인증이 필요한 엔드포인트와 그렇지 않은 엔드포인트를 구성할 수 있어요.

Bearer 토큰을 사용하는 이유

3. API 권한 부여에 Bearer 토큰 사용하기

새 토큰을 받으면 이 bearer 토큰으로 인증 헤더를 보내면 돼요. TsgcHTTP1Client의 CustomHeaders 속성을 사용하여 Bearer 토큰을 설정할 수 있어요. 예제:

procedure GetHTTPRequest(const aURL: string; const aToken: string): string;
var
  oHTTP: TsgcHTTP1Client;
begin
  oHTTP := TsgcHTTP1Client.Create(nil);
  Try
    oHTTP.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + aToken);
    result := oHTTP.Get(aURL);
  Finally
    oHTTP.Free;
  End;
end; 

4. 전체 흐름 개요

전체 고수준 순서는 다음과 같아요: