Auth.postman_collection.json 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. {
  2. "info": {
  3. "_postman_id": "36d3c2c4-9abe-4457-9975-40575fe809ac",
  4. "name": "Auth",
  5. "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
  6. "_exporter_id": "40701166"
  7. },
  8. "item": [
  9. {
  10. "name": "회원가입",
  11. "item": [
  12. {
  13. "name": "회원가입 요청",
  14. "request": {
  15. "auth": {
  16. "type": "noauth"
  17. },
  18. "method": "POST",
  19. "header": [],
  20. "body": {
  21. "mode": "raw",
  22. "raw": "{\n \"Email\": \"user@example.com\",\n \"Password\": \"password123\",\n \"Name\": \"홍길동\"\n}",
  23. "options": {
  24. "raw": {
  25. "language": "json"
  26. }
  27. }
  28. },
  29. "url": {
  30. "raw": "{{baseUrl}}/api/auth/register",
  31. "host": [
  32. "{{baseUrl}}"
  33. ],
  34. "path": [
  35. "api",
  36. "auth",
  37. "register"
  38. ]
  39. },
  40. "description": "이메일, 비밀번호, 별명으로 회원가입을 요청합니다. 인증 메일이 발송됩니다."
  41. },
  42. "response": []
  43. },
  44. {
  45. "name": "회원가입 완료",
  46. "request": {
  47. "auth": {
  48. "type": "noauth"
  49. },
  50. "method": "GET",
  51. "header": [],
  52. "url": {
  53. "raw": "{{baseUrl}}/api/auth/registration/user@example.com",
  54. "host": [
  55. "{{baseUrl}}"
  56. ],
  57. "path": [
  58. "api",
  59. "auth",
  60. "registration",
  61. "user@example.com"
  62. ]
  63. },
  64. "description": "이메일 인증 후 회원가입을 완료합니다. isVerified-Registration 쿠키가 필요합니다."
  65. },
  66. "response": []
  67. }
  68. ]
  69. },
  70. {
  71. "name": "인증번호",
  72. "item": [
  73. {
  74. "name": "이메일 인증번호 검증",
  75. "request": {
  76. "auth": {
  77. "type": "noauth"
  78. },
  79. "method": "POST",
  80. "header": [],
  81. "body": {
  82. "mode": "raw",
  83. "raw": "{\n \"Email\": \"user@example.com\",\n \"Code\": \"123456\",\n \"Type\": 1\n}",
  84. "options": {
  85. "raw": {
  86. "language": "json"
  87. }
  88. }
  89. },
  90. "url": {
  91. "raw": "{{baseUrl}}/api/auth/verify-email",
  92. "host": [
  93. "{{baseUrl}}"
  94. ],
  95. "path": [
  96. "api",
  97. "auth",
  98. "verify-email"
  99. ]
  100. },
  101. "description": "이메일 인증번호를 검증합니다. Type: 1=Registration, 2=ForgotPassword"
  102. },
  103. "response": []
  104. },
  105. {
  106. "name": "이메일 인증번호 재전송",
  107. "request": {
  108. "auth": {
  109. "type": "noauth"
  110. },
  111. "method": "POST",
  112. "header": [],
  113. "body": {
  114. "mode": "raw",
  115. "raw": "{\n \"Email\": \"user@example.com\",\n \"Type\": 1\n}",
  116. "options": {
  117. "raw": {
  118. "language": "json"
  119. }
  120. }
  121. },
  122. "url": {
  123. "raw": "{{baseUrl}}/api/auth/resend-email",
  124. "host": [
  125. "{{baseUrl}}"
  126. ],
  127. "path": [
  128. "api",
  129. "auth",
  130. "resend-email"
  131. ]
  132. },
  133. "description": "이메일 인증번호를 재전송합니다. Type: 1=Registration, 2=ForgotPassword"
  134. },
  135. "response": []
  136. }
  137. ]
  138. },
  139. {
  140. "name": "비밀번호 재설정",
  141. "item": [
  142. {
  143. "name": "비밀번호 재설정 요청",
  144. "request": {
  145. "auth": {
  146. "type": "noauth"
  147. },
  148. "method": "POST",
  149. "header": [],
  150. "body": {
  151. "mode": "raw",
  152. "raw": "{\n \"Email\": \"user@example.com\"\n}",
  153. "options": {
  154. "raw": {
  155. "language": "json"
  156. }
  157. }
  158. },
  159. "url": {
  160. "raw": "{{baseUrl}}/api/auth/forgot-password",
  161. "host": [
  162. "{{baseUrl}}"
  163. ],
  164. "path": [
  165. "api",
  166. "auth",
  167. "forgot-password"
  168. ]
  169. },
  170. "description": "비밀번호 재설정을 요청합니다. 이메일 인증 후 비밀번호를 변경할 수 있습니다."
  171. },
  172. "response": []
  173. },
  174. {
  175. "name": "비밀번호 재설정 처리",
  176. "request": {
  177. "auth": {
  178. "type": "noauth"
  179. },
  180. "method": "POST",
  181. "header": [],
  182. "body": {
  183. "mode": "raw",
  184. "raw": "{\n \"Email\": \"user@example.com\",\n \"Password\": \"newpassword123\"\n}",
  185. "options": {
  186. "raw": {
  187. "language": "json"
  188. }
  189. }
  190. },
  191. "url": {
  192. "raw": "{{baseUrl}}/api/auth/reset-password",
  193. "host": [
  194. "{{baseUrl}}"
  195. ],
  196. "path": [
  197. "api",
  198. "auth",
  199. "reset-password"
  200. ]
  201. },
  202. "description": "비밀번호를 재설정합니다. isVerified-ForgotPassword 쿠키가 필요합니다."
  203. },
  204. "response": []
  205. }
  206. ]
  207. },
  208. {
  209. "name": "JWT",
  210. "item": [
  211. {
  212. "name": "토큰 재발급",
  213. "request": {
  214. "auth": {
  215. "type": "noauth"
  216. },
  217. "method": "POST",
  218. "header": [],
  219. "body": {
  220. "mode": "raw",
  221. "raw": "{\n \"RefreshToken\": \"{{refreshToken}}\"\n}",
  222. "options": {
  223. "raw": {
  224. "language": "json"
  225. }
  226. }
  227. },
  228. "url": {
  229. "raw": "{{baseUrl}}/api/auth/refresh-token",
  230. "host": [
  231. "{{baseUrl}}"
  232. ],
  233. "path": [
  234. "api",
  235. "auth",
  236. "refresh-token"
  237. ]
  238. },
  239. "description": "RefreshToken으로 새 AccessToken과 RefreshToken을 재발급합니다."
  240. },
  241. "response": []
  242. }
  243. ]
  244. },
  245. {
  246. "name": "로그인",
  247. "event": [
  248. {
  249. "listen": "test",
  250. "script": {
  251. "exec": [
  252. "var res = pm.response.json();\r",
  253. "\r",
  254. "if (res.success && res.data.accessToken) {\r",
  255. " pm.environment.set(\"accessToken\", res.data.accessToken);\r",
  256. "}\r",
  257. "\r",
  258. "if (res.success && res.data.refreshToken) {\r",
  259. " pm.environment.set(\"refreshToken\", res.data.refreshToken);\r",
  260. "}"
  261. ],
  262. "type": "text/javascript",
  263. "packages": {},
  264. "requests": {}
  265. }
  266. }
  267. ],
  268. "request": {
  269. "auth": {
  270. "type": "noauth"
  271. },
  272. "method": "POST",
  273. "header": [],
  274. "body": {
  275. "mode": "raw",
  276. "raw": "{\n \"Email\": \"dev@web.or.kr\",\n \"Password\": \"password123\"\n}",
  277. "options": {
  278. "raw": {
  279. "language": "json"
  280. }
  281. }
  282. },
  283. "url": {
  284. "raw": "{{baseUrl}}/api/auth/login",
  285. "host": [
  286. "{{baseUrl}}"
  287. ],
  288. "path": [
  289. "api",
  290. "auth",
  291. "login"
  292. ]
  293. },
  294. "description": "이메일/비밀번호로 로그인합니다. AccessToken, RefreshToken을 반환합니다."
  295. },
  296. "response": []
  297. },
  298. {
  299. "name": "구글 로그인",
  300. "event": [
  301. {
  302. "listen": "prerequest",
  303. "script": {
  304. "type": "text/javascript",
  305. "exec": [
  306. "// Google ID Token 자동 발급 (refresh_token 방식)",
  307. "// 최초 1회: OAuth Playground에서 refresh_token 발급 후 환경변수에 저장",
  308. "// https://developers.google.com/oauthplayground",
  309. "// scope: openid profile email",
  310. "",
  311. "pm.sendRequest({",
  312. " url: 'https://oauth2.googleapis.com/token',",
  313. " method: 'POST',",
  314. " header: { 'Content-Type': 'application/x-www-form-urlencoded' },",
  315. " body: {",
  316. " mode: 'urlencoded',",
  317. " urlencoded: [",
  318. " { key: 'client_id', value: pm.environment.get('googleClientId') },",
  319. " { key: 'client_secret', value: pm.environment.get('googleClientSecret') },",
  320. " { key: 'refresh_token', value: pm.environment.get('googleRefreshToken') },",
  321. " { key: 'grant_type', value: 'refresh_token' }",
  322. " ]",
  323. " }",
  324. "}, (err, res) => {",
  325. " if (err) { console.error('Google token error:', err); return; }",
  326. " const idToken = res.json().id_token;",
  327. " if (idToken) {",
  328. " pm.environment.set('googleIdToken', idToken);",
  329. " console.log('Google ID Token 발급 완료');",
  330. " } else {",
  331. " console.error('id_token 없음:', JSON.stringify(res.json()));",
  332. " }",
  333. "});"
  334. ]
  335. }
  336. },
  337. {
  338. "listen": "test",
  339. "script": {
  340. "type": "text/javascript",
  341. "exec": [
  342. "var res = pm.response.json();",
  343. "",
  344. "if (res.success && res.data && res.data.accessToken) {",
  345. " pm.environment.set('accessToken', res.data.accessToken);",
  346. "}",
  347. "",
  348. "if (res.success && res.data && res.data.refreshToken) {",
  349. " pm.environment.set('refreshToken', res.data.refreshToken);",
  350. "}"
  351. ]
  352. }
  353. }
  354. ],
  355. "request": {
  356. "auth": {
  357. "type": "noauth"
  358. },
  359. "method": "POST",
  360. "header": [],
  361. "body": {
  362. "mode": "raw",
  363. "raw": "{\n \"Credential\": \"{{googleIdToken}}\"\n}",
  364. "options": {
  365. "raw": {
  366. "language": "json"
  367. }
  368. }
  369. },
  370. "url": {
  371. "raw": "{{baseUrl}}/api/auth/google-login",
  372. "host": [
  373. "{{baseUrl}}"
  374. ],
  375. "path": [
  376. "api",
  377. "auth",
  378. "google-login"
  379. ]
  380. },
  381. "description": "Google OAuth ID Token으로 로그인합니다. 신규 회원은 자동 가입됩니다.\n\n[환경변수 필요]\n- googleClientId: GCP OAuth 클라이언트 ID\n- googleClientSecret: GCP OAuth 클라이언트 Secret\n- googleRefreshToken: OAuth Playground에서 1회 발급 (https://developers.google.com/oauthplayground → scope: openid profile email)"
  382. },
  383. "response": []
  384. },
  385. {
  386. "name": "로그아웃",
  387. "request": {
  388. "method": "POST",
  389. "header": [],
  390. "url": {
  391. "raw": "{{baseUrl}}/api/auth/logout",
  392. "host": [
  393. "{{baseUrl}}"
  394. ],
  395. "path": [
  396. "api",
  397. "auth",
  398. "logout"
  399. ]
  400. },
  401. "description": "로그아웃합니다. RefreshToken을 무효화합니다."
  402. },
  403. "response": []
  404. },
  405. {
  406. "name": "내 정보 조회",
  407. "request": {
  408. "method": "GET",
  409. "header": [],
  410. "url": {
  411. "raw": "{{baseUrl}}/api/auth/profile",
  412. "host": [
  413. "{{baseUrl}}"
  414. ],
  415. "path": [
  416. "api",
  417. "auth",
  418. "profile"
  419. ]
  420. },
  421. "description": "현재 로그인한 회원의 프로필 정보를 조회합니다."
  422. },
  423. "response": []
  424. }
  425. ],
  426. "auth": {
  427. "type": "bearer",
  428. "bearer": [
  429. {
  430. "key": "token",
  431. "value": "{{accessToken}}",
  432. "type": "string"
  433. }
  434. ]
  435. },
  436. "event": [
  437. {
  438. "listen": "prerequest",
  439. "script": {
  440. "type": "text/javascript",
  441. "packages": {},
  442. "requests": {},
  443. "exec": [
  444. ""
  445. ]
  446. }
  447. },
  448. {
  449. "listen": "test",
  450. "script": {
  451. "type": "text/javascript",
  452. "packages": {},
  453. "requests": {},
  454. "exec": [
  455. ""
  456. ]
  457. }
  458. }
  459. ]
  460. }