InfoGrab DocsInfoGrab Docs

TokenAuthenticatable concern 사용하기

요약

TokenAuthenticatable 모듈은 ActiveRecord 모델에 토큰 기반 인증 기능을 제공하는 concern입니다. 이 모듈은 모델에 토큰 기반 인증을 추가하는 유연한 방법을 제공합니다. digest: 토큰의 SHA256 다이제스트를 데이터베이스에 저장합니다.

TokenAuthenticatable 모듈은 ActiveRecord 모델에 토큰 기반 인증 기능을 제공하는 concern입니다. 이 모듈을 사용하면 모델에 인증 토큰을 정의할 수 있습니다.

개요#

이 모듈은 모델에 토큰 기반 인증을 추가하는 유연한 방법을 제공합니다.

세 가지 저장 전략을 지원합니다:

  • digest: 토큰의 SHA256 다이제스트를 데이터베이스에 저장합니다.

  • encrypted: AES 256 GCM 알고리즘을 사용하여 토큰을 암호화한 후 데이터베이스에 저장합니다.

  • insecure: 토큰을 암호화하거나 다이제스트하지 않고 그대로 데이터베이스에 저장합니다. 이 전략의 사용을 강력히 권장하지 않습니다.

각 저장 전략에 대한 여러 옵션도 지원합니다.

사용법#

모델에서 token_field 속성을 정의하려면 모듈을 include하고 add_authentication_token_field를 호출하세요:

class User < ApplicationRecord
  include TokenAuthenticatable

  add_authentication_token_field :token_field, encrypted: :required,
    routable_token : { ... }
end

저장 전략#

  • encrypted: :required: 암호화된 토큰을 token_field_encrypted 칼럼에 저장합니다. token_field_encrypted 칼럼이 존재해야 합니다. 이 전략의 사용을 강력히 권장합니다.

  • encrypted: :migrating: 암호화된 토큰과 평문 토큰을 각각 token_field_encryptedtoken_field에 저장합니다. 항상 평문 토큰을 읽습니다. 속성을 암호화로 전환하는 과정에서 사용해야 합니다. token_fieldtoken_field_encrypted 칼럼 모두 존재해야 합니다.

  • encrypted: :optional: 암호화된 토큰을 token_field_encrypted 칼럼에 저장합니다. token_field_encrypted에서 먼저 읽고, 없으면 token_field로 폴백합니다. 암호화된 토큰을 쓸 때 token_field 칼럼의 평문 토큰을 null로 만듭니다. token_fieldtoken_field_encrypted 칼럼 모두 존재해야 합니다.

  • digest: true: 토큰의 다이제스트를 데이터베이스에 저장합니다. token_field_digest 칼럼이 존재해야 합니다.

  • insecure: true: 토큰을 암호화하거나 다이제스트하지 않고 그대로 데이터베이스에 저장합니다. 이 전략의 사용을 강력히 권장하지 않습니다.

기본적으로 저장 전략을 선택하지 않으면 토큰의 SHA256 다이제스트가 데이터베이스에 저장됩니다.

token_field_encrypted 칼럼은 항상 인덱싱되어야 합니다. 토큰의 고유성 검사 및 조회에 사용되기 때문입니다.

라우터블 토큰#

routable_token 옵션을 사용하면 라우팅 정보를 토큰에 직접 인코딩할 수 있습니다. 이를 통해 시스템이 추가적인 데이터베이스 조회 없이 올바른 셀 또는 샤드로 요청을 라우팅할 수 있습니다.

라우터블 토큰은 Routable Tokens 설계 문서를 따릅니다.

routable_token: 옵션을 다음 항목을 포함한 해시로 정의하세요:

  • if:: 토큰 소유자 레코드를 받는 proc입니다. 이 proc은 일반적으로 기능 플래그 확인이나 기타 조건을 포함합니다. proc이 false를 반환하면 Devise.friendly_token을 사용하여 무작위 토큰이 생성됩니다.

  • payload:: 토큰에 인코딩할 라우팅 정보를 정의하는 { key => proc } 해시입니다. 각 proc은 토큰 소유자 레코드를 받아 해당 키의 값을 반환합니다. 최종 페이로드에는 Cell ID(c) 또는 Organization ID(o) 중 하나 이상이 반드시 포함되어야 합니다. 지원하는 키는 다음과 같습니다:

c: Cell ID (Gitlab.config.cell.id가 설정된 경우 기본적으로 포함됨)

  • o: Organization ID

  • g: Group ID

  • p: Project ID

  • u: User ID

  • t: 러너 유형 (예: 인스턴스 유형은 t:1, 그룹 유형은 t:2, 프로젝트 유형은 t:3)

예시는 Routable Tokens 설계 문서를 참조하세요.

기타 옵션#

  • unique: false: 토큰 고유성을 강제하지 않으며 find_by_token_field(token_field는 속성 이름) 생성을 비활성화합니다. 기본값은 true입니다.

  • format_with_prefix: :compute_token_prefix: 토큰에 접두사를 정의할 수 있습니다. #compute_token_prefix 메서드는 String을 반환해야 합니다. 기본값은 접두사 없음입니다. 토큰 접두사에 대한 가이드를 참조하세요.

  • expires_at: :compute_token_expiration_time: 토큰이 만료되어야 하는 시간을 정의할 수 있습니다. #compute_token_expiration_time 메서드는 Time 객체를 반환해야 합니다. 기본값은 만료 없음입니다.

  • token_generator: 토큰을 반환하는 proc입니다. 없으면 Devise.friendly_token을 사용하여 무작위 토큰이 생성됩니다.

  • require_prefix_for_validation: (:encrypted 전략 전용): 토큰 접두사가 예상 접두사와 일치하는지 확인합니다. 접두사가 일치하지 않으면 토큰이 설정되지 않은 것처럼 동작합니다. 기본값은 false입니다.

토큰 접근 및 조작#

user = User.new
user.token_field # Retrieves the token
user.set_token_field('new_token') # Sets a new token
user.ensure_token_field # Generates a token if not present
user.ensure_token_field! # Generates a token if not present
user.reset_token_field! # Resets the token and saves the model with #save!
user.token_field_matches?(other_token) # Securely compares the token with another
user.token_field_expires_at # Returns the expiration time
user.token_field_expired? # Checks if the token has expired
user.token_field_with_expiration # Returns a API::Support::TokenWithExpiration object, useful for API response

TokenAuthenticatable concern 사용하기

GitLab v19.1
원문 보기
요약

TokenAuthenticatable 모듈은 ActiveRecord 모델에 토큰 기반 인증 기능을 제공하는 concern입니다. 이 모듈은 모델에 토큰 기반 인증을 추가하는 유연한 방법을 제공합니다. digest: 토큰의 SHA256 다이제스트를 데이터베이스에 저장합니다.

TokenAuthenticatable 모듈은 ActiveRecord 모델에 토큰 기반 인증 기능을 제공하는 concern입니다. 이 모듈을 사용하면 모델에 인증 토큰을 정의할 수 있습니다.

개요#

이 모듈은 모델에 토큰 기반 인증을 추가하는 유연한 방법을 제공합니다.

세 가지 저장 전략을 지원합니다:

  • digest: 토큰의 SHA256 다이제스트를 데이터베이스에 저장합니다.

  • encrypted: AES 256 GCM 알고리즘을 사용하여 토큰을 암호화한 후 데이터베이스에 저장합니다.

  • insecure: 토큰을 암호화하거나 다이제스트하지 않고 그대로 데이터베이스에 저장합니다. 이 전략의 사용을 강력히 권장하지 않습니다.

각 저장 전략에 대한 여러 옵션도 지원합니다.

사용법#

모델에서 token_field 속성을 정의하려면 모듈을 include하고 add_authentication_token_field를 호출하세요:

class User < ApplicationRecord
  include TokenAuthenticatable

  add_authentication_token_field :token_field, encrypted: :required,
    routable_token : { ... }
end

저장 전략#

  • encrypted: :required: 암호화된 토큰을 token_field_encrypted 칼럼에 저장합니다. token_field_encrypted 칼럼이 존재해야 합니다. 이 전략의 사용을 강력히 권장합니다.

  • encrypted: :migrating: 암호화된 토큰과 평문 토큰을 각각 token_field_encryptedtoken_field에 저장합니다. 항상 평문 토큰을 읽습니다. 속성을 암호화로 전환하는 과정에서 사용해야 합니다. token_fieldtoken_field_encrypted 칼럼 모두 존재해야 합니다.

  • encrypted: :optional: 암호화된 토큰을 token_field_encrypted 칼럼에 저장합니다. token_field_encrypted에서 먼저 읽고, 없으면 token_field로 폴백합니다. 암호화된 토큰을 쓸 때 token_field 칼럼의 평문 토큰을 null로 만듭니다. token_fieldtoken_field_encrypted 칼럼 모두 존재해야 합니다.

  • digest: true: 토큰의 다이제스트를 데이터베이스에 저장합니다. token_field_digest 칼럼이 존재해야 합니다.

  • insecure: true: 토큰을 암호화하거나 다이제스트하지 않고 그대로 데이터베이스에 저장합니다. 이 전략의 사용을 강력히 권장하지 않습니다.

기본적으로 저장 전략을 선택하지 않으면 토큰의 SHA256 다이제스트가 데이터베이스에 저장됩니다.

token_field_encrypted 칼럼은 항상 인덱싱되어야 합니다. 토큰의 고유성 검사 및 조회에 사용되기 때문입니다.

라우터블 토큰#

routable_token 옵션을 사용하면 라우팅 정보를 토큰에 직접 인코딩할 수 있습니다. 이를 통해 시스템이 추가적인 데이터베이스 조회 없이 올바른 셀 또는 샤드로 요청을 라우팅할 수 있습니다.

라우터블 토큰은 Routable Tokens 설계 문서를 따릅니다.

routable_token: 옵션을 다음 항목을 포함한 해시로 정의하세요:

  • if:: 토큰 소유자 레코드를 받는 proc입니다. 이 proc은 일반적으로 기능 플래그 확인이나 기타 조건을 포함합니다. proc이 false를 반환하면 Devise.friendly_token을 사용하여 무작위 토큰이 생성됩니다.

  • payload:: 토큰에 인코딩할 라우팅 정보를 정의하는 { key => proc } 해시입니다. 각 proc은 토큰 소유자 레코드를 받아 해당 키의 값을 반환합니다. 최종 페이로드에는 Cell ID(c) 또는 Organization ID(o) 중 하나 이상이 반드시 포함되어야 합니다. 지원하는 키는 다음과 같습니다:

c: Cell ID (Gitlab.config.cell.id가 설정된 경우 기본적으로 포함됨)

  • o: Organization ID

  • g: Group ID

  • p: Project ID

  • u: User ID

  • t: 러너 유형 (예: 인스턴스 유형은 t:1, 그룹 유형은 t:2, 프로젝트 유형은 t:3)

예시는 Routable Tokens 설계 문서를 참조하세요.

기타 옵션#

  • unique: false: 토큰 고유성을 강제하지 않으며 find_by_token_field(token_field는 속성 이름) 생성을 비활성화합니다. 기본값은 true입니다.

  • format_with_prefix: :compute_token_prefix: 토큰에 접두사를 정의할 수 있습니다. #compute_token_prefix 메서드는 String을 반환해야 합니다. 기본값은 접두사 없음입니다. 토큰 접두사에 대한 가이드를 참조하세요.

  • expires_at: :compute_token_expiration_time: 토큰이 만료되어야 하는 시간을 정의할 수 있습니다. #compute_token_expiration_time 메서드는 Time 객체를 반환해야 합니다. 기본값은 만료 없음입니다.

  • token_generator: 토큰을 반환하는 proc입니다. 없으면 Devise.friendly_token을 사용하여 무작위 토큰이 생성됩니다.

  • require_prefix_for_validation: (:encrypted 전략 전용): 토큰 접두사가 예상 접두사와 일치하는지 확인합니다. 접두사가 일치하지 않으면 토큰이 설정되지 않은 것처럼 동작합니다. 기본값은 false입니다.

토큰 접근 및 조작#

user = User.new
user.token_field # Retrieves the token
user.set_token_field('new_token') # Sets a new token
user.ensure_token_field # Generates a token if not present
user.ensure_token_field! # Generates a token if not present
user.reset_token_field! # Resets the token and saves the model with #save!
user.token_field_matches?(other_token) # Securely compares the token with another
user.token_field_expires_at # Returns the expiration time
user.token_field_expired? # Checks if the token has expired
user.token_field_with_expiration # Returns a API::Support::TokenWithExpiration object, useful for API response