Modèle de formulaire d'accord personnalisé

Le serveur d'autorisation OAuth fournit un modèle d'acquisition des informations d'accord relatives aux clients OAuth autorisés à accéder à la ressource protégée dans des portées données. La demande d'autorisation formulée par le client OAuth inclut une liste de portées demandées depuis le modèle.

Dans WebSphere Application Server, le modèle de formulaire d'accord peut être une page HTML statique ou une page Web dynamique. Dans les deux cas, le modèle doit être fourni en tant que ressource Web non protégée. L'extracteur de formulaire de l'intégration WebSphere Application Server ne procède à aucune authentification lors de l'accès à ce modèle d'URL.

Le fournisseur OAuth WebSphere Application Server inclut un exemple de modèle de formulaire d'accord et permet la personnalisation à l'aide de la variable oauthFormData.

Pour personnaliser le formulaire d'accord, vous devez éditer la variable oauthFormData à l'aide de JavaScript. Les variables suivantes sont incluses dans les données de formulaire :
  • authorizationUrl - URL d'autorisation dans laquelle le formulaire est soumis
  • clientDisplayName - nom affiché du client
  • nonce - numéro aléatoire généré pour éviter les falsifications de requêtes intersites (CSRF)
  • client_id - voir la spécification OAuth 2.0
  • response_type - voir la spécification OAuth 2.0
  • redirect_uri - voir la spécification OAuth 2.0
  • state - voir la spécification OAuth 2.0
  • scope - voir la spécification OAuth 2.0

Le développeur d'un modèle de formulaire doit inclure le contenu de la variable oauthFormData avec JavaScript. Il doit interpréter la valeur de portée comme étant une valeur significative pour un utilisateur. Lorsqu'un utilisateur autorise la demande, le développeur peut appeler la méthode submitForm(oauthFormData) pour procéder à l'autorisation. La méthode submitForm est fournie par défaut. Toutefois, si les développeurs maîtrisent bien le protocole OAuth 2.0, ils peuvent implémenter leur propre fonction pour soumettre la demande d'autorisation OAuth.

Référentiel Liberty[8.5.5.4 ou ultérieure]Une méthode cancel(oauthFormData) est fournie par défaut et elle peut être utilisée pour autoriser un utilisateur à annuler la demande d'autorisation.

Référentiel Liberty[8.5.5.4 ou ultérieure]Il est possible également de modifier le formulaire d'accord afin de permettre la mise en cache du choix d'accord de l'utilisateur. Cela signifie que si le même client OpenID Connect effectue une nouvelle demande d'autorisation avec les mêmes portées approuvées ou portées réduites, l'utilisateur n'est pas invité à remplir le formulaire d'accord. Au lieu de cela, les portées préalablement approuvées sont considérées comme étant autorisées et transmises comme il convient à la ressource protégée.

Référentiel Liberty[8.5.5.4 ou ultérieure]Si l'enregistrement du client est en mode localStore, le choix d'accord de l'utilisateur est mis en cache dans la session de navigation. Les portées approuvées restent en cache pour l'utilisateur concerné jusqu'à la clôture de session ou jusqu'à ce que le délai défini (indiqué dans la configuration de serveur) soit écoulé.

Référentiel Liberty[8.5.5.4 ou ultérieure]Si l'enregistrement du client est en mode databaseStore, le choix d'accord de l'utilisateur peut être permanent dans une table de base de données, OAuthDBSchema.OAUTH20CONSENTCACHE. Les portées restent en cache pour l'utilisateur concerné jusqu'à ce que le délai défini (indiqué dans la configuration de serveur) soit écoulé. Le fournisseur OpenID Connect essaie de créer la table d'accord en cache de manière automatique, mais il est préférable que l'utilisateur crée de manière explicite cette table lors de la configuration d'une base de données pour un fournisseur OAuth2.0 et un fournisseur OpenID Connect ; voir Configuration de service OAuth permanent pour plus de détails.

Référentiel Liberty[8.5.5.4 ou ultérieure]Pour utiliser cette fonctionnalité, le développeur d'un modèle de formulaire doit inclure une valeur prompt dans l'objet JavaScript oauthFormData. Pour permettre la mise en cache de la réponse affirmative de l'utilisateur et empêcher le réaffichage du formulaire d'accord dans la même session, la valeur prompt est définie sur la chaîne none. Pour permettre à l'utilisateur de soumettre une réponse affirmative sans la mise en cache de l'approbation, la valeur prompt est définie sur la chaîne consent.

Vous pouvez utiliser une page dynamique qui renvoie un contenu globalisé en fonction de l'en-tête Accept-Language de la demande. Lors de l'extraction du modèle, l'en-tête Accept-Language est transféré, et le développeur de modèles doit décider du contenu à renvoyer selon la langue préférée.
Remarque : La variable clientDisplayName ne fait l'objet d'aucune séquence d'échappement dans HTML. Le développeur de modèles doit assainir la valeur, celle-ci étant entrée un utilisateur lors de l'enregistrement du client.
Pour pouvoir utiliser une page de modèle de formulaire d'accord personnalisée pour un fournisseur de services OAuth 2.0 spécifique, vous devez mettre à jour la définition du fournisseur de services dans le fichier server.xml. Dans la configuration du fournisseur, vous devez utiliser l'attribut authorizationFormTemplate de l'élément oauthProvider et ajouter l'adresse URL du modèle comme valeur. L'exemple suivant illustre une entrée de modèle dans la configuration du fournisseur :
<oauthProvider id="OAuthConfigSample"
  authorizationFormTemplate="https://acme.com:9043/oath20/template.html
  ...>
L'exemple suivant illustre un modèle de formulaire d'accord :
<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);
	// set client name
	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>Do you want to allow client <span id=client_name style="font-weight:bold">xxxxxxx</span> to access your data?</div>
       <div id="oauth_scope">
       </div>
       <div>
              <form action="javascript:submitForm(oauthFormData);">    
                     <input type="submit" value="Allow, remember my decision" onclick="javascript:oauthFormData.prompt = 'none';"/>
                     <input type="submit" value="Allow once" onclick="javascript:oauthFormData.prompt = 'consent';"/>
                     <input type="button" value="Cancel" onclick="javascript:cancel(oauthFormData);"/>
              </form>  
       </div>
</body>
</html>

Icône indiquant le type de rubrique Rubrique de concept

Dispositions pour les centres de documentation | Commentaires


Icône d'horodatage Dernière mise à jour: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_oauth_customconsent
Nom du fichier : cwlp_oauth_customconsent.html