C#에서 API 인증 이해하기 : 마스터하기
Source: Dev.to
기본 인증 (Username & Password)
기본 인증은 사용자 이름과 비밀번호를 Base64로 인코딩하여 전송합니다. 구현이 간단하지만 HTTPS 위에서만 사용해야 하며, 일반적으로 내부 또는 테스트 API에 적합합니다.
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
// Create the client
var client = new HttpClient();
// Encode credentials
var byteArray = Encoding.ASCII.GetBytes("username:password");
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
// Send request
var response = await client.GetAsync("https://api.example.com/data");
베어러 토큰 인증 (JWT)
베어러 토큰(예: JWT)은 무상태이며 확장성이 뛰어나 현대 REST API에 이상적입니다.
using System.Net.Http;
using System.Net.Http.Headers;
// Create the client
var client = new HttpClient();
// Add the JWT as a Bearer token
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "your_jwt_token_here");
// Send request
var response = await client.GetAsync("https://api.example.com/userinfo");
OAuth 베어러 토큰
OAuth 제공자(Google, GitHub, Facebook 등)는 베어러 토큰으로 전송되는 액세스 토큰을 발급합니다. 이 방식은 서드파티 통합에 널리 사용됩니다.
using System.Net.Http;
using System.Net.Http.Headers;
// Create the client
var client = new HttpClient();
// Use the OAuth access token
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "access_token_from_oauth");
// Send request
var response = await client.GetAsync("https://api.github.com/user");
HMAC 서명 인증
HMAC 서명은 공유 비밀키를 사용해 요청 데이터를 해시함으로써 인증과 무결성을 보장합니다. 이 방법은 시스템 간 보안 통신에 적합합니다.
using System;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
// Shared secret
var key = "secretkey";
var message = "GET:/api/data";
// Compute HMAC SHA256 signature
using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(message)));
// Create the client
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Signature", signature);
// Send request
var response = await client.GetAsync("https://api.example.com/data");
보안 고려 사항
- 항상 HTTPS를 사용하여 자격 증명이나 토큰을 전송하세요.
- 평문 비밀번호를 저장하지 마세요; 프로덕션에서는 토큰 기반 방식을 선호합니다.
- 비밀키와 토큰을 정기적으로 교체하여 노출 위험을 줄이세요.
- HMAC을 사용할 경우 서버 측에서 서명을 검증하여 요청 무결성을 확인하세요.