您可以使用 JWT(JSON 网络密钥)单点登录对用户进行身份验证。本文章描述了如何为 Microsoft Active Directory 用户配置 JWT SSO 身份验证,包括以下步骤:
2. 配置 Zendesk
3. 下载并配置身份验证脚本
4. 故障排除
1.配置您的 Windows 服务器
您需要在 Windows 服务器上安装 IIS 和 ASP。您的 IIS 服务器必须是您域名的一部分,并且可以直接访问您的域名控制器。IIS 服务器可以在域控制器上,但这不是必须的。如果使用的是 Windows Server 2008,以下是应安装的用户角色:
对于 IIS 用户角色服务,您需要安装以下内容:
- 应用程序开发
- ASP.NET
- ASP
- 服务器端包含
在安全性下
- 基本身份验证
正确安装您的用户角色和服务后,您必须配置 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 的用户名和密码。
接下来,您需要输入您在 JWT Zendesk 配置期间获得的共享密钥(在脚本中标为 sKey),并输入您的 Zendesk 子域名:
' 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。如果您想提取更多数据用于通话,请将其包含在代码的该部分。例如,如果我想在下面包含注释块:
我将使用属性“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”)”对象。例如,如果您包含“信息”查找,并且我想将注释块用于标签,我将更新代码,如下所示:
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.故障排除
您单击了登录但登录失败?作为脚本的一部分,我们包含了一个调试选项。如果您在脚本中将“调试”标志设置为“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
在这里您应正确列出所有信息。如果您配置了组织、工单标签或 PhotoURL,您应该会看到此数据。如果您看到的是部分数据,而不是全部数据,请验证用户的属性数据,并确保代码引用了正确的属性。
如果您正在访问该页面,但未获取任何数据,这意味着脚本无法连接到您的域控制器或没有权限。前往服务器的共享(运行提示中的 \\dcservername\),在服务器上验证您是否可以访问域控制器。接下来验证您在代码中输入的用户名和密码是否正确。此外,如果您启用了匿名访问,您可能会得到一个空白页面,因为它从未要求进行身份验证。确保匿名访问已关闭。
如果您无法访问该页面,并且您的浏览器抛出错误,则问题出在 IIS 上。确认您已在服务器上安装所需的用户角色/服务,并且它们正在运行。如果仍有问题,可能需要咨询 IIS 管理员,因为此类错误不在本指南讨论范围内。
如果您确实遇到了错误,请告诉我们您的解决方法。我很乐于更新这篇文章,提供关于用户遇到的问题以及解决方法的更多提示。
翻译免责声明:本文章使用自动翻译软件翻译,以便您了解基本内容。 我们已采取合理措施提供准确翻译,但不保证翻译准确性
如对翻译准确性有任何疑问,请以文章的英语版本为准。