A continuación describimos cómo configurar nuestro servidor web para que soporte autenticación “Web Service” basados en “REST”. (Disponible desde Omnis Studio 6.1.)
Por supuesto deberemos configurar nuestra librería Omnis, pero al margen de esto y cuando estamos utilizando un “simple” servidor Web (es decir no un servicio incorporado mediante Tomcat), podemos configurar la dirección URL del servicio web para que soporte autenticación básica (basic) o implícita (digest). También dispondremos de la opción de usar https y certificación para dar soporte a conexiones seguras.
A continuación incluimos algunas notas sobre cómo configurar Tomcat, Apache Web Server y IIS para que soporten autenticación básica (basic) o implícita (digest). Si así lo hacemos, el servidor Web será el encargado de autenticar a los clientes, a Omnis sólo pasará la solicitud una vez que cliente se ha autenticado correctamente; las cabeceras HTTP incluirán los datos con los detalles correspondientes, el llamado “Authorization header”.
Omnis Studio 6.1 posee una nueva función denominada parsehttpauth(auth) que permite examinar el contenido HTTP del “Authorization header”, ésta nos devolverá una variable de tipo “row” con la información extraída. La primera columna de la “row” con el nombre “scheme”, es el tipo de esquema (por ejemplo “basic”). El contenido del resto de las columnas, dependerá del tipo de esquema de que se trate. Por ejemplo, para las cabeceras siguientes:
Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
La “row” devuelta contendrá las siguientes 3 columnas:
- scheme: basic
- username: Aladdin
- password: open sesame
Digest username="Mufasa",realm="testrealm@host.com",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",uri="/dir/index.html",qop=auth,nc=00000001,cnonce="0a4f113b",response="6629fae49393a05397450978507c4ef1",opaque="5ccc069c403ebaf9f0171e9517f40e41"
La “row” devuelta contendrá las siguientes 10 columnas:
- scheme: digest
- username: Mufasa
- realm: testrealm@host.com
- nonce: dcd98b7102dd2f0e8b11d0f600bfb0c093
- uri: /dir/index.html
- qop: auth
- nc: 00000001
- cnonce: 0a4f113b
- response: 6629fae49393a05397450978507c4ef1
- opaque: 5ccc069c403ebaf9f0171e9517f40e41
OAuth realm="Example",oauth_consumer_key="0685bd9184jfhq22",oauth_token="ad180jjd733klru7", oauth_signature_method="HMAC-SHA1",oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D", oauth_timestamp="137131200",oauth_nonce="4572616e48616d6d65724c61686176",oauth_version="1.0"
La “row” devuelta contendrá las siguientes 9 columnas:
- scheme: oauth
- realm: Example
- oauth_consumer_key: 0685bd9184jfhq22
- oauth_token: ad180jjd733klru7
- oauth_signature_method: HMAC-SHA1
- oauth_signature: wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D
- oauth_timestamp: 137131200
- oauth_nonce: 4572616e48616d6d65724c61686176
- oauth_version: 1.0
Bearer 0b79bab50daca910b000d4f1a2b675d604257e42
La “row” devuelta contendrá las siguientes 2 columnas:
- scheme: bearer
- token: 0b79bab50daca910b000d4f1a2b675d604257e42
Para cualquier otro tipo de “scheme”, la “row” devuelta contendrá las siguientes 2 columnas:
- scheme: nombre del esquema en minúsculas
- data: resto de datos de la cabecera
Tomcat
Lo descrito a continuación ha sido testado con Tomcat 7.0.42 y Windows 8.1. Será necesario reiniciar Tomcat para que los cambios tengan efecto.
Autenticación “basic”
Configure el/los usuarios: Editando el fichero “conf/tomcat-users.xml”:
Añada el/los perfil(es) y usuario(s) bajo el item ≤tomcat-users≥, por ejemplo:
≤role rolename="omnisrest"/≥
≤user username="bobm" password="bobm" roles="omnisrest"/≥
Edite el fichero “web.xml” del “webapp” “omnisrestservlet” (carpeta WEB-INF);
Agregue lo siguiente después del item “servlet-mapping”:
≤security-constraint≥
≤web-resource-collection≥
≤web-resource-name≥All resources≤/web-resource-name≥
≤url-pattern≥/*≤/url-pattern≥
≤/web-resource-collection≥
≤auth-constraint≥
≤role-name≥omnisrest≤/role-name≥
≤/auth-constraint≥
≤user-data-constraint≥
≤!—el “transport-guarantee” podrá ser CONFIDENTIAL, INTEGRAL, o NONE --≥
≤transport-guarantee≥NONE≤/transport-guarantee≥
≤/user-data-constraint≥
≤/security-constraint≥
≤login-config≥
≤auth-method≥BASIC≤/auth-method≥
≤realm-name≥omnisrest≤/realm-name≥
≤/login-config≥
Autenticación “digest”
Igual que el anterior, excepto que el “auth-method” deberá ser “DIGEST”.
Probando el servicio SSL
Sobre el fichero “conf/server.xml”:
Elimine el comentario del conector SSL y modifíquelo, para dejarlo en algo como:
≤Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:\apache-tomcat-7.0.42\mykeystore" keystorePass="xxxxxx"/≥
Cree el certificado auto firmado para añadirlo al “keystore” de “tomcat”:
Nota: Será necesario indicar un nombre y apellido para el “localhost” (eso nos permitirá probar el servidor localmente, con “OWEN” como cliente)
"C:\Program Files (x86)\Java\jdk1.6.0_37\bin\keytool" -genkeypair -alias mycert -keyalg RSA - validity 10000 -keystore c:\apache-tomcat-7.0.42\mykeystore
Uso del cliente Omnis “OWEB” para pruebas:
Extracción del certificado:
"C:\Program Files (x86)\Java\jdk1.6.0_37\bin\keytool" -exportcert -alias mycert -keystore c:\apache-tomcat-7.0.42\mykeystore -file my_root_cert
Importación del certificado al “omnisTrustStore”:
cd \secure\cacerts
"C:\Program Files (x86)\Java\jdk1.6.0_37\bin\keytool" -importcert -alias my_tomcat - keystore omnisTrustStore -file c:\apache-tomcat-7.0.42\my_root_cert
Ahora podrá utilizar URLs como:
https://localhost:8443/omnisrestservlet/ws/5988/api/phase2/myapi/conTomcat
Nota: para eliminar la copia de un certificado use:
"C:\Program Files (x86)\Java\jdk1.6.0_37\bin\keytool" -delete -alias my_tomcat -keystore omnisTrustStore
Apache Web Server
Autenticación “basic”
Cree un usuario y su contraseña:
c:\apache24\bin\htpasswd -c c:\apache24\test_passwords test
Note: -c is optional - required the first time to create the passwords file
Edite el fichero “httpd.conf”, la entrada “omnisrest” deberá ser algo como esto:
≤Location /omnisrest≥
SetHandler omnisrest
AuthType Basic
AuthName "omnisrest"
AuthBasicProvider file
AuthUserFile c:\apache24\test_passwords
Require user test
≤/Location≥
El “Require” podrá ser “Require user...”, “Require valid-user” o “Require group...”. Consulte la documentación de Apache para más información.
Autenticación “digest”
Cree un usuario y su contraseña:
c:\apache24\bin\htdigest -c c:\apache24\test_digest_passwords omnisrest test
Nota: El uso de “-c” es opcional, pero necesario para la primera vez que se crear el archivo de contraseñas.
Edite el fichero “httpd.conf”, la entrada “omnisrest” deberá ser algo como esto:
≤Location /omnisrest≥
SetHandler omnisrest
AuthType Digest
AuthName "omnisrest"
AuthDigestDomain /omnisrest/
AuthDigestProvider file
AuthUserFile c:\apache24\test_digest_passwords
Require valid-user
≤/Location≥
Des comente la entrada “LoadModule auth_digest_module modules/mod_auth_digest.so” del fichero “httpd.conf”.
El “Require” podrá ser “Require user...”, “Require valid-user” o “Require group...”. Consulte la documentación de Apache para más información.
IIS
Autenticación “basic”
IIS es bastante difícil de configurar (o al menos el “IIS Express” donde ha sido probado). Para habilitar el modo de autenticación “basic”, es necesario deshabilitar la autenticación “anonymous” del archivo “AppServer\applicationhost.config” ubicado bajo el directorio de instalación de IIS Express. Búsqueda la entrada “authentication” correspondiente.
Añada el código siguiente al final del archivo “applicationhost.config”:
≤location path="Default Web Site/cgi-bin/omnisrestisapi.dll"≥
≤system.webServer≥
≤security≥
≤authentication≥
≤basicAuthentication enabled="true" /≥
≤/authentication≥
≤/security≥
≤/system.webServer≥
≤/location≥
Después, podrá utilizar cualquier usuario existente y su contraseña con las URLs protegidas – se necesita disponer de una cuenta de usuario “standard” para que funcione.