Skip to content

stepanowon/OAuth_20

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

15 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

OAuth_20

Samples for OAuth 2.0 Provider & Client

OAuth2 Provider & Consumer Sample์ž…๋‹ˆ๋‹ค. https://tools.ietf.org/html/rfc6749 ๋ฅผ ๊ทผ๊ฑฐํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์ƒ˜ํ”Œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”. ์Šคํ„ฐ๋”” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”. ํ™˜๊ฒฝ์„ค์ •์— ๋Œ€ํ•œ ์งˆ๋ฌธ, ์ฝ”๋“œ ์ž์ฒด์— ๋Œ€ํ•œ ์งˆ๋ฌธ์€ ๋ฐ›์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. OAuth2.0์— ๋Œ€ํ•œ ์งˆ๋ฌธ๋„ ์œ„์˜ RFC ๋ฌธ์„œ๋ฅผ ์ง์ ‘ ์ฝ์–ด๋ณด์„ธ์š”.

์ƒ์—…์ ์ธ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด์šฉ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”.

์ด ์ฝ”๋“œ์˜ ์ €์ž‘๊ถŒ์€ stepanowon@hotmail.com ์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค.

A. environment

  • Oracle 10g Express(H2 Database ์‚ฌ์šฉ๊ฐ€๋Šฅ)
  • Java 1.6 + Spring 3.1 + Eclipse(indigo) + Maven + iBatis 2.0 + Tomcat 6.0(HTTP Port 8000)

B. project

  • oauth2provider : ์ธ์ฆ์„œ๋ฒ„ & ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„
  • oauth2client : web server flow ํด๋ผ์ด์–ธํŠธ
  • oauth2client_agentflow : User Agent flow ํด๋ผ์ด์–ธํŠธ

C. configuration

  • table ์ƒ์„ฑ

    • DB๋Š” oracle 10g express์— oauth2/oauth2 ๊ณ„์ •์„ ์ƒ์„ฑํ•˜์—ฌ์•ผ ํ•จ.
    • oauth2provider์˜ src ๋””๋ ‰ํ† ๋ฆฌ์— oauth2provider.sql ํŒŒ์ผ์„ ์ฝ์–ด ํ…Œ์ด๋ธ” ์„ค์น˜ ์‚ฌ์šฉ์ž ๊ณ„์ •์€ t1000, gdhong, arnold ์„ธ๊ฐœ์˜ ๊ณ„์ •(์•”ํ˜ธ ๋™์ผ)
  • ์ƒ์ˆ˜๊ฐ’ ์„ค์ •

    • net.oauth.v2 ํŒจํ‚ค์ง€์˜ OAuth2Constantํด๋ž˜์Šค์—์„œ ์ƒ์ˆ˜๊ฐ’๋ณ€๊ฒฝ

      • USE_REFRESH_TOKEN : refresh token ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•จ.
      • AES_ENCRYPTION_KEY : ๋‚ด๋ถ€์—์„œ ํ† ํฐ ์ƒ์„ฑ์‹œ ์‚ฌ์šฉํ•  AES ์•”ํ˜ธํ™” ํ‚ค ๊ฐ’
      • EXPIRES_IN_VALUE : refresh token ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„(๊ธฐ๋ณธ๊ฐ’:3600(์ดˆ))
    • net.oauth.v2 ํŒจํ‚ค์ง€์˜ OAuth2Scope ํด๋ž˜์Šค์—์„œ ์ƒ์ˆ˜๊ฐ’ ๋ณ€๊ฒฝ

      • ์กฐ์ง์— ๋”ฐ๋ผ scope ์ƒ์ˆ˜๊ฐ’ ์„ค์ •(ํ˜„์žฌ๋Š” 6๊ฐœ์˜ ์ƒ˜ํ”Œ scope์„ ์„ค์ •ํ•˜์˜€์Œ)
      • resource ์—”๋“œํฌ์ธํŠธ url ๋ณ„๋กœ ๊ถŒํ•œ ์„ค์ •(scope ์ง€์ •)

D. endpoint

  • login & client app ๋“ฑ๋ก

    • com.multi.oauth2.provider.view.controller.LoginController ํด๋ž˜์Šค ์ฐธ์กฐ
    • com.multi.oauth2.provider.view.controller.ClientController ํด๋ž˜์Šค ์ฐธ์กฐ
  • authorization

    • /oauth2provider/oauth2/auth
      • response_type ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ code์ผ ๊ฒฝ์šฐ๋Š” web server flow
      • response_type ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ token์ผ ๊ฒฝ์šฐ๋Š” user agent flow(Mobile App, Desktopํฌํ•จ)
  • token

    • /oauth2provider/oauth2/token
      • grant_type ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ authorization_code ์ธ ๊ฒฝ์šฐ๋Š” server flow๋กœ access token ๋ฐœ๊ธ‰
      • grant_type ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ refresh_token ์ธ ๊ฒฝ์šฐ๋Š” access token์„ ๊ฐฑ์‹ ํ•˜๊ฒŒ ๋จ.
  • protected resource

    • ์ด ์ƒ˜ํ”Œ์—์„œ์˜ protected resource๋Š” ์Šน์ธํ•œ ์‚ฌ์šฉ์ž์˜ ๊ณ„์ • ์ •๋ณด๋กœ ๊ฐ€์ •ํ•˜์˜€๊ณ , endpoint๋Š” /oauth2provider/resource/myinfo.do ์ด๋‹ค.
    • ์—ฌ๋Ÿฌ protected resource์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด end point๋ณ„ ๊ถŒํ•œ์€ net.oauth.v2.OAuth2Scope ํด๋ž˜์Šค์˜ scopeUrlMap ํ•„๋“œ์— Hashmap์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค
    • access token ์ •๋ณด ๊ฒ€์ฆ, scope ๊ฒ€์ฆ์€ Interceptor(com.multi.oauth2.provider.util.Oauth2Interceptor)๋ฅผ ์ด์šฉํ•ด Controller ์‹คํ–‰ ์ „์— ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” Controller ์ƒ์—์„œ OAuth2Exception ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด ExceptionResolver๊ฐ€ error ํŽ˜์ด์ง€๋กœ ์ด๋™์‹œ์ผœ OAuth2.0 spec์— ๋”ฐ๋ฅธ ์—๋Ÿฌ ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€๋ฅผ ์‘๋‹ตํ•œ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ ์•ฑ์ด user agent ํƒ€์ž…์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ๋‹ค๋ฉด Protected Resource ์ ‘๊ทผ์‹œ Cross Domain ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ค„ ์ˆ˜ ์žˆ๋„๋ก CORS(Cross Origin Resource Sharing)๊ธฐ๋ฒ•์„ ์ง€์›ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.
  • ์ธ์ฆ๊ณผ์ • ๋˜๋Š” token ๋ฐœ๊ธ‰ ๊ณผ์ •์—์„œ CSRF(Cross Site Request Forgery)๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋Œ€์‘์œผ๋กœ OAuth2.0์—์„œ recommended๋œ state ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

E. ์ถ”๊ฐ€/๊ฐœ์„ ํ•  ์‚ฌํ•ญ..

  • OAuth 2.0 ์—์„œ๋Š” ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ WWW-Authenticate ํ—ค๋”๋ฅผ ํ†ตํ•ด ์‘๋‹ตํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ์œผ๋‚˜ Google, Facebook์€ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ๋ณธ ์ƒ˜ํ”Œ์€ facebook ์Šคํƒ€์ผ(?)๋กœ ์ž‘์„ฑํ•˜์˜€๋‹ค.

  • OAuth2.0 ์˜ ์ฒ˜๋ฆฌ๊ณผ์ • ์ค‘ Web Server flow ์™€ user agent flow๋งŒ ์ฒ˜๋ฆฌํ•˜์˜€๋‹ค.

    • password credential๊ณผ client credential ๋ฐฉ์‹์€ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค. ๋Œ€์‹  com.multi.oauth2.provider.view.controller.OAuth2Controller ํด๋ž˜์Šค์˜ 280๋ฒˆ ๋ผ์ธ์—์„œ ์ฃผ์„์ฒ˜๋ฆฌํ•˜์—ฌ ํ–ฅํ›„ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ์„ ๋ช…์‹œํ•˜์˜€๋‹ค.
    • refresh token์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€๋Š” OAuth2Constant์˜ ์ƒ์ˆ˜๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋จ.
    • refresh token์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” access token์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ •ํ•ด์ง„ ๊ทœ์น™์— ๋”ฐ๋ผ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜์˜€์Œ. --> ๋žœ๋ค๊ฐ’์œผ๋กœ ํ† ํฐ์„ ์ƒ์„ฑํ•˜์—ฌ DB์— ์ €์žฅํ•˜๋„๋ก ๋ณ€๊ฒฝ๊ฐ€๋Šฅ
  • ์ด ์ƒ˜ํ”Œ์—์„œ๋Š” redirect_uri ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” validation ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ App์„ ๋“ฑ๋กํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ URL์„ ์ž…๋ ฅํ•ด์•ผ ํ•จ( localhost ํ—ˆ์šฉ)

F. ์•Œ๋ฆผ์‚ฌํ•ญ

  • ์ด ์ƒ˜ํ”Œ์€ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ œ๋Œ€๋กœ๋œ ์„ค๊ณ„์—†์ด ๋š๋”ฑ๊ฑฐ๋ฆฌ๋ฉด์„œ ๋งŒ๋“ค์—ˆ์Œ.

  • ๋”ฐ๋ผ์„œ ์ž˜ ์ •๋ฆฌ๋œ ์ฝ”๋“œ๋Š” ์•„๋‹˜. ์ฃผ์„๋„ ๊ฐœ๋ฐœ์ƒˆ๋ฐœ์ž„.

  • ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ ์ฝ”๋“œ ์‚ฌ์ด์‚ฌ์ด์— ์ฝ˜์†” ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์œผ๋‹ˆ ์•Œ์•„์„œ๋“ค ์ œ๊ฑฐํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•จ.

  • oracle 10g ๋Œ€์‹ ์— ๋‹ค๋ฅธ DB ์“ธ๊ฑฐ๋ฉด maven dependency, applicationContext.xml, oauth2.xml, oauth2provider.sql ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ์“ฐ๋ฉด ๋จ.

G. OAuth2.0 Client

  • oauth2Client

    • Web Server flow๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋งŒ๋“  client์ž„.
    • HTTP ํ†ต์‹ ์„ ์œ„ํ•ด apache common์˜ HttpClent ํด๋ž˜์Šค ์‚ฌ์šฉ
    • client ๊ฐ ์š”์†Œ๋Š” jsp๋กœ ๊ฐ„๋‹จํžˆ ์ž‘์„ฑ
    • Settings.java ํŒŒ์ผ์„ ์ฐพ์•„ client_id, client_secret, ๊ฐ๊ฐ์˜ endpoint uri๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ ์‹คํ–‰ํ•จ.
  • oauth2client_agentflow

    • User Agent Flow ๋ฐฉ์‹์˜ Client์ž„.
    • html ํŒŒ์ผ๋กœ ์ž‘์„ฑ
    • jQuery๋ฅผ ์‚ฌ์šฉํ•œ ์›น์•ฑ, webview๋ฅผ ํ†ตํ•ด ์ธ์ฆํ•˜๊ณ  access token์„ ํš๋“ํ•˜๋Š” ๋ชจ๋ฐ”์ผ์•ฑ. ์ด๋ ‡๊ฒŒ ๋‘๊ฐ€์ง€์˜ ๊ฒฝ์šฐ ์ด ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ.
    • index.html๊ณผ callback.html์˜ ๋‚ด๋ถ€์˜ client_id, client_secret, ๊ฐ๊ฐ์˜ endpoint๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ•จ.
  • ์‹คํ–‰์— ์•ž์„œ client app ์„ ์ธ์ฆ์„œ๋ฒ„(oauth2provider)์— ๋“ฑ๋กํ•ด์•ผ ํ•จ.

About

OAuth 2.0 Provider & Client Java Samples

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published