현재 META LLM MSP 화면에서는 API 키를 그대로 공개하고 있습니다.

그러나 이러한 방식은 보안상의 위험이 있기 때문에, 사용자 화면에서도 API키 내용을 가릴 필요가 있습니다.
API 키 마스크 함수
def mask_api_key(api_key: str) -> str:
if not isinstance(api_key, str):
raise ValueError("API 키는 문자열이어야 합니다.")
if not api_key.startswith("sk-"):
return "*" * len(api_key)
prefix = "sk-"
key_body = api_key[len(prefix):]
if len(key_body) <= 4:
masked = "*" * len(key_body)
return prefix + masked
num_visible = 4
masked_body = "*" * (len(key_body) - num_visible) + key_body[-num_visible:]
return prefix + masked_body
API 키가 입력되면 sk-와 마지막 4자리를 제외한 API 키 내용을 전부 *로 바꿔서 반환하는 함수입니다.
이 함수를 Core의 tools.py에 추가합니다.
API 키 반환
def get_api_keys(db: Session, email: str):
user = db.execute(select(User).where(User.email == email)).scalar_one_or_none()
if not user:
return {"api_keys": [],"message":"please enter your apikey"}
keys = db.execute(
select(ApiKey).where(ApiKey.user_id == user.id)
).scalars().all()
return {
"api_keys": [
{
"id": k.id,
"provider_id": k.provider_id,
"provider_name": k.provider_name,
"user_id": k.user_id,
"api_key": mask_api_key(k.api_key),
"status": k.status,
"create_at": k.create_at,
"usage_limit": k.usage_limit,
"usage_count": k.usage_count
} for k in keys
]
}
해당 코드는 요청이 들어오면 API 키 관련 정보를 전부 리스트로 만들어 반환하는 함수였습니다.
이 함수에서 api_key를 반환할 때, DB에 있는 API 키를 바로 반환하지 않고 mask_api_key를 한 번 거치도록 합니다.
반영 결과

이제 API 키가 표시될 때 *로 가려져서 표시됩니다.