OAuth Project

OAuth?

๐Ÿ’ก OAuth๋Š” Third party app์—๊ฒŒ ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ , ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜ํƒ€๋‚œ ๊ฐœ๋…์ด๋‹ค. ์ฆ‰, Third party app๋Š” ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์ง€ ๋ชปํ•ด๋„, ์‚ฌ์šฉ์ž๊ฐ€ ํ—ˆ๊ฐ€ํ•œ ์ž์›์— ๋Œ€ํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

OAuth์—๋Š” 4๊ฐœ์˜ ์ฐธ์—ฌ์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค. Third party App์— ํ•ด๋‹นํ•˜๋Š” Client, ์‹ค์ œ ์•ฑ ์‚ฌ์šฉ์ž์— ํ•ด๋‹นํ•˜๋Š” Resource Owner, ์š”์ฒญ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์‘๋‹ต์„ ์ฃผ๋Š” Resource server, ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” Authorization Server๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ฐธ์—ฌ์ž

  1. Resource Owner

    ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด์„œ ์•ก์„ธ์Šค๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์ฒด์ด๋‹ค. (end user๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค)

    ์•ฑ์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด, ์ž‘๊ณ  ์†Œ์ค‘ํ•œ ๋‚ด ์•ฑ์˜ ์‚ฌ์šฉ์ž์ด๋‹ค. ์ด๋“ค์ด ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ShortcutsZip์—์„œ ์• ํ”Œ๋กœ ๋กœ๊ทธ์ธ์„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ฒ˜์Œ ํšŒ์›๊ฐ€์ž…ํ•  ๋•Œ ์ด๋ฆ„, ์ด๋ฉ”์ผ, ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ฃผ์ฒด์ด๋‹ค.

  2. Resource Server

    ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„๋กœ, access token์„ ํ†ตํ•ด ์š”์ฒญ์„ ๋ฐ›๊ณ , ์‘๋‹ตํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    ShortcutsZip์—์„œ๋Š” ๋”ฐ๋กœ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„ ์ •๋ณด, ์‚ฌ์ง„, ์ด๋ฉ”์ผ ์ฃผ์†Œ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ, ๊ทธ ์ •๋ณด๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ด์ฃผ๋Š” ์„œ๋ฒ„๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

  3. Client

    ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•œ ์•ฑ์ด๋‹ค. Resource server์—์„œ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์žํ•˜๋Š” ๊ณ„์ธต์ด๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž A์˜ ๊นƒํ—ˆ๋ธŒ ์ž”๋”” ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด, Github Authorization Server์—์„œ ์ธ์ฆ์„ ๋ฐ›์€ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Resorce server์—๊ฒŒ ์ž”๋”” ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

  4. Authorization Server

    Resource Owner๋ฅผ ์ธ์ฆํ•˜๊ณ , ๊ถŒํ•œ์„ ์–ป์€ ํ›„์—, Client์—๊ฒŒ Access Token์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.

    ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ Apple ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ฒดํฌํ•œ ์ •๋ณด๋ฅผ ์ž์‹ ์˜ ์„œ๋ฒ„์— ์ €์žฅํ•œ๋‹ค. ์ดํ›„์— ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Access Token์„ ๋ฐœ๊ธ‰ํ•˜์—ฌ Resource Server์—๊ฒŒ ์ œ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด, Resource Owner๊ฐ€ Client๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ด๋•Œ Resource Owner๋Š” Authorization Server๋ฅผ ํ†ตํ•ด ์ž์‹ ์„ ์ธ์ฆํ•˜๊ณ , ์–ด๋–ค ๊ถŒํ•œ์„ ํ—ˆ์šฉํ• ์ง€ ์„ ํƒํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Authorization Server๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Access Token์„ Client์— ์ œ๊ณตํ•œ๋‹ค. ์ดํ›„ Client๋Š” Access Token์„ ํ†ตํ•ด Resource Server์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ณ , Resource server๋Š” ํ† ํฐ๊ณผ ์š”์ฒญ์„ ๋น„๊ตํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค.

(์•„์ง์€ ๋‹จ์–ด๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ์šฉ์–ด๊ฐ€ ์ต์ˆ™ํ•ด์ง€๋ฉด ๊ต‰์žฅํžˆ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.)


OAuth ๊ณผ์ •

์„œ๋น„์Šค ๋“ฑ๋ก โ†’ Resource Server์˜ ์ธ์ฆ โ†’ Authorization Server์˜ ์Šน์ธ โ†’ Access Token ๋ฐœ๊ธ‰์˜ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค. (refresh token์€ ๋ณ„๊ฐœ) ๊ทธ๋Ÿผ ์ด ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์ฐจ๊ทผ์ฐจ๊ทผ ์•Œ์•„๋ณด์ž.

  1. ์„œ๋น„์Šค ๋“ฑ๋ก (**Client Registration**)

    Authorization Server์—์„œ Client๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก redirection URI์™€ ํ•จ๊ป˜ ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด Client ID, Client Secret์„ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

    client ID๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์‹๋ณ„์ž๋กœ, Authorization server๊ฐ€ client๋ฅผ ์‹๋ณ„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. client secret์€ ์‹ ์›์„ ํ™•์ธํ•˜๊ณ , ํ†ต์‹ ์˜ ์‹ ๋ขฐ์„ฑ์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ ˆ๋Œ€ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.redirection URI๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ ํ›„์— redirection ์‹œํ‚ฌ ์ฃผ์†Œ์ด๋‹ค. ์ฆ‰, Authorization Code๋ฅผ ์ „๋‹ฌํ•ด ์ค„ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  2. Resource Owner์˜ ์ธ์ฆ

    ์„œ๋น„์Šค ๋“ฑ๋ก์ด ์™„๋ฃŒ๋˜๋ฉด Resorce Server๋Š” Client์˜ ID, Secret, Redirect URL์„ ์•Œ๊ณ  ์žˆ๋‹ค. ์ด๋•Œ Resource owner๊ฐ€ ์šฐ๋ฆฌ ์•ฑ์—์„œ Resource server์˜ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋Ÿฌ๋ฉด Client์—์„œ๋Š” ๊ทธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ URL์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ Client ID, Scope, Redirect URI๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿผ Authorization Server์—์„œ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์œ ์ €๋Š” ์ž์‹ ์ž„์„ ์ธ์ฆํ•œ๋‹ค.

    Authorization Server๋Š” ์ž์‹ ์˜ ์„œ๋ฒ„์—์„œ ํ•ด๋‹น Client ID๊ฐ€ ์žˆ๋Š”์ง€, ์š”์ฒญ์ด ์˜จ URI์™€, ์„œ๋ฒ„์— ์ €์žฅ๋œ URI ๊ฐ’์ด ๋™์ผํ•œ์ง€ ํ™•์ธํ•œ๋‹ค. ์ดํ›„ Resorce Owner์—๊ฒŒ Scope์— ๋Œ€ํ•œ ์ ‘๊ทผ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ดํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•œ Scope ๊ฐ’์„ Resorce Owner์˜ ID์™€ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.

  3. Authorization Server์˜ ์Šน์ธ

    Authorization Server๋Š” ๋ฐ”๋กœ Access Token์„ ์ œ๊ณตํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค!! ์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ์ธ Authorization code๋ฅผ Resource Owner์—๊ฒŒ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ดํ›„ ์ด ๊ฐ’์„ Client๊ฐ€ ๋ฐ›์•„์„œ ๋‹ค์‹œ Authorization Server์— authorization code, redirect URI, Client ID, Client Secret๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ธ์ฆํ•˜๊ฒŒ ๋œ๋‹ค.

    ๋‚ด๊ฐ€ Resource Owner๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์•ฑ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ๋‚ด๊ฐ€ ๊ตฌ๊ธ€๋กœ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, WebView๋ฅผ ํ†ตํ•ด ๊ตฌ๊ธ€์‚ฌ์ดํŠธ๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. ๋‚ด ์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•˜๊ณ , ์–ด๋–ค ๊ถŒํ•œ์„ ์ œ๊ณตํ•  ๊ฒƒ์ธ์ง€ ํ™•์ธํ•œ ํ›„์— ์—ฐ๋™ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Redirect URI๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ์•ฑ์œผ๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ, ์šฐ๋ฆฌ์˜ ์•ฑ์ธ Client๋Š” WKWebKit์˜ decidePolicyFor navigationAction ๋ฅผ ํ†ตํ•ด์„œ Authorization code ๊ฐ’์„ ์บ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ฐ’๊ณผ client secret ๋“ฑ ์ •๋ณด๋ฅผ ๋‹ค์‹œ Authorization server์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๋‹จ๊ณ„์ธ ๊ฒƒ์ด๋‹ค.

  4. ๋งˆ์ง€๋ง‰! Acess Token ๋ฐœ๊ธ‰

    Authorization Server๋Š” ์•„๊นŒ Client์—๊ฒŒ Client ID, Secret, URI, Authorization code๊นŒ์ง€ ๋ชจ๋‘ ๋ฐ›์•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ Authorization Server๊ฐ€ ์ธ์ฆํ•œ ์œ ์ €, ์ธ์ฆํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค. ์ด์ œ Authorization code๋Š” ์‚ญ์ œํ•œ ํ›„์—, Access Token์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค.

    ์ด์ œ Resource Server์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๋•Œ, Access Token์„ ํ†ตํ•ด ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น Scope์— ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ „์ฒด์ ์ธ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (client registration์€ ํ•ด๋‹น ๋ช…์„ธ ๊ณผ์ •์—์„œ ์ œ์™ธ๋˜์–ด์žˆ๋‹ค.)

  +--------+                                           +---------------+
  |        |--(A)------- Authorization Grant --------->|               |
  |        |                                           |               |
  |        |<-(B)----------- Access Token -------------|               |
  |        |               & Refresh Token             |               |
  |        |                                           |               |
  |        |                            +----------+   |               |
  |        |--(C)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(D)- Protected Resource --| Resource |   | Authorization |
  | Client |                            |  Server  |   |     Server    |
  |        |--(E)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(F)- Invalid Token Error -|          |   |               |
  |        |                            +----------+   |               |
  |        |                                           |               |
  |        |--(G)----------- Refresh Token ----------->|               |
  |        |                                           |               |
  |        |<-(H)----------- Access Token -------------|               |
  +--------+           & Optional Refresh Token        +---------------+

Refresh token

Access Token์€ ์ˆ˜๋ช…์ด ์ •ํ•ด์ ธ์žˆ๋‹ค. ์ด ์ˆ˜๋ช…์ด ๋๋‚˜๋ฉด, ํ•ด๋‹น Access Token์œผ๋กœ๋Š” Client๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์ธ์ฆ ์—๋Ÿฌ๋ผ๋Š” ์‘๋‹ต๋งŒ ๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ์ˆ˜๋ช…์ด ๋๋‚  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ์„ ํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋•Œ Refresh Token์„ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์—†์ด Access Token์„ ์ƒˆ๋กœ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๋ณดํ†ต Access Token์„ ๋ฐœ๊ธ‰๋ฐ›์„ ๋•Œ, Refresh Token์„ ๊ฐ™์ด ์ œ๊ณตํ•ด์ค€๋‹ค. Resource Server์™€ AccessToken์œผ๋กœ ํ†ต์‹ ์„ ํ•˜๋˜ ์ค‘ Invalid token error๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, Client๋Š” Authorization Server์—๊ฒŒ Refresh Token์„ ๋ณด๋‚ด์„œ ๋‹ค์‹œ Access Token์„ ๋ฐœ๊ธ‰๋ฐ›๊ฒŒ ๋œ๋‹ค.

Refresh Token์œผ๋กœ Access Token์„ ์žฌ๋ฐœ๊ธ‰ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Refresh Token์€ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅ๋˜์–ด์•ผํ•˜๋ฉฐ, Refresh Token์ด ๋งŒ๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ์žฌ๋กœ๊ทธ์ธํ•ด์•ผํ•œ๋‹ค.

	+--------+                                           +---------------+
  |        |--(A)------- Authorization Grant --------->|               |
  |        |                                           |               |
  |        |<-(B)----------- Access Token -------------|               |
  |        |               & Refresh Token             |               |
  |        |                                           |               |
  |        |                            +----------+   |               |
  |        |--(C)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(D)- Protected Resource --| Resource |   | Authorization |
  | Client |                            |  Server  |   |     Server    |
  |        |--(E)---- Access Token ---->|          |   |               |
  |        |                            |          |   |               |
  |        |<-(F)- Invalid Token Error -|          |   |               |
  |        |                            +----------+   |               |
  |        |                                           |               |
  |        |--(G)----------- Refresh Token ----------->|               |
  |        |                                           |               |
  |        |<-(H)----------- Access Token -------------|               |
  +--------+           & Optional Refresh Token        +---------------+

Oauth๋Š” ๊ทธ๋ž˜์„œ ์™œ ์“ฐ๋Š”๊ฑด๋ฐ?

Client ์ž…์žฅ์—์„œ๋Š” Resource server๋ฅผ ํ†ตํ•ด owner์˜ ์‹ ์›์€ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ resource owner๋Š” client์—๊ฒŒ ๊ตฌ๊ธ€์˜ ID๋‚˜ PW๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ ๋„, ๊ตฌ๊ธ€์˜ ์„œ๋น„์Šค๋ฅผ client์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ํ›จ์”ฌ ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ฐ„ํŽธํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์„œ๋กœ๋ฅผ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค !

์ถœ์ฒ˜

WEB2 - OAuth 2.0 : 1.แ„‰แ…ฎแ„‹แ…ฅแ†ธแ„‰แ…ฉแ„€แ…ข

RFC 6749: The OAuth 2.0 Authorization Framework

Last updated