Sin duda queda de nuestra parte el construir un método de autenticación seguro para nuestra librerías Omnis. Pero cuando se utiliza un verdadero servidor Web (en lugar del servidor Tomcat), deberemos configurar su dirección URL para que soporte autenticación de tipo “basic” y/o “digest”. Por supuesto, también podemos hacer uso de https, y certificados de cliente para que las conexiones sean más seguras.
En las siguientes secciones, se han incluido algunas notas acerca de cómo configurar Tomcat, Apache Web Server y IIS para que soporten autenticación de tipo “basic” y/o “digest”. Configurar nuestro servidor de éste modo, significará que a Omnis sólo llegará la solicitud si el cliente se ha autenticado correctamente; en este caso, las cabeceras HTTP incluirán la “Authorization header”, con los detalles de la autenticación.
Omnis Studio incluye una nueva función denominada “parsehttpauth(auth)”, la cual analiza el valor (auth) del http “Authorization header” y devuelve una variable de tipo “row” con la información extraída. La primera columna denominada “named scheme” contiene la denominación del esquema (por ejemplo “basic”). El contenido del resto de sus columnas dependerá del tipo de esquema. A continuación mostramos algunos ejemplos:
Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
- La “row” devuelta tendrá las siguientes tres 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 tendrá las siguientes diez 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 tendrá las siguientes nueve 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 tendrá las siguientes dos columnas:
- scheme: bearer
- token: 0b79bab50daca910b000d4f1a2b675d604257e42
- La “row” devuelta tendrá las siguientes dos columnas:
- scheme: denominación del esquema en minúsculas
- data: resto de la información de cabecera
Tomcat
Lo mostrado a continuación ha sido probado con Tomcat 7.0.42, ejecutado en Windows 8.1. Reinicie Tomcat después de cambiar los archivos de configuración.
Autenticación “Basic”
Configuración de usuarios: edite el fichero “conf/tomcat-users.xml”:
- Añada perfiles y usuarios dentro de elementos ≤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);
- Añada lo siguiente después del elemento “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≥
≤!-- transport-guarantee can be CONFIDENTIAL, INTEGRAL, or 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 lo anterior, excepto que el “auth-method” debe ser “DIGEST”.
Probando localmente SSL
En el “conf/server.xml”:
Des-comente el conector SSL y modifíquelo, por algo como lo siguiente:
≤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"/≥
Creación de un certificado de servidor auto-firmado, para el almacén de claves tomcat:
- Nota: Es necesario especificar un nombre y apellido para componer el localhost (a fin de permitir la realización de pruebas locales con OWEB 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:
Extraiga el 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
Impórtelo al “omnisTrustStore”:
cd ≤omnis path≥\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á usar con Tomcat, URLs como la siguiente: https://localhost:8443/omnisrestservlet/ws/5988/api/phase2/myapi/first
Nota: Para eliminar copias antiguas del 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”
Creación de usuario y contraseña:
- c:\apache24\bin\htpasswd -c c:\apache24\test_passwords test
Nota: -c es opcional, sólo es requerido para la primera vez que se crea el fichero de contraseñas
Edite el fichero “httpd.conf”, la entrada “omnisrest” deberá ser como sigue:
≤Location /omnisrest≥
SetHandler omnisrest≤/Location≥
AuthType Basic
AuthName "omnisrest"
AuthBasicProvider file
AuthUserFile c:\apache24\test_passwords
Require user test
“Require” puede tener la forma, “Require user...”, “Require valid-user” o “Require group...”, consulte la documentación en línea de Apache, para más información.
Autenticación “Digest”
Creación de usuario y contraseña:
- c:\apache24\bin\htdigest -c c:\apache24\test_digest_passwords omnisrest test
Nota: -c es opcional, sólo es requerido para la primera vez que se crea el fichero de contraseñas
Edite el fichero “httpd.conf”, la entrada “omnisrest” deberá ser como sigue
≤Location /omnisrest≥
SetHandler omnisrest≤/Location≥
AuthType Digest
AuthName "omnisrest"
AuthDigestDomain /omnisrest/
AuthDigestProvider file
AuthUserFile c:\apache24\test_digest_passwords
Require valid-user
Des-comente la línea “LoadModule auth_digest_module modules/mod_auth_digest.so” del “httpd.conf”.
“Require” puede tener la forma, “Require user...”, “Require valid-user” o “Require group...”, consulte la documentación en línea de Apache, para más información.
IIS
Autenticación “Basic”
IIS es bastante difícil de configurar (o al menos IIS Express que es el que hemos probado). En primer lugar, es necesario habilitar la autenticación “basic” y desactivar la autenticación “anonymous” en el archivo “AppServer\applicationhost.config” (que podremos encontrar bajo el directorio de instalación de IIS Express). Haga una búsqueda de la cadena “authentication” y modifique lo que sea pertinente.
Agregue el código siguiente al final del fichero “applicationhost.config”, justo después del elemento “location” principal:
≤location path="Default Web Site/cgi-bin/omnisrestisapi.dll"≥
≤system.webServer≥≤/location≥
≤security≥
≤authentication≥
≤basicAuthentication enabled="true" /≥
≤/authentication≥
≤/security≥
≤/system.webServer≥
A continuación, puede utilizar el usuario y su contraseña, con URL’s protegidas - tuvimos que crear una nueva cuenta de usuario estándar para conseguir que esto funcionase.