OAuth 2.0 Client - application.yml, OAuth2ClientProperties

ํด๋ผ์ด์–ธํŠธ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ ์‹œ์ž‘

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ๊ฐ€ ์„œ๋ฒ„๋กœ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ํ•˜๊ฑฐ๋‚˜ ํ† ํฐ ์š”์ฒญ์„ ํ•  ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์ •๋ณด ๋ฐ ์—”๋“œํฌ์ธํŠธ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค.

  2. application.yml ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์— ํด๋ผ์ด์–ธํŠธ ์„ค์ •๊ณผ ์ธ๊ฐ€ ์„œ๋ฒ„ ์—”๋“œํฌ์ธํŠธ ์„ค์ •์„ ํ•œ๋‹ค.

  3. ์ดˆ๊ธฐํ™”๊ฐ€ ์ง„ํ–‰๋˜๋ฉด applcation.yml์— ํด๋ผ์ด์–ธํŠธ ๋ฐ ์—”๋“œํฌ์ธํŠธ ์ •๋ณด๊ฐ€ OAuth2ClientProperties ์˜ ๊ฐ ์†์„ฑ์— ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค.

  4. OAuth2ClientProperties ์— ๋ฐ”์ธ๋”ฉ ๋˜์–ด ์žˆ๋Š” ์†์„ฑ์˜ ๊ฐ’์€ ์ธ๊ฐ€ ์„œ๋ฒ„๋กœ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ํ•˜๊ธฐ ์œ„ํ•œ ClientRegistration ํด๋ž˜์Šค์˜ ํ•„๋“œ์— ์ €์žฅ๋œ๋‹ค.

  5. OAuth2Client๋Š” ClientRegistration ์„ ์ฐธ์กฐํ•ด์„œ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ธ๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•œ๋‹ค.

img.png

application.yml

spring:
  security:
    oauth2:
      client:
        registration: # ํด๋ผ์ด์–ธํŠธ ์„ค์ •
          keycloak:
            client-id: oauth2-client-app                                    # ์„œ๋น„์Šค ๊ณต๊ธ‰์ž์— ๋“ฑ๋ก๋œ ํด๋ผ์ด์–ธํŠธ ์•„์ด๋””
            client-name: oauth2-client-app                                  # ํด๋ผ์ด์–ธํŠธ ์ด๋ฆ„
            client-secret: ANwKmYvCcxiQbjsi4jh1JHqUWikngjec                 # ์„œ๋น„์Šค ๊ณต๊ธ‰์ž์— ๋“ฑ๋ก๋œ ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ
            redirect-uri: http://localhost:8081/login/oauth2/code/keycloak  # ์ธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๊ถŒํ•œ ์ฝ”๋“œ ๋ถ€์—ฌ ํ›„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ•˜๋Š” ์œ„์น˜
            # "/login/oauth2/code" ๋Š” ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์—์„œ ์ •ํ•ด๋†“์€ ๊ธฐ๋ณธ๊ฐ’
            authorization-grant-type: authorization_code                    # OAuth 2.0 ๊ถŒํ•œ ๋ถ€์—ฌ ํƒ€์ž…
            client-authentication-method: client_secret_basic               # ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช… ์ „์†ก ๋ฐฉ์‹
            scope:                                                          # ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ ์ œํ•œ ๋ฒ”์œ„
              - openid
              - email
              - profile
        provider: # ๊ณต๊ธ‰์ž ์„ค์ •
          keycloak:
            authorization-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/auth # OAuth 2.0 ๊ถŒํ•œ ์ฝ”๋“œ ๋ถ€์—ฌ ์—”๋“œํฌ์ธํŠธ
            token-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/token        # OAuth 2.0 ํ† ํฐ ์—”๋“œํฌ์ธํŠธ
            issuer-uri: http://localhost:8080/realms/oauth2                                     # ์„œ๋น„์Šค ๊ณต๊ธ‰์ž ์œ„์น˜
            user-info-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo # OAuth 2.0 UserInfo ์—”๋“œํฌ์ธํŠธ
            jwk-set-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/certs      # OAuth 2.0 JwkSetUri ์—”๋“œํฌ์ธํŠธ
            user-name-attribute: preferred_username                                             # OAuth 2.0 ์‚ฌ์šฉ์ž๋ช…์„ ์ถ”์ถœํ•˜๋Š” ํด๋ ˆ์ž„๋ช…

ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช… ์ „์†ก ๋ฐฉ์‹ ์ข…๋ฅ˜

  • client_secret_basic

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ client_id์™€ client_secret์„ HTTP ๊ธฐ๋ณธ ์ธ์ฆ ํ—ค๋”์— ํฌํ•จํ•˜์—ฌ ์„œ๋ฒ„์— ์ธ์ฆ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

    • HTTP ์š”์ฒญ์˜ Authorization ํ—ค๋”์— client_id์™€ client_secret์„ Base64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ Basic ๋ฐฉ์‹์œผ๋กœ ์ „์†กํ•œ๋‹ค.

  • client_secret_post

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ client_id์™€ client_secret์„ ์š”์ฒญ ๋ณธ๋ฌธ์— ํฌํ•จํ•˜์—ฌ ์„œ๋ฒ„์— ์ธ์ฆ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

    • client_id์™€ client_secret์„ application/x-www-form-urlencoded ํ˜•์‹์˜ ์š”์ฒญ ๋ณธ๋ฌธ์— ํฌํ•จํ•˜์—ฌ ์ „์†กํ•œ๋‹ค.

  • client_secret_jwt

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ client_secret์„ ์‚ฌ์šฉํ•˜์—ฌ JWT๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์ธ์ฆ ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

    • JWT๋Š” client_id์™€ ๊ธฐํƒ€ ํด๋ ˆ์ž„์„ ํฌํ•จํ•˜์—ฌ, client_secret์œผ๋กœ ์„œ๋ช…๋œ๋‹ค.

  • private_key_jwt

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ณต๊ฐœ ํ‚ค์™€ ๊ฐœ์ธ ํ‚ค ์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ JWT๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์ธ์ฆ ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

    • JWT๋Š” client_id์™€ ๊ธฐํƒ€ ํด๋ ˆ์ž„์„ ํฌํ•จํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์˜ ๊ฐœ์ธ ํ‚ค๋กœ ์„œ๋ช…๋œ๋‹ค.

  • none

    • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ณต๊ฐœ ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

    • client_id๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, client_secret์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค.


OAuth2ClientProperties

img.png
img_1.png
  • Registration ์€ ์ธ๊ฐ€ ์„œ๋ฒ„์— ๋“ฑ๋ก๋œ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • Provider ๋Š” ๊ณต๊ธ‰์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ๋ฐ ๊ณต๊ธ‰์ž์˜ ์ •๋ณด๋ฅผ ๊ฐ๊ฐ registration, provider ๋งต์— ์ €์žฅํ•˜๊ณ  ์ธ๊ฐ€ ์„œ๋ฒ„์™€์˜ ํ†ต์‹  ์‹œ ๊ฐ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.


์ด์ „ โ†ฉ๏ธ - OAuth 2.0 Client - OAuth 2.0 Client

๋ฉ”์ธ โซ

๋‹ค์Œ โ†ช๏ธ - OAuth 2.0 Client - ClientRegistration

Last updated