Adapter 설정 가이드

Adapter 설정 가이드

Adapter 환경설정 파일에 대한 설명입니다. ADFS Adapter 적용하기 전에 반드시 환경설정을 먼저 해야 합니다.

주의

adapter 설치위치 변경 사항

adapter 1.2.0.6부터 C 드라이브 이외의 다른 드라이브에 설치가 가능합니다.

  • 기존 : C:/ADFSadapter 에만 설치
  • 변경 : C to Z 드라이브의 root에 설치
  • 예시: C:/ADFSadapter , D:/ADFSadapter , E:/ADFSadapter , …… , Z:/ADFSadapter
  • 주의사항 : 단 1개의 드라이브에만 설치해야 하며, 만일 여러 개의 드라이브에 설치된 경우 C to Z 스캔하면서 가장 먼저 발견된 디렉토리를 사용함

아래의 예시는, adapter를 C:\ADFSadapter 디렉토리에 설치한 경우입니다.
C 이외의 다른 드라이브에 설치한 경우, 아래의 예시에서 드라이브명(drive letter)만 변경하면 됩니다.

  • 예시: D:\ADFSadapter 에 설치한 경우 ini 경로 → D:\ADFSadapter\ADFSadapter.ini

파일명 및 경로

  • 파일명: ADFSadapter.ini
  • 전체 경로: C:\ADFSadapter\ADFSadapter.ini
  • 파일 인코딩: 반드시 UTF-8 로 저장할 것 (한글이 깨짐현상 발생)

알아두어야 할 점

* 값을 표현할때 "와" 를 사용할 수 있으며 = 좌우에 빈칸을 입력해도 됩니다.
+ Value 의 앞뒤에 있는 공백은 Trim 처리 됩니다.
+ 아래의 Value는 모두 동일함
+ 예1) MAIN_TITLE = DWP MFA Adapter
+ 예2) MAIN_TITLE = DWP MFA Adapter
+ 예3) MAIN_TITLE = "DWP MFA Adapter"
+ 예4) MAIN_TITLE = " DWP MFA Adapter "

* 섹션 이름들 중에 뒷부분에 -1033, -1042 가 붙는 것들은 locale 을 의미합니다.
+ 최소한 1033 은 반드시 있어야 합니다.
+ locale number : 1033 (en-us), 1042 (ko)
+ locale section : MFA-1033, MFA-1042, TXT-1033, TXT-1042, MSG-1033, MSG-1042

ini 파일 구조 예시

아래의 설정 값 예시 중에 보안 목적으로 masking 한 값들이 있으며, 실제 값은 asterisk 가 아닙니다.

# ADFS MFA Adapter 환경 설정
# 설치위치 변경 사항
#   - v1.2.0.6 이전 : C:\ADFSadapter\ADFSadapter.ini
#   - v1.2.0.6 부터 : C 이외의 다른 드라이브에 설치할 수 있음 (adapter 리소스 설치한 위치와 동일)
#     예시: C:\ADFSadapter\ADFSadapter.ini , D:\ADFSadapter\ADFSadapter.ini , E:\ADFSadapter\ADFSadapter.ini
# 주의 : DLL 파일명은 ADFSadapter.dll 이며, 기존의 Nexsign 연계한 MFAadapter.dll과는 다름


# 값을 표현할때 " 와 ' 를 사용할 수 있으며 = 좌우에 빈칸을 입력해도 됩니다
# Value 의 앞뒤에 있는 공백은 Trim 처리 됩니다.
# 아래의 Value는 모두 동일합니다.
# 예1) MAIN_TITLE=ADFS MFA Adapter
# 예2) MAIN_TITLE = ADFS MFA Adapter
# 예3) MAIN_TITLE = "ADFS MFA Adapter"
# 예4) MAIN_TITLE = "   ADFS MFA Adapter   "


# 섹션 이름들 중에 뒷부분에 -1033, -1042 가 붙는 것들은 locale 을 의미합니다
# 최소한 1033 은 반드시 있어야 합니다
# locale number : 1033 (en-us), 1042 (ko)
# locale section : MFA-1033, MFA-1042, TXT-1033, TXT-1042, MSG-1033, MSG-1042


# LOG_LEVEL (Windows 이벤트 로그에 기록하는 기준)
# 0 : Error
# 1 : Error + Warning
# 2 : Error + Warning + Information + Debug


[MAIN]
MAIN_MFA_TITLE="ADFS MFA Adapter"
MAIN_CLAIM1=http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod
MAIN_CLAIM2=http://schemas.microsoft.com/ws/2012/12/authmethod/otp


# MFA API 정보
# URL 끝부분에 "/" 붙이지 말 것
#MFA_API_URL="https://stg2-cloud.singleid.samsung.net/test/common-api/open/v1.1/mfa/request"
MFA_API_URL="https://stg1-cloud.singleid.samsung.net/test/common-api/open/v1.1/mfa/request"
CONSUMER_KEY="**************************************"
SECRET_KEY="**************************************"


# Donmain vs Consumer Key 리스트
# 도메인별로 Consumer Key가 다른 경우에는 리스트로 나열 (이런 경우, 위의 CONSUMER_KEY 값을 비울 것)
# Reqeust Token의 sys 값에 대입
# 형태 : DOMAIN_CONSUMER_KEY_##=domain;consumerKey
# 예시: DOMAIN_CONSUMER_KEY_01=aaa.com;**************************************
#     DOMAIN_CONSUMER_KEY_02=bbb.com;**************************************
# (주의) CONSUMER_KEY 값과 리스트 값이 모두 있다면, CONSUMER_KEY 값만 사용함
DOMAIN_CONSUMER_KEY_01=aaa.com;**************************************
DOMAIN_CONSUMER_KEY_02=bbb.com;**************************************

# Donmain vs Secret Key 리스트
# 도메인별로 Secret Key가 다른 경우에는 리스트로 나열 (이런 경우, 위의 SECRET_KEY 값을 비울 것)
# 형태 : DOMAIN_SECRET_KEY_##=domain;secretKey
# 예시: DOMAIN_SECRET_KEY_01=aaa.com;**************************************
#     DOMAIN_SECRET_KEY_02=bbb.com;**************************************
# (주의) SECRET_KEY 값과 리스트 값이 모두 있다면, SECRET_KEY 값만 사용함
DOMAIN_SECRET_KEY_01=aaa.com;**************************************
DOMAIN_SECRET_KEY_02=bbb.com;**************************************

# LDAP Search 결과에 따른, MFA 진행 여부
# 0 : LDAP Search를 하지 않음 (아래의 LDAP_SERVER, LDAP_USE_IDPW, ... 등의 정보 사용하지 않음. token에는 빈 값 대입)
# 1 : LDAP Search를 시도하지만 실패해도 관계없음 (서버 실패, 정보 없음 등이 발생하여도 MFA 진행함. token에는 빈 값 대입)
# 2 : LDAP Search가 성공 & 사용자 정보가 존재해야 함 (사용자 정보가 존재할 경우에만 진행함. 단, 결과 값이 빈 값이어도 진행함)
USE_LDAP_SEARCH=1


# LDAP 주소와 ID/PW
# LDAP_SERVER는 domain, ipv4, ipv6 등의 3가지 모두 가능하며, 앞부분에 대문자 "LDAP://" 을 붙여야 함 (반드시 대문자)
# 예시: LDAP://adpw5004.hw.dev , LDAP://70.2.180.218 , LDAP://fe80::644b:3c9f:c5ac:ce1c%10
# ID/PW를 사용하려면 LDAP_USE_IDPW 값을 1, 사용하지 않으려면 LDAP_USE_IDPW 값을 0 으로 설정
# SSL/TLS 사용하려면 LDAP_SSLTLS 값을 1, 사용하지 않으려면 LDAP_SSLTLS 값을 0 으로 설정 (단, LDAP_USE_IDPW=1 인 경우에만 해당)
LDAP_SERVER="LDAP://adpw5004.hw.dev"
LDAP_USE_IDPW=1
LDAP_SSLTLS=1
LDAP_ID="isadmin"
LDAP_PW="sds*****"


# DNS Lookup을 하여 LDAP 서버(LDAP_SERVER)의 IP 주소를 확인하고, IP 주소 기반으로 접속 여부
# LDAP_SERVER 값이 IP(ipv4, ipv6)로 설정되어 있어도 DNS Lookup을 수행하며, IP 그대로 리턴됨
# 만약, DNS Lookup을 실패하면, LDAP_SERVER 값 그대로 접속
# 0 : LDAP_SERVER 값 그대로 서버에 접속 (DNS lookup 하지 않음)
# 1 : DNS lookup으로 IP 주소를 확인하여 LDAP 서버에 접속 (DNS lookup 결과 리스트에서 첫번째 IP 사용)
# 2 : DNS lookup으로 IP 주소를 확인하고, LDAP_WHITE_IP_## 리스트에서 가장 먼저 해당되는 IP를 사용 (리스트에 없으면, LDAP_SERVER 사용)
# 3 : DNS lookup으로 IP 주소를 확인하고, LDAP_WHITE_IP_## 리스트에서 가장 먼저 해당되는 IP를 사용 (리스트에 없으면, LDAP 접속 안함)
LDAP_DNS_LOOKUP=1


# DNS Lookup 결과가 여러 개일때, 첫번째 IP 주소로 연결이 안되면 그 다음 IP 주소로 시도할지 여부
# 예시: lookup 결과가 4개 : 1차 IP 연결 실패 -> 2차 IP 연결 시도 & 싪패 -> 3차 IP 연결 시도 & 싪패 -> 4차 IP 연결 시도
LDAP_DNS_IF_FAIL_USE_NEXT=1


# DNS Lookup 결과와 비교하는 접속 허용된 LDAP 서버 IP 리스트 (LDAP_DNS_LOOKUP = 2 or 3 인 경우에만 해당)
# LDAP_WHITE_IP_## 형태이며, 01부터 99까지 순차적으로 기록
# DNS Lookup 결과와 리스트를 순차적으로 비교
# IPv4, IPv6 형태로 기록 (동일한 서버의 IPv4, IPv6가 있다면 리스트의 앞순위에 있는 IP가 적용됨)
# DNS Lookup 결과 순서와 White IP 리스트 순서가 다르다면 -> White IP 리스트 순서를 따름
LDAP_WHITE_IP_01="70.2.180.218"
LDAP_WHITE_IP_02="fe80::644b:3c9f:c5ac:ce1c%10"


# 사용자 정보를 암호화할지 여부 (예: mobile, email 등)
# 대상 : USERINFO_## 리스트
# 암호화 여부에 따라 API 서버에 전송하는 token의 claim 이름이 다름
# 0 : 암호화 하지 않음 -> token의 claim 이름이 plainMobile, plainEmail
# 1 : 암호화 -> token의 claim 이름이 mobile, email
USERINFO_ENCRYPT=0


# LDAP Search할 사용자 정보 attribute name과 JWT token에 사용할 claim name (2개 값을 구분하는 delimeter = ";")
# 형태: USERINFO_## = attribute;encryptedClaim;plainClaim
#   예시: LDAP에서 "mail" 속성을 읽어서, JWT에 "email" claim으로 사용된다면 -> "mail;email;plainEmail"
# key 명칭은 "USERINFO_##" 형태로 하고, 시작은 USERINFO_01
# key 갯수 : 0개 ~ 최대 99개 (0개인 경우, ini에 아무것도 적지 않으면 되며, USERINFO_00 이라고 적지 말 것)
# 주의사항) USERINFO_##에서 ## 에 해당되는 숫자는 반드시 01부터 시작하며, 여러 개인 경우 번호가 끊어지지 않아야 함
#           USERINFO_01, USERINFO_02, USERINFO_03 : OK (01, 02, 03 정보가 사용됨)
#           USERINFO_01, USERINFO_02, USERINFO_05 : 02까지 읽고, 끊어진 번호 이후는 사용하지 않음 (01, 02 정보가 사용됨)
USERINFO_01=mobile;mobile;plainMobile
USERINFO_02=mail;email;plainEmail


# MFA API 서버가 Callback 해줄때, 결과 Parameter에 사용되는 Key 이름
# 예시: https://adpw5004.hw.dev/adfs/ls?client-request-id=xxxxxx&pullStatus=0&jwtTokenResponse=yyyyyy
KEY_NAME_IN_RESPONSE="jwtTokenResponse"


# JWT Token의 exp에 적용될 더하기 값
# 형테 : 일시분초(dhms) 형태의 문자열 -> 1d=86400, 1h=3600, 1m=60 (dhms 가 전혀 없는 단순 숫자는 초로 판단함)
# 예시1 : 1d02h38m27s -> 95907 초
# 예시2 : 12345 -> 12345 초
TOKEN_EXP_TIME=1d


# API 호출할때 구성하는 token에 client claim을 추가할지 여부
# client : SAML인 경우 issuer, OIDC인 경우 client-id
# 0 : token에 client 포함시키지 않음
# 1 : token에 client 포함
TOKEN_CLAIM_CLIENT=0


# MFA nonce(guid, requset-id) 검증 방법
# 0 : 검증 안함
# 1 : adapter가 생성한 guid를 LDAP에 저장/비교하는 방식 (adapter가 검증)
#     -> 관련 설정 값 : CACHE_ATTRIBUTE, CACHE_DELIMETER, SKEW_SECONDS, CACHE_LIFE_TIME
# 2 : API 서버가 생성한 requeset-id를 adapter가 받아서 호출 URL에 사용하는 방식 (API 서버가 검증)
#     -> 관련 설정 값 : MFA_VERIFY_URL
MFA_VERIFY_TYPE=2


# MFA 결과검증 URL (서버 to 서버 통신) : URL 뒷부분에 API 서버로부터 받은 {request-id}를 덧붙여서 호출함
# adapter는 리턴 200 (OK) 인지 확인하여 MFA 결과 처리
# URL 끝부분에 "/" 붙이지 말 것
MFA_VERIFY_URL="https://stg1-cloud.iam.samsung.net/test/common-api/open/v1.1/mfa/request/status"


# MFA 결과검증할때 사용할 보안 프로토콜
# 선택 가능한 프로토콜 (대소문자 구분 없음) : TLS12, TLS13
# (주의) SSL3, TLS, TLS11 은 사용하지 않음
MFA_VERIFY_SECURE_PROTOCOL="TLS12"


# 사용자의 req guid 값을 저장할 LDAP attribute의 이름
# (주의) LDAP에 write 권한이 있어야 함
CACHE_ATTRIBUTE="otherPager"


# LDAP에 저장하는 req + 시간 정보를 조합할때 사용하는 delimeter -> "req;시간"
CACHE_DELIMETER=";"


# LDAP에 저장된 req의 시간과 JWT 수신시 시간의 차이 허용치 (초단위)
# MFA 선택화면 누를 때가 아니라, AD 로그인 직후의 시간이므로 (MFA 선택화면 보일때 이미 시간이 저장되었음)
# 사용자가 MFA 선택화면 누르고 Passcode 입력할 때까지의 시간이 아님
# 따라서, tight 하게 시간을 설정하면 안되며, 1시간 정도가 적당?? (MFA 선택을 1시간 고민하는 사람이 있나?)
SKEW_SECONDS=3600


# LDAP에 저장된 req의 수명 -> 다음 access시 시간 확인해서 이전의 오래된 것들 삭제
# 형태 : 일시분초(dhms) 형태의 문자열 -> 1d=86400, 1h=3600, 1m=60 (dhms 가 전혀 없는 단순 숫자는 초로 판단함)
# 예시1 : 1d02h38m27s -> 95907 초
# 예시2 : 12345 -> 12345 초
CACHE_LIFE_TIME=1d


# Adapter 기능을 ByPass 할 것인지 여부 (0=정상 사용, 283901=무력화, 그 외 값들=정상 사용)
# MFA 기능 문제로 급하게 adapter 기능의 무력화가 필요한 비상 상황에서 사용
# 평상시에는 절대로 수정하지 말 것 -> 평상시 값은 0
# 주의 : 무력화하려면 반드시 정확한 값을 설정해야 함 (0 이외의 숫자가 해당되는 것이 아니며 정확한 숫자 필요함. noise 우려)
BYPASS_ADAPTER=0


[API]
API_SYSTEMNAME=SingleID


[MSG-1033]
MSG_INTERNAL_ERROR="Internal error occurred. Contact administrator."


[MSG-1042]
MSG_INTERNAL_ERROR="Internal error occurred. Contact administrator."


[MANAGE]
LOG_LEVEL=2

설정 값 설명

  • 값 고정 : 하단 테이블의 설정 값 컬럼에 표시된 값을 ADFS 서버에 설치시에도 그대로 사용한다는 의미합니다.
  • 영문, 한국어 이외의 언어를 추가하고자 한다면, 2개 Section에 대해서는 추가가 가능합니다.
    • MSG-1033, MSG-1042
dssKey설정 값 (예시)값 고정설명
MAINMAIN_MFA_TITLEADFS MFA AdapterOHTML 페이지 타이틀 (MFA 기능에 영향 없음)
MAIN_CLAIM1http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethodO반드시 좌측 값을 그대로 적용할 것
MAIN_CLAIM2http://schemas.microsoft.com/ws/2012/12/authmethod/otpO반드시 좌측 값을 그대로 적용할 것
MFA_API_URLhttps://stg2-cloud.singleid.samsung.net/test/common-api/open/v1.1/mfa/requestSingleID MFA API 주소
  • tenant에 따라서 달라질 수 있으므로, 정확한 주소 값을 확인해야 함
CONSUMER_KEY4312a8b9-75c4-7897-89a7-89347f18943eSingleID 로부터 발급받은 Consumer Key
SECRET_KEYgQgkyLVO6FR8vJkLtlgBiupsRM/ilgrbEfoKWRnhALd=SingleID 로부터 발급받은 Secret Key
  • JWT Signautre 검증에 사용
  • 외부 공개 절대 금지
DOMAIN_CONSUMER_KEY_014312a8b9-75c4-7897-89a7-89347f18943eDonmain vs Consumer Key 리스트
  • 도메인별로 Consumer Key가 다른 경우에는 리스트로 나열 (이런 경우, 위의 CONSUMER_KEY 값을 비울 것)
  • 형태 : DOMAIN_CONSUMER_KEY_##=domain;consumerKey
  • 예시:
    DOMAIN_CONSUMER_KEY_01=aaa.com;4312a8b9-75c4-7897-89a7-89347f18943e
    DOMAIN_CONSUMER_KEY_02=bbb.com;96567780-2b12-23da-637c-9375a6502d5a
  • (주의) CONSUMER_KEY 값과 리스트 값이 모두 있다면, CONSUMER_KEY 값만 사용함
DOMAIN_CONSUMER_KEY_0296567780-2b12-23da-637c-9375a6502d5a
DOMAIN_CONSUMER_KEY_##367c89d5-88f7-978a-9739-8ed21748f36b
DOMAIN_SECRET_KEY_01gQgkyLVO6FR8vJkLtlgBiupsRM/ilgrbEfoKWRnhALd=Donmain vs Secret Key 리스트
  • 도메인별로 Secret Key가 다른 경우에는 리스트로 나열 (이런 경우, 위의 SECRET_KEY 값을 비울 것)
  • 형태 : DOMAIN_SECRET_KEY_##=domain;secretKey
  • 예시:
    DOMAIN_SECRET_KEY_01=aaa.com;gQgkyLVO6FR8vJkLtlgBiupsRM/ilgrbEfoKWRnhALd=
    DOMAIN_SECRET_KEY_02=bbb.com;kgkWRnLygQhsRgrLVbtKlO6FiLdABupEgoMR8v/ilfJ=
  • (주의) SECRET_KEY 값과 리스트 값이 모두 있다면, SECRET_KEY 값만 사용함
DOMAIN_SECRET_KEY_02kgkWRnLygQhsRgrLVbtKlO6FiLdABupEgoMR8v/ilfJ=
DOMAIN_SECRET_KEY_##dABupkRnLygQhsrLgWVRbt8vRgkLilLKlO1FioMgfJE=
USE_LDAP_SEARCH0 or 1 or 2LDAP Search 결과에 따른, MFA 진행 여부
  • 0 : LDAP Search를 하지 않음 (아래의 LDAP_SERVER, LDAP_USE_IDPW, … 등의 정보 사용하지 않음. token에는 빈 값 대입)
  • 1 : LDAP Search를 시도하지만 실패해도 관계없음 (서버 실패, 정보 없음 등이 발생하여도 MFA 진행함. token에는 빈 값 대입)
  • 2 : LDAP Search가 성공 & 사용자 정보가 존재해야 함 (사용자 정보가 존재할 경우에만 진행함. 단, 결과 값이 빈 값이어도 진행함)
LDAP_SERVERLDAP://adpw5004.hw.devAD 사용자 정보를 Query 할 수 있는 LDAP 주소
  • domain, ipv4, ipv6 등의 3가지 모두 가능하며, 앞부분에 “LDAP://” 을 붙여야 함
LDAP_USE_IDPW0 or 1LDAP 접속시 id/pw를 사용하는지 여부
  • adapter는 시스템 권한으로 동작하므로 id/pw 필요없이 LDAP 접속이 되는 것이 일반적이나, 그렇지 않은 경우도 존재함
  • id/pw 사용하지 않고 접속하도록 설정한 상태에서 이벤트 로그에 AD 접속 에러가 있다면, id/pw를 사용하여 접속하도록 설정 필요
  • 이 값을 1로 설정하면, LDAP_ID, LDAP_PW 값을 반드시 설정하여야 함
LDAP_SSLTLS0 or 1LDAP 연결시 SSL/TLS를 사용할지 여부
  • 일반적으로 사용하도록 설정
LDAP_IDLDAP 접속 idLDAP 접속 id (LDAP_USE_IDPW=1 인 경우)
LDAP_PWLDAP 접속 pwLDAP 접속 pw (LDAP_USE_IDPW=1 인 경우)
LDAP_DNS_LOOKUP0 or 1 or 2 or 3DNS Lookup을 하여 LDAP 서버(LDAP_SERVER)의 IP 주소를 확인하고, IP 주소 기반으로 접속 여부
  • 0 : LDAP_SERVER 값 그대로 서버에 접속 (DNS lookup 하지 않음)
  • 1 : DNS lookup으로 IP 주소를 확인하여 LDAP 서버에 접속 (DNS lookup 결과 리스트에서 첫번째 IP 사용)
  • 2 : DNS lookup으로 IP 주소를 확인하고, LDAP_WHITE_IP_## 리스트에서 가장 먼저 해당되는 IP를 사용 (리스트에 없으면, LDAP_SERVER 사용)
  • 3 : DNS lookup으로 IP 주소를 확인하고, LDAP_WHITE_IP_## 리스트에서 가장 먼저 해당되는 IP를 사용 (리스트에 없으면, LDAP 접속 안함)
LDAP_DNS_IF_FAIL_USE_NEXT0 or 1DNS Lookup 결과가 여러 개일때, 첫번째 IP 주소로 연결이 안되면 그 다음 IP 주소로 시도할지 여부
  • 예시: lookup 결과가 4개 : 1차 IP 연결 실패 -> 2차 IP 연결 시도 & 실패 -> 3차 IP 연결 시도 & 실패 -> 4차 IP 연결 시도
LDAP_WHITE_IP_0170.2.180.218DNS Lookup 결과와 비교하는 접속 허용된 LDAP 서버 IP 리스트 (LDAP_DNS_LOOKUP = 2 or 3 인 경우에만 해당)
  • LDAP_WHITE_IP_## 형태이며, 01부터 99까지 순차적으로 기록
  • DNS Lookup 결과와 리스트를 순차적으로 비교
  • IPv4, IPv6 형태로 기록 (동일한 서버의 IPv4, IPv6가 있다면 리스트의 앞순위에 있는 IP가 적용됨)
  • DNS Lookup 결과 순서와 White IP 리스트 순서가 다르다면 → White IP 리스트 순서를 따름
LDAP_WHITE_IP_02fe80::644b:3c9f:c5ac:ce1c%10
LDAP_WHITE_IP_##A. : 01 ~ 99
White IP 주소 (IPv4 or IPv6)
USERINFO_ENCRYPT0 or 1사용자 정보를 암호화할지 여부 (예: mobile, email 등)
  • 대상 : USERINFO_## 리스트
    • 암호화 여부에 따라 API 서버에 전송하는 token의 claim 이름이 다름
    • 0 : 암호화 하지 않음 -> token의 claim 이름이 plainMobile, plainEmail
    • 1 : 암호화 -> token의 claim 이름이 mobile, email
USERINFO_01mobile;mobile;plainMobileOLDAP Search할 사용자 정보 attribute name과 JWT token에 사용할 claim name (3개 값을 구분하는 delimeter = “;”)
  • 형태: USERINFO_## = attribute;encryptedClaim;plainClaim
  • 예시: LDAP에서 “mail” 속성을 읽어서, JWT에 암호화된 값은 “email” claim으로 , 평문 값은 “plainEmail” claim으로 사용된다면 → “mail;email;plainEmail”
USERINFO_02mail;email;plainEmailO
USERINFO_##A. : 01 ~ 99
[LDAP attribute name];[encrypted token claim name];[plain token claim name]
KEY_NAME_IN_RESPONSEjwtTokenResponseOMFA API 서버가 Callback 해줄때, 결과 Parameter에 사용되는 Key 이름
TOKEN_EXP_TIME1dJWT Token의 exp에 적용될 더하기 값
  • 일시분초(dhms) 형태의 문자열
    1d=86400, 1h=3600, 1m=60
  • dhms 가 전혀 없는 단순 숫자는 초로 판단함
  • 예시1 : 1d02h38m27s → 95907 초
    예시2 : 12345 → 12345 초
TOKEN_CLAIM_CLIENT0 or 1API 호출할때 구성하는 token에 client claim을 추가할지 여부
  • client : SAML인 경우 issuer, OIDC인 경우 client-id
  • 0 : token에 client 포함시키지 않음
  • 1 : token에 client 포함
MFA_VERIFY_TYPE0 or 1 or 2MFA nonce(guid, requset-id) 검증 방법
  • 0 : 검증 안함
  • 1 : adapter가 생성한 guid를 LDAP에 저장/비교하는 방식 (adapter가 검증) → 관련 설정 값 : CACHE_ATTRIBUTE, CACHE_DELIMETER, SKEW_SECONDS, CACHE_LIFE_TIME
  • 2 : API 서버가 생성한 requeset-id를 adapter가 받아서 호출 URL에 사용하는 방식 (API 서버가 검증) → 관련 설정 값 : MFA_VERIFY_URL
MFA_VERIFY_URLhttps://stg1-cloud.iam.samsung.net/test/common-api/open/v1.1/mfa/request/statusMFA 결과검증 URL (서버 to 서버 통신) : URL 뒷부분에 API 서버로부터 받은 {request-id}를 덧붙여서 호출함 → adapter는 리턴 200 (OK) 인지 확인하여 MFA 결과 처리
  • URL 끝부분에 “/” 붙이지 말 것
MFA_VERIFY_SECURE_PROTOCOLTLS12 or TLS13MFA 결과검증할때 사용할 보안 프로토콜
  • 선택 가능한 프로토콜 (대소문자 구분 없음) : TLS12, TLS13
  • (주의) SSL3, TLS, TLS11 은 사용하지 않음
CACHE_ATTRIBUTEotherPagerO사용자의 req guid 값을 저장할 LDAP attribute의 이름
CACHE_DELIMETER“;”LDAP에 저장하는 req + 시간 정보를 조합할때 사용하는 delimeter -> “req;시간”
SKEW_SECONDS3600LDAP에 저장된 req의 시간과 JWT 수신시 시간의 차이 허용치 (초단위)
  • MFA 선택화면 누를 때가 아니라, AD 로그인 직후의 시간이므로 (MFA 선택화면 보일때 이미 시간이 저장되었음)
  • 사용자가 MFA 선택화면 누르고 Passcode 입력할 때까지의 시간이 아님
  • 따라서, tight 하게 시간을 설정하면 안되며, 1시간 정도가 적당?? (MFA 선택을 1시간 고민하는 사람이 있나?)
CACHE_LIFE_TIME1dLDAP에 저장된 req의 수명 -> 다음 access시 시간 확인해서 이전의 오래된 것들 삭제
  • 일시분초(dhms) 형태의 문자열
    1d=86400, 1h=3600, 1m=60
    (dhms 가 전혀 없는 단순 숫자는 초로 판단함)
BYPASS_ADAPTER0 or 283901Adapter 기능을 ByPass 할 것인지 여부 (0=정상 사용, 283901=무력화, 그 외 값들=정상 사용)
  • MFA 기능 문제로 급하게 adapter 기능의 무력화가 필요한 비상 상황에서 사용
  • 평상시에는 절대로 수정하지 말 것 -> 평상시 값은 0
  • 주의 : 무력화하려면 반드시 정확한 값을 설정해야 함 (0 이외의 숫자가 해당되는 것이 아니며 정확한 숫자 필요함. noise 우려)
APIAPI_SYSTEMNAMESingleIDO(MFA 기능에 영향 없음)
MSG-1033MSG_INTERNAL_ERROR“Internal error occurred. Contact administrator.”인증중단, 오류발생 등으로 진행을 멈출때 사용자에게 보여주는 메시지 (영문)
MSG-1042MSG_INTERNAL_ERROR“Internal error occurred. Contact administrator.”인증중단, 오류발생 등으로 진행을 멈출때 사용자에게 보여주는 메시지 (한글)
  • 한글 입력하면 에러 발생하니, 영문으로 입력하세요.
MANAGELOG_LEVEL0 또는 1 또는 2윈도우 이벤트 로그에 기록하는 기준
  • 0 = 에러만 기록
  • 1 = 에러 + 경고만 기록
  • 2 = 에러 + 경고 + 안내 등 모두 기록
표. 설정값 설명
ADFS Adapter 가이드
Release Note