JWT(JSON 웹 토큰) 통합 인증을 사용하여 사용자를 인증할 수 있습니다. 이 문서에서는 Microsoft Active Directory 사용자에 대한 JWT SSO 인증을 구성하는 방법에 대해 설명하며 다음 단계를 다룹니다.
2. Zendesk 구성하기
4. 문제 해결하기
1. Windows 서버 구성하기
Windows 서버에 IIS 및 ASP가 설치되어 있어야 합니다. IIS 서버는 회사 도메인의 일부여야 하며 회사 도메인 컨트롤러에 직접 액세스할 수 있어야 합니다. IIS 서버는 도메인 컨트롤러에 있을 수 있지만 필수 조건은 아닙니다. Windows Server 2008을 사용하는 경우에는 다음과 같은 역할이 설치되어야 합니다.
IIS 역할 서비스의 경우 다음이 설치되어 있어야 합니다.
- 애플리케이션 개발
- ASP.NET
- ASP
- SSI(Server Side Includes)
그리고 보안 아래에는 다음이 있어야 합니다.
- 기본 인증
역할과 서비스가 제대로 설치된 후에는 IIS 서버의 인증을 구성해야 합니다. Zendesk는 기본 인증과 훌륭하게 작동하므로 보통 이를 기본으로 설정해도 좋습니다. 익명 인증을 반드시 사용 중지하도록 하세요. 그렇지 않으면 그 외 사용자들에게 Windows 사용자 이름과 비밀번호를 입력하라는 메시지가 표시되지 않아 로그인할 수 없게 됩니다.
2. Zendesk 구성하기
자세한 안내는 JWT(JSON 웹 토큰)로 통합 인증 설정하기 문서에서 Zendesk에서 JWT 통합 인증 사용 설정하기를 참조하세요. 원격 로그인 URL 값에는 다음 섹션에 설명된 ASP 인증 스크립트를 배치할 위치를 지정하세요.
3. 인증 스크립트 다운로드 및 구성하기
다음 GitHub 페이지에서 ASP 인증 스크립트를 다운로드하세요.
https://github.com/zendesk/zendesk_jwt_sso_examples/tree/master/bun...
스크립트(및 위의 번들에 포함되어 있는 해당 종속 항목)를 wwwroot 디렉토리에 배치합니다. 하위 디렉토리를 만들 수 있지만 그렇게 하면 스크립트의 URL이 확장될 뿐이라는 사실을 기억하세요. 새로 설치하는 동안 IIS가 다음 위치에 이 디렉토리를 만듭니다.
c:\inetpub\wwwroot\
웹 브라우저의 경우에는 해당 폴더에 있는 파일들이 다음 URL에 나타납니다.
http://serveraddress/classic_asp_jwt_with_ad.asp
메모장이나 다른 텍스트 편집기에서 스크립트를 엽니다. 구성이 필요한 스크립트의 첫 부분은 다음입니다.
' Credentials for a domain user for LDAP access sLdapReaderUsername = "domain\username" sLdapReaderPassword = "password"
LDAP에 액세스 권한이 있는 사용자의 사용자 이름과 비밀번호를 입력합니다 .
다음은 Zendesk 하위 도메인을 입력하는 것은 물론 JWT Zendesk 구성 중 받은 공유 비밀키 토큰(스크립트에 sKey로 레이블됨)을 입력해야 합니다.
' Set your shared secret and Zendesk subdomain
sKey = ""
sSubdomain = ""
다음의 LDAP에서 사용자 계정을 조회하는 스크립트 부분입니다.
sQuery = "<LDAP://" & sDomainContainer & ">;(sAMAccountName=" & sUsername & "); adspath," & sFields & ";subtree"
Set userRS = oConn.Execute(sQuery)
코드를 살펴보면 사용자의 adspath, mail, displayName 및 sAMAccountName을 가져온다는 것을 알 수 있습니다. 호출에 사용될 더 많은 데이터를 가져오려면 코드의 해당 부분에 이를 포함합니다. 예를 들어 아래와 같이 Notes 블록을 포함하고자 할 수 있습니다.
다음과 같이 “info” 속성으로 코드를 업데이트할 수 있습니다.
sQuery = ";(sAMAccountName=" & strUsername & ");adspath,mail,displayName,sAMAccountName,info;subtree" Set userRS = oConn.Execute(sQuery)
속성이 조회된 후에는 사용할 수 있습니다. 아래 코드는 속성의 실제 변환을 수행합니다.
If Not userRS.EOF and not err then sFullName = userRS("displayName") sEmail = userRS("mail") sExternalID = userRS("sAMAccountName") if sOrg then sOrganization = "" end if sTags = "" sPhotoUrl = ""
displayName, mail 및 sAMAccountName이 이미 배치된 것을 볼 수 있습니다. 사용자의 개별 속성을 호출하려면 “userRS(“nameofattribute”)” 개체를 사용합니다. 예를 들어 “info” 조회를 포함한 상태에서 태그에 Notes 블록을 사용하려는 경우에는 코드를 다음과 같이 업데이트합니다.
If Not userRS.EOF and not err then sFullName = userRS("displayName") sEmail = userRS("mail") sExternalID = userRS("sAMAccountName") if sOrg then sOrganization = "" end if sTags = userRS("info") sPhotoUrl = ""
어떤 개별 속성을 사용할 수 있는지에 대해서는 다음을 참조하세요.
http://www.kouti.com/tables/userattributes.htm
또한 Active Directory 사용자 및 컴퓨터에서 “고급 기능”을 사용 설정하면 개별 속성을 직접 변경할 수 있습니다. 고급 기능을 사용 설정하려면 보기 > 고급 기능으로 이동합니다.
사용 설정한 후 사용자의 특성으로 가면 “속성 편집기”가 보입니다.
조직 및 태그를 통과시키는 데 대한 참고
사용자에 대해 성공적으로 조직을 통과시키려면 조직이 Zendesk에 이미 존재해야 합니다. Zendesk에 조직이 존재하지 않거나 이름이 정확하게 일치하지 않으면 Zendesk가 사용자를 만들듯이 바로 조직을 만들지 않습니다. 먼저 관련 조직을 만들어야 합니다.
태그를 성공적으로 통과시키려면 속성에 태그가 다음과 같이 나열되어 있어야 합니다.
“tag1, tag2, tag3”
태그 사이에 “,”를 포함하지 않으면 실패합니다.
수락되는 다양한 필드에 대한 자세한 내용은 이 게시물을 참조하세요.
스크립트를 변경했으면 저장하세요. Zendesk 사이트로 가서 로그인을 클릭하세요. Windows 자격 증명을 입력할 스크립트로 리디렉션되고, 로그인된 상태로 다시 Zendesk로 가게 됩니다.
4. 문제 해결하기
로그인을 클릭했는데 실패했나요? 스크립트에 디버깅 옵션이 포함되어 있습니다. 스크립트에서 Debug 플래그를 'True'로 설정하면 스크립트에 액세스할 때 디버그 정보가 인쇄됩니다. 다음과 비슷하게 보일 것입니다.
[DEBUG] ZENDESK\test - should be of the form DOMAIN\username - if blank, your IIS probably allows anonymous access to this file.
[DEBUG] DomainContainer: DC=zendesk,DC=internal
[DEBUG] Attribute name: Test User
[DEBUG] Attribute email: test@zendesk.com
[DEBUG] Attribute jti: 2968942290171.981
[DEBUG] Attribute iat: 1380123848
[DEBUG] Redirecting to https://subdomain.zendesk.com/access/jwt?jwt=eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9.eyJpYXQiOjEzODAxMjM4NDgsImp0aSI6Mjk2ODk0MjI5MDE3MS45ODEsIm5hbWUiOiJUZXN0IFVzZXIiLCJlbWFpbCI6InRlc3RAemVuZGVzay5jb20ifQ.QuRC6Ig7x_nK86Wc38u2viIVjshtTDohcgXTYpmU6VY
제대로 나열된 모든 정보를 받게 됩니다. Organization, tags 또는 PhotoURL을 구성한 경우에는 이 데이터가 보여야 합니다. 일부 데이터만 보이고 모든 데이터가 보이지 않는다면 코드가 적절한 속성을 참조하는지 확인하는 동시에 사용자의 속성 데이터가 올바른지 확인하세요.
페이지로 이동하는데 아무 데이터도 받지 못한다면 스크립트가 도메인 컨트롤러에 연결하지 못하거나 권한이 없다는 뜻입니다. 서버의 공유로 가서 서버에서 도메인 컨트롤러에 액세스할 수 있는지 확인합니다(실행 프롬프트에서 \\dcservername\). 다음은 코드에 배치한 사용자 이름과 비밀번호가 정확한지 확인합니다. 익명 액세스를 사용 설정한 경우에는 인증을 할 필요가 없기 때문에 빈 페이지가 표시될 수도 있습니다. 익명 액세스가 해제되어 있는지 확인합니다.
페이지를 볼 수 없고 브라우저에서 오류를 표시하면 IIS 내에 문제가 있는 것입니다. 서버에 필요한 역할/서비스가 설치되어 실행 중인지 확인하세요. 문제가 계속 발생한다면 이런 종류의 오류는 본 가이드의 범위 밖이므로 IIS 관리자에게 문의해야 할 수도 있습니다.
오류가 발생했다면 어떻게 해결했는지 알려 주시기 바랍니다. 사람들이 경험하고 있는 문제와 그 해결 방법에 대한 추가 팁으로 이 게시물을 니중에 업데이트하겠습니다.