Plantilla de formulario de consentimiento personalizado

El servidor de autorización OAuth proporciona una plantilla para adquirir información de consentimiento del usuario sobre qué clientes de OAuth están autorizados para acceder al recurso protegido en determinados ámbitos. La solicitud de autorización del cliente de OAuth incluye una lista de ámbitos solicitados desde la plantilla.

WebSphere Application Server permite que la plantilla de formulario de consentimiento sea una página HTML estática o una página web dinámica. En ambos casos, la plantilla debe proporcionarse como un recurso web desprotegido. El recuperador del formulario en la integración de WebSphere Application Server no realiza ninguna autenticación cuando accede a este URL de plantilla.

El proveedor OAuth de WebSphere Application Server incluye una plantilla de formulario de consentimiento de ejemplo y permite la personalización utilizando la variable oauthFormData.

Para personalizar el formulario de consentimiento, debe editar la variable oauthFormData utilizando Javascript. Las variables siguientes se incluyen en los datos del formulario:
  • authorizationUrl - el URL de autorización donde se está enviando el formulario
  • clientDisplayName - el nombre de visualización del cliente
  • nonce - número generado aleatoriamente para evitar la falsificación de solicitudes entre distintos sitios (CSRF, por sus siglas en inglés)
  • client_id - consulte la especificación OAuth 2.0
  • response_type - consulte la especificación OAuth 2.0
  • redirect_uri - consulte la especificación OAuth 2.0
  • state - consulte la especificación OAuth 2.0
  • scope - consulte la especificación OAuth 2.0

El desarrollador de una plantilla de formulario debe incluir el contenido de la variable oauthFormData, utilizando Javascript. El desarrollador debe interpretar el valor del ámbito para que sea un valor significativo para un usuario. Cuando un usuario autoriza la solicitud, el desarrollador puede llamar al método submitForm(oauthFormData) para realizar la autorización. El método submitForm se proporciona de forma predeterminada. Sin embargo, si los desarrolladores están familiarizados con el protocolo OAuth 2.0, pueden implementar su propia función para enviar la solicitud de autorización OAuth.

De forma predeterminada se proporciona un método cancel(oauthFormData) que se puede utilizar para permitir que un usuario cancele la solicitud de autorización.

El formulario de consentimiento también se puede modificar para permitir que se almacene en la memoria caché la selección de consentimiento del usuario. Esto significa que si el mismo cliente de OpenID Connect realiza una nueva solicitud de autorización con los mismos ámbitos aprobados o ámbitos reducidos, no se envía una solicitud al usuario con el formulario de consentimiento. En su lugar, se consideran autorizados los ámbitos permitidos anteriormente y se pasan al recurso protegido como corresponde.

Si el registro del cliente está en modalidad localStore, la selección de consentimiento del usuario se almacena en la memoria caché en la sesión del navegador. Los ámbitos aprobados permanecen en la memoria caché para el usuario en concreto hasta que se cierra la sesión o hasta que ha transcurrido un periodo de tiempo establecido, el cual se especifica en la configuración del servidor.

Si el registro del cliente está en la modalidad databaseStore, la selección del consentimiento del usuario puede persistir en una tabla de base de datos, OAuthDBSchema.OAUTH20CONSENTCACHE. Los ámbitos permanecen en la memoria caché para el usuario en concreto hasta que ha transcurrido un periodo de tiempo establecido, el cual se especifica en la configuración del servidor. El proveedor de OpenID Connect intenta crear automáticamente la tabla de memoria caché de consentimiento pero se recomienda que el usuario cree de forma explícita la tabla de consentimiento cuando configure una base de datos para un proveedor de OAuth2.0 y un proveedor de OpenID Connect. Para obtener información adicional, consulte Configuración del servicio OAuth persistente.

Para utilizar esta función, el desarrollador de una plantilla de formulario debe incluir un valor prompt en el objeto JavaScript oauthFormData. Para guardar en la memoria caché la respuesta afirmativa del usuario e impedir que se vuelva a mostrar el formulario de consentimiento en la misma sesión, se debe establecer el valor de prompt en la serie none. Para permitir que el usuario envíe una respuesta afirmativa sin que la aprobación se guarde en la memoria caché, el valor de prompt se ha de establecer en la serie consent.

Puede utilizar una página dinámica que devuelve contenido globalizado de acuerdo con la cabecera Accept-Language de la solicitud. Al recuperar la plantilla, la cabecera Accept-Language se envía, y el desarrollador de la plantilla debe decidir qué contenido se debe volver a ejecutar respecto al idioma preferido.
Nota: La variable clientDisplayName no se escapa en HTML. El desarrollador de la plantilla debe sanear el valor, puesto que el valor lo introduce un usuario durante el registro del cliente.
Para utilizar una página de plantilla de formulario de consentimiento personalizada para un proveedor de servicios OAuth específico, debe actualizar la definición del proveedor de servicios en el archivo server.xml. En la configuración del proveedor, debe utilizar el atributo authorizationFormTemplate del elemento oauthProvider y añadir el URL de plantilla como valor. El ejemplo siguiente muestra una entrada de plantilla de ejemplo en la configuración del proveedor:
<oauthProvider id="OAuthConfigSample"
  authorizationFormTemplate="https://acme.com:9043/oath20/template.html
  ...>
En el ejemplo siguiente se muestra un formulario de consentimiento de ejemplo:
<oauthProvider id="OAuthConfigSample"
  authorizationLoginURL="https://acme.com:9043/oath20/login.jsp"
  ...>

function escapeHTML(str) {
    var ele = document.createElement("div");
    ele.innerText = ele.textContent = str;
    return ele.innerHTML;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>OAuth authorization form</title>
<script language="javascript">
function init() {
		var scope = oauthFormData.scope;
		var scopeEle = document.getElementById("oauth_scope");
		var ul = document.createElement("ul");
		if(scope) {
				for(var i=0; i< scope.length; i++) {
						var n = document.createElement("li");
						n.innerHTML = scope[i];
						ul.appendChild(n);
		}
	}
		scopeEle.appendChild(ul);
		// establecer nombre de cliente
		var clientEle = document.getElementById("client_name");
		clientEle.innerHTML = escapeHTML(oauthFormData.clientDisplayName);
}

function escapeHTML(str) {
    var ele = document.createElement("div");
    ele.innerText = ele.textContent = str;
    return ele.innerHTML;
}
</script>
</head>
<body onload="init()">
       <div>¿Desea permitir que el cliente <span id=client_name style="font-weight:bold">xxxxxxx</span> acceda a sus datos?</div>
       <div id="oauth_scope">
       </div>
       <div>
              <form action="javascript:submitForm(oauthFormData);">    
                     <input type="submit" value="Permitir, recordar mi decisión" onclick="javascript:oauthFormData.prompt = 'none';"/>
                     <input type="submit" value="Permitir una vez" onclick="javascript:oauthFormData.prompt = 'consent';"/>
                     <input type="button" value="Cancelar" onclick="javascript:cancel(oauthFormData);"/>
              </form>  
       </div>
</body>
</html>

Icono que indica el tipo de tema Tema de concepto



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=cwlp_oauth_customconsent
Nombre de archivo:cwlp_oauth_customconsent.html