Se puede autenticar a los usuarios usando el inicio de sesión único con JWT (Token Web JSON). Este artículo describe cómo configurar la autenticación usando el inicio de sesión único con JWT para los usuarios de Microsoft Active Directory y explica los siguientes pasos:
1. Configuración del servidor Windows
3. Descarga y configuración del script de autenticación
1. Configuración del servidor Windows
Necesitará tener IIS y ASP instalados en su servidor Windows. Su servidor IIS tiene que formar parte de su dominio y tener acceso directo al controlador de su dominio. El servidor IIS puede estar en el controlador de dominio, pero no es un requisito. Si usa Windows Server 2008, este es el rol que debe instalarse:
Para Role Services de IIS, deberá tener instalado lo siguiente:
- Application Development
- ASP.NET
- ASP
- Server Side Includes
Y bajo Security
- Autenticación básica
Una vez que los roles y servicios estén instalados correctamente, tiene que configurar la autenticación de su servidor IIS. Zendesk funciona bien con Basic Authentication de modo que casi siempre lo dejo como opción predeterminada. Asegúrese de desactivar Anonymous Authentication; de lo contrario, no se les pedirá a sus usuarios el nombre de usuario y la contraseña de Windows, y no podrán iniciar sesión.
2. Configuración de la cuenta de Zendesk
Si desea instrucciones, consulte Activar el inicio de sesión único JWT en su cuenta de Zendesk en el artículo Configuración de inicio de sesión único con JWT (Token Web JSON). Para el valor URL de inicio de sesión remoto, especifique la ubicación donde colocará el script de autenticación ASP que se describe en la sección siguiente.
3. Descarga y configuración del script de autenticación
Descargue el script de autenticación ASP desde esta página en Github:
https://github.com/zendesk/zendesk_jwt_sso_examples/tree/master/bun...
Coloque el script (y sus dependencias que se incluyen en el paquete anterior) en el directorio wwwroot. Puede crear un subdirectorio, pero recuerde que eso solo agrandaría el URL para el script. Durante una nueva instalación, IIS creará este directorio en:
c:\inetpub\wwwroot\
Para su navegador web, los archivos en esa carpeta aparecerán en este URL:
http://serveraddress/classic_asp_jwt_with_ad.asp
Abra el script usando el Bloc de notas o cualquier otro editor de texto. La primera parte del script que tendría que configurar es la siguiente:
' Credentials for a domain user for LDAP access sLdapReaderUsername = "domain\username" sLdapReaderPassword = "password"
Ingrese el nombre de usuario y la contraseña de un usuario con acceso a LDAP.
Luego, tiene que ingresar el token de secreto compartido que recibió durante la configuración de JWT de Zendesk (lo que se llama sKey en el script), además de ingresar el subdominio de Zendesk:
' Set your shared secret and Zendesk subdomain
sKey = ""
sSubdomain = ""
Esta es la parte del script que hace la búsqueda LDAP de su cuenta de usuario:
sQuery = "<LDAP://" & sDomainContainer & ">;(sAMAccountName=" & sUsername & "); adspath," & sFields & ";subtree"
Set userRS = oConn.Execute(sQuery)
Si observa el código, notará que estamos obteniendo adspath, mail, displayName y sAMAccountName del usuario. Si desea recolectar más datos para usar en su llamada, inclúyalos en esa parte de código. Por ejemplo, si quisiera incluir el bloque Notes a continuación:
Yo actualizaría el código con el atributo “info” de modo que se vea así:
sQuery = ";(sAMAccountName=" & strUsername & ");adspath,mail,displayName,sAMAccountName,info;subtree" Set userRS = oConn.Execute(sQuery)
Una vez que tengamos ubicados los atributos, se podrán usar. El código que sigue realiza la traducción real de los atributos:
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 = ""
Verá que displayName, mail y sAMAccountName ya están colocados. Si desea llamar a los atributos individuales de su usuario, usaría el objeto “userRS(“nameofattribute”)”. Entonces, por ejemplo, si incluyó la búsqueda “info”, y yo quiero usar el bloque Notes para las etiquetas, actualizaría el código de la siguiente manera:
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 = ""
Entonces, ¿qué atributos individuales están disponibles? Puede ver con qué opciones cuenta para los atributos aquí:
http://www.kouti.com/tables/userattributes.htm
Asimismo, si activó “Advanced Features” en Active Directory Users and Computers, puede cambiar los atributos individuales de forma directa. Para activar Advanced Features, vaya a View > Advanced Features:
Una vez activada la opción, si va a las propiedades del usuario, verá un “Attribute Editor”:
Observación acerca de la transferencia de una organización y etiquetas
Para poder transferir sin problemas una organización para un usuario, la organización ya debe existir en Zendesk. Si la organización no existe en Zendesk (o los nombres no coinciden con exactitud), Zendesk no creará la organización sobre la marcha como sucede con el usuario. Primero debe crear las organizaciones que le interesen.
Para poder transferir etiquetas sin problemas, el atributo debe tenerlas enumeradas como sigue:
“tag1, tag2, tag3”
Si no incluye la “,” entre las etiquetas, no funcionará bien.
Si desea más información sobre los distintos campos que aceptamos, consulte esta publicación.
Después de hacer los cambios en el script, guárdelo. Vaya al sitio de Zendesk y haga clic en Iniciar sesión. Con esto, se le redirigirá al script donde ingresará sus credenciales de Windows y se le enviará de regreso a su cuenta de Zendesk con la sesión ya iniciada.
4. Resolución de problemas
¿Hizo clic en Iniciar sesión y no funcionó? Como parte del script, hemos incluido una opción para corregir errores. Si elige "True" para la indicación de Debug en el script, la información de Debug se imprimirá al acceder al script. Es algo similar a lo siguiente:
[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
Aquí verá toda su información ordenada correctamente. Si configuró una Organización, etiquetas o el PhotoURL, debería ver estos datos. Si ve parte de los datos, pero no todos, verifique los datos de atributo del usuario, y asegúrese de que el código haga referencia al atributo correcto.
Si llega a la página pero no está recibiendo datos, eso quiere decir que el script no ha podido conectarse al controlador de dominio o no tiene permiso. En el servidor compruebe que sí tiene acceso al controlador de dominio, para lo cual tiene que ir al área de compartir del servidor (\\dcservername\ en el indicador run). Luego, verifique que el nombre de usuario y la contraseña que haya colocado en el código sea la correcta. Por otro lado, si tiene activado el acceso anónimo, es posible que se encuentre con una página en blanco ya que la autenticación nunca fue solicitada. Asegúrese de que el acceso anónimo esté desactivado.
Si no puede llegar a la página y su navegador produce un error, el problema radica dentro del IIS. Compruebe que sí tiene instalado los roles o servicios necesarios en su servidor y que están funcionando bien. Si los problemas persisten, tendría que consultar a un administrador de IIS ya que los errores de ese tipo están fuera del alcance de esta guía.
Si encuentra un error, nos gustaría saber cómo lo resolvió. Con mucho gusto actualizaré esta publicación con consejos adicionales sobre cómo resolver problemas encontrados.