Skip to content

Commit 3d6e24c

Browse files
Update post: Firebase Functions OIDC 프록시 시도 경험 추가 및 관련 사례 링크
1 parent b02dfcd commit 3d6e24c

File tree

1 file changed

+61
-6
lines changed

1 file changed

+61
-6
lines changed

_posts/2025-06-27-firebase-oauth-hybrid-strategy.md

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ curl https://kauth.kakao.com/.well-known/openid-configuration
4646

4747
둘 다 없더라...
4848

49+
재밌는 건, [카카오는 Kakao Login 설정에서 "OpenID Connect Activation"을 활성화](https://velog.io/@dginovker/How-to-use-Kakao-for-SSO-on-Android-and-iOS-Flutter-apps-with-Firebase)할 수 있다고 해서 혹시나 싶어 확인해봤더니, 그래도 표준 Discovery 문서는 제공하지 않았다.
50+
4951
### 두 번째 시도: 수동으로 OIDC 설정
5052

5153
Firebase 콘솔에서 수동으로 설정해보려고 했다:
@@ -58,11 +60,49 @@ Firebase 콘솔에서 수동으로 설정해보려고 했다:
5860
| Token URL | 토큰 엔드포인트 | ⚠️ OAuth 2.0만 지원 |
5961
| UserInfo URL | 사용자 정보 엔드포인트 | ⚠️ 비표준 형식 |
6062

61-
결론: **불가능**. 네이버와 카카오는 OAuth 2.0은 지원하지만, OIDC 표준은 지원하지 않는다.
63+
결론: **불가능**. 네이버와 카카오는 OAuth 2.0은 지원하지만, 완전한 OIDC 표준은 지원하지 않는다.
64+
65+
### 세 번째 시도: Firebase Functions로 OIDC 프록시 만들기
66+
67+
"그럼 Firebase Functions로 중간 레이어를 만들어서 표준 OIDC로 변환하면 되지 않을까?"
6268

63-
### 세 번째 시도: Custom Token 전략
69+
이런 구조를 시도했다:
6470

65-
"그럼 서버에서 Custom Token 만들어서 주면 되겠네!"
71+
```javascript
72+
// Firebase Function에서 OIDC 프록시 구현 시도
73+
exports.oidcProxy = functions.https.onRequest(async (req, res) => {
74+
const { provider } = req.query; // 'naver' 또는 'kakao'
75+
76+
if (req.path === '/.well-known/openid-configuration') {
77+
// 가짜 OIDC Discovery 문서 제공
78+
return res.json({
79+
issuer: `https://us-central1-myproject.cloudfunctions.net/oidcProxy`,
80+
authorization_endpoint: `https://us-central1-myproject.cloudfunctions.net/oidcProxy/authorize`,
81+
token_endpoint: `https://us-central1-myproject.cloudfunctions.net/oidcProxy/token`,
82+
userinfo_endpoint: `https://us-central1-myproject.cloudfunctions.net/oidcProxy/userinfo`,
83+
// ... 기타 OIDC 필수 필드들
84+
});
85+
}
86+
87+
// 각 엔드포인트별 프록시 로직...
88+
});
89+
```
90+
91+
하지만 이 방식은 여러 문제에 부딪혔다:
92+
93+
1. **복잡도 폭발**: OIDC의 모든 엔드포인트를 구현해야 함
94+
2. **상태 관리 지옥**: Authorization Code, Access Token 등을 어디에 저장할지
95+
3. **보안 이슈**: 중간자 역할을 하면서 발생하는 추가 보안 고려사항
96+
4. **비용 증가**: 모든 인증 요청이 Functions를 거쳐야 함
97+
98+
비슷한 시도를 한 사례들을 찾아보니:
99+
- [네이버 블로그에서도 "국내에서 활발히 쓰이는 카카오 로그인/네이버 로그인이 아직 지원되지 않는다"고 언급](https://m.blog.naver.com/chltmddus23/221784299552)하며 Custom Token 방식을 제안
100+
- [GitHub의 firebase-custom-login 프로젝트](https://github.com/zaiyou12/firebase-custom-login)에서도 "firebase function을 사용해 Custom Token을 반환하는 방식"을 채택
101+
- [AWS Lambda와 Firebase Auth를 조합한 방식](https://goodgoodjm.github.io/kakao-and-naver-login-with-firebase-1/)도 결국 Custom Token으로 귀결
102+
103+
### 네 번째 시도: Custom Token 전략
104+
105+
결국 Firebase Functions로 OIDC를 흉내내는 것보다, 서버(Lambda)에서 Custom Token을 발급하는 것이 훨씬 깔끔하다는 결론에 도달했다.
66106

67107
이게 정답이었다. 근데 여기서 또 문제가...
68108

@@ -172,13 +212,21 @@ async function loginWithNaver(authCode) {
172212
1. **Firebase는 글로벌 표준만 지원한다**
173213
- 한국 로컬 서비스들은 대부분 OAuth 2.0만 지원
174214
- OIDC 표준을 기대하면 안 됨
215+
- [Firebase 공식 문서](https://firebase.google.com/docs/auth/web/openid-connect)에서도 "OIDC compliant provider"를 명시
216+
217+
2. **Firebase Functions로 OIDC 프록시 만들기는 비현실적이다**
218+
- 이론적으로는 가능하지만 구현 복잡도가 너무 높음
219+
- 보안 취약점 발생 가능성 증가
220+
- 비용과 유지보수 부담이 크다
221+
- 여러 개발자들이 시도했지만 대부분 Custom Token 방식으로 회귀
175222

176-
2. **하이브리드 전략이 정답이다**
223+
3. **하이브리드 전략이 정답이다**
177224
- Firebase UID로 통합 관리
178225
- 소셜 로그인은 매핑 테이블로 처리
179226
- 익명 사용자 활용이 핵심
227+
- Account Linking으로 나중에 계정 연결 가능
180228

181-
3. **서버리스가 최적이다**
229+
4. **서버리스가 최적이다**
182230
- Lambda + DynamoDB 조합이 비용 효율적
183231
- Cold Start 고려해서 Node.js 18.x 사용
184232
- Parameter Store로 시크릿 관리
@@ -187,10 +235,17 @@ async function loginWithNaver(authCode) {
187235

188236
처음엔 "Firebase에서 OIDC 프로바이더 추가하면 끝!" 이라고 생각했는데, 현실은 달랐다. 하지만 덕분에 더 유연한 인증 시스템을 만들 수 있었다.
189237

238+
인터넷을 뒤져보니 나 같은 사람이 많더라:
239+
- [카카오 데브톡에서도 2017년부터 Firebase 연동 질문](https://devtalk.kakao.com/t/firebase/30575)이 올라오고 있음
240+
- [Stack Overflow에서도 OAuth 2.0 설정 관련 문제](https://stackoverflow.com/questions/79183709/oauth-2-0-not-working-properly-with-kakao-login-in-react-app)들이 계속 보고됨
241+
- 대부분의 해결책이 Custom Token 방식으로 수렴
242+
190243
혹시 비슷한 상황에 계신 분들, 처음부터 Custom Token 방식으로 가세요. OIDC 프로바이더 추가하려고 시간 낭비하지 마시고... 😅
191244

192245
전체 코드는 [GitHub 레포지토리](https://github.com/realcoding2003/firebase-auth-apigateway)에서 확인할 수 있습니다!
193246

194247
---
195248

196-
**P.S.** 이 방식으로 구현하니까 나중에 Apple 로그인 추가할 때도 동일한 패턴으로 쉽게 확장할 수 있더라구요. 오히려 잘 됐나...? 🤔
249+
**P.S.** 이 방식으로 구현하니까 나중에 Apple 로그인 추가할 때도 동일한 패턴으로 쉽게 확장할 수 있더라구요. 오히려 잘 됐나...? 🤔
250+
251+
**P.P.S.** 카카오가 OIDC를 부분적으로 지원한다고 해서 기대했는데, 결국 Firebase가 요구하는 표준과는 거리가 있었어요. 네이버는 아예 OIDC 계획이 없는 듯... 🥲

0 commit comments

Comments
 (0)