CREATE SECURITY INTEGRATION(External API ์ธ์ฆ)ยถ

๊ณ„์ •์— External API ์ธ์ฆ์„ ์œ„ํ•œ ์ƒˆ ๋ณด์•ˆ ํ†ตํ•ฉ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ธฐ์กด ํ†ตํ•ฉ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ณด์•ˆ ํ†ตํ•ฉ(์˜ˆ: External OAuth) ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ CREATE SECURITY INTEGRATION ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ:

ALTER SECURITY INTEGRATION(External API ์ธ์ฆ) , DESCRIBE INTEGRATION , DROP INTEGRATION , SHOW INTEGRATIONS

๊ตฌ๋ฌธยถ

OAuth: ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช…ยถ

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'CLIENT_CREDENTIALS']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_ALLOWED_SCOPES = ( '<scope_1>' [ , '<scope_2>' ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

OAuth: ์ธ์ฆ ์ฝ”๋“œ ๊ถŒํ•œ ๋ถ€์—ฌ ํ๋ฆ„ยถ

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_AUTHORIZATION_ENDPOINT = '<string_literal>' ]
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'AUTHORIZATION_CODE']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ COMMENT = '<string_literal>' ]
Copy

OAuth: JWT ์ „๋‹ฌ์ž ํ๋ฆ„ยถ

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_AUTHORIZATION_ENDPOINT = '<string_literal>' ]
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'JWT_BEARER']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ COMMENT = '<string_literal>' ]
Copy

ํ•„์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

name

ํ†ตํ•ฉ์˜ ์‹๋ณ„์ž(์ฆ‰, ์ด๋ฆ„)๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ๊ณ„์ •์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์‹๋ณ„์ž๋Š” ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ ์ „์ฒด ์‹๋ณ„์ž ๋ฌธ์ž์—ด์„ ํฐ๋”ฐ์˜ดํ‘œ(์˜ˆ: โ€œMy objectโ€)๋กœ ๋ฌถ์ง€ ์•Š๋Š” ํ•œ ๊ณต๋ฐฑ์ด๋‚˜ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ์‹๋ณ„์ž๋„ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹๋ณ„์ž ์š”๊ตฌ ์‚ฌํ•ญ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

TYPE = API_AUTHENTICATION

External API Authentication๊ณผ ํ•จ๊ป˜ OAuth 2.0์„ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€ ์„œ๋น„์Šค์™€ Snowflake ์‚ฌ์ด์— ๋ณด์•ˆ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

AUTH_TYPE = OAUTH2

ํ†ตํ•ฉ์—์„œ OAuth 2.0์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์ธ์ฆํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ENABLED = { TRUE | FALSE }

์ด ๋ณด์•ˆ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ• ์ง€, ์‚ฌ์šฉํ•˜์ง€ ์•Š์„์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

TRUE

ํ†ตํ•ฉ ์ •์˜์— ์ง€์ •๋œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ตํ•ฉ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FALSE

์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ†ตํ•ฉ์ด ์ผ์‹œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. Snowflake์™€ ์„œ๋“œ ํŒŒํ‹ฐ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ตํ•ฉ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ ํƒ์  ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

๋‹ค์Œ์€ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์„ ํƒํ•˜๋Š” OAuth ํ๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œํฌ๋ฆฟ์„ ๋งŒ๋“ค ๋•Œ ๊ตฌ์„ฑํ•˜๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ์ผ์น˜ํ•˜๋„๋ก ํ†ตํ•ฉ์—์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

OAUTH_AUTHORIZATION_ENDPOINT = 'string_literal'

์™ธ๋ถ€ ์„œ๋น„์Šค์— ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•œ URL์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ServiceNow ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด URL์ด ๋‹ค์Œ ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

https://<instance_name>.service-now.com/oauth_token
Copy

์—ฌ๊ธฐ์„œ instance_name ์€ ServiceNow ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

OAUTH_TOKEN_ENDPOINT = 'string_literal'

๊ถŒํ•œ ๋ถ€์—ฌ ๋˜๋Š” ์ƒˆ๋กœ ๊ณ ์นจ ํ† ํฐ์„ ์ œ์‹œํ•˜์—ฌ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. (์•ก์„ธ์Šค ํ† ํฐ์ด ์ง์ ‘ ๋ฐœํ–‰๋˜๋ฏ€๋กœ) ํ† ํฐ ์—”๋“œํฌ์ธํŠธ๋Š” ์•”์‹œ์  ๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ถŒํ•œ ๋ถ€์—ฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST

POST๊ฐ€ ์™ธ๋ถ€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

OAUTH_CLIENT_ID = 'string_literal'

์™ธ๋ถ€ ์„œ๋น„์Šค์˜ OAuth ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

OAUTH_CLIENT_SECRET = 'string_literal'

์ด์ „ ๋‹จ๊ณ„์—์„œ ServiceNow ์ธ์Šคํ„ด์Šค์˜ OAuth ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์‹œํฌ๋ฆฟ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋„ฅํ„ฐ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ServiceNow ์ธ์Šคํ„ด์Šค์—์„œ ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

OAUTH_GRANT = 'string_literal'

OAuth ํ๋ฆ„์˜ ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜:

  • ํ†ตํ•ฉ์—์„œ ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•  ๋•Œ 'CLIENT_CREDENTIALS'.

  • ํ†ตํ•ฉ์—์„œ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ 'AUTHORIZATION_CODE'.

  • ํ†ตํ•ฉ์—์„œ ์œ ํ˜• JWT์˜ ์ „๋‹ฌ์ž ํ† ํฐ(JSON ์›น ํ† ํฐ)์„ ์‚ฌ์šฉํ•  ๋•Œ 'JWT_BEARER'.

OAUTH_ACCESS_TOKEN_VALIDITY = integer

OAuth ์„œ๋ฒ„์—์„œ ๋ฐœ๊ธ‰ํ•œ OAuth ์•ก์„ธ์Šค ํ† ํฐ์˜ ๊ธฐ๋ณธ ์ˆ˜๋ช…(์ดˆ)์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ํ† ํฐ ์ˆ˜๋ช…์ด OAuth ํ† ํฐ ์‘๋‹ต์˜ ์ผ๋ถ€๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์ด ์†์„ฑ์— ์„ค์ •๋œ ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ’์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‘ ๊ฐ’ ์ค‘ ๋” ์ž‘์€ ๊ฐ’์ด ์•ก์„ธ์Šค ํ† ํฐ์„ ์ƒˆ๋กœ ๊ณ ์น˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

OAUTH_REFRESH_TOKEN_VALIDITY = integer

OAuth ์„œ๋ฒ„์—์„œ ์–ป์€ ์ƒˆ๋กœ ๊ณ ์นจ ํ† ํฐ์˜ ์œ ํšจ์„ฑ์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

OAUTH_ALLOWED_SCOPES = ( 'scope_1' [ , 'scope_2' ... ] )

OAuth ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช… ํ๋ฆ„ ์ค‘์— ํ†ตํ•ฉ์—์„œ USAGE๊ฐ€ ์žˆ๋Š” ์—ญํ• ๋กœ OAuth์—์„œ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•  ๋ฒ”์œ„์˜ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์„ ์ง€์ •ํ•˜๋ฉฐ, ๊ฐ ๋ฒ”์œ„๋Š” ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค.

์ด ๋ชฉ๋ก์€ ๋ณด์•ˆ ํ†ตํ•ฉ์˜ OAUTH_ALLOWED_SCOPES ์†์„ฑ์— ์ •์˜๋œ ๋ฒ”์œ„์˜ ํ•˜์œ„ ์„ธํŠธ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. OAUTH_SCOPES ์†์„ฑ ๊ฐ’์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ณด์•ˆ ํ†ตํ•ฉ์— ์ง€์ •๋œ ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.

ServiceNow ์ปค๋„ฅํ„ฐ์˜ ๊ฒฝ์šฐ ์œ ์ผํ•˜๊ฒŒ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„ ๊ฐ’์€ 'useraccount' ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: ๋นˆ ๋ชฉ๋ก(์ฆ‰, []).

COMMENT = 'string_literal'

ํ†ตํ•ฉ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’: ๊ฐ’ ์—†์Œ

์•ก์„ธ์Šค ์ œ์–ด ์š”๊ตฌ ์‚ฌํ•ญยถ

์ด ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ญํ•  ์—๋Š” ์ตœ์†Œํ•œ ๋‹ค์Œ ๊ถŒํ•œ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ

์˜ค๋ธŒ์ ํŠธ

์ฐธ๊ณ 

CREATE INTEGRATION

๊ณ„์ •

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

์ง€์ •๋œ ๊ถŒํ•œ ์„ธํŠธ๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ• ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ์‚ฌ์šฉ์ž ์ง€์ • ์—ญํ•  ๋งŒ๋“ค๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ณด์•ˆ ์˜ค๋ธŒ์ ํŠธ ์— ๋Œ€ํ•ด SQL ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์—ญํ• ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ •๋ณด๋Š” ์•ก์„ธ์Šค ์ œ์–ด์˜ ๊ฐœ์š” ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ จ:

    ์ฃผ์˜

    ๊ณ ๊ฐ์€ Snowflake ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ(์‚ฌ์šฉ์ž ์˜ค๋ธŒ์ ํŠธ ์ œ์™ธ), ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ, ์ˆ˜์ถœ ํ†ต์ œ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ธฐํƒ€ ๊ทœ์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์ž…๋ ฅ๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Snowflake์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • CREATE OR REPLACE <์˜ค๋ธŒ์ ํŠธ> ๋ฌธ์€ ์›์ž์„ฑ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ด์ „ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์ƒˆ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์˜ˆยถ

์ฝ”๋“œ ๊ถŒํ•œ ๋ถ€์—ฌ ํ๋ฆ„๊ณผ ํ•จ๊ป˜ OAuth๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Snowflake๋ฅผ myinstance ๋ผ๋Š” ServiceNow ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด servicenow_oauth ๋ผ๋Š” ๋ณด์•ˆ ํ†ตํ•ฉ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

CREATE SECURITY INTEGRATION servicenow_oauth
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST
  OAUTH_CLIENT_ID = 'sn-oauth-134o9erqfedlc'
  OAUTH_CLIENT_SECRET = 'eb9vaXsrcEvrFdfcvCaoijhilj4fc'
  OAUTH_TOKEN_ENDPOINT = 'https://myinstance.service-now.com/oauth_token.do'
  ENABLED = TRUE;
Copy

sharepoint_security_integration ์ด๋ผ๋Š” ๋ณด์•ˆ ํ†ตํ•ฉ์„ ๋งŒ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ ์ฆ๋ช…๊ณผ ํ•จ๊ป˜ OAuth ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Snowflake๋ฅผ Microsoft Sharepoint์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

CREATE SECURITY INTEGRATION sharepoint_security_integration
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST
  OAUTH_CLIENT_ID = 'YOUR_CLIENT_ID'
  OAUTH_CLIENT_SECRET = 'YOUR_CLIENT_SECRET'
  OAUTH_GRANT = 'CLIENT_CREDENTIALS'
  OAUTH_TOKEN_ENDPOINT = 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token'
  OAUTH_ALLOWED_SCOPES = ('https://graph.microsoft.com/.default')
  ENABLED = TRUE;
Copy