Angepasste Zustimmungsformularschablone

Der OAuth-Berechtigungsserver stellt eine Schablone für die Anforderung von Benutzerzustimmungsinformationen zu den OAuth-Clients bereit, die berechtigt sind, auf die geschützte Ressource in bestimmten Geltungsbereichen zuzugreifen. Die Berechtigungsanforderung vom OAuth-Client enthält eine Liste mit angeforderten Geltungsbereichen aus der Schablone.

WebSphere Application Server unterstützt statische HTML-Seiten und dynamische Webseiten für die Zustimmungsformularschablone. In beiden Fällen muss die Schablone als ungeschützte Webressource bereitgestellt werden. Die Abruffunktion für Zustimmungsformulare in der Integration von WebSphere Application Server führt beim Zugriff auf diesen Schablonen-URL keine Authentifizierung durch.

Der OAuth-Provider von WebSphere Application Server enthält ein einfaches Beispielzustimmungsformular und lässt eine Anpassung mithilfe der Variablen oauthFormData zu.

Wenn Sie das Zustimmungsformular anpassen möchten, müssen Sie die Variable oauthFormData mit JavaScript bearbeiten. Die folgenden Variablen sind in den Formulardaten enthalten.
  • authorizationUrl - Berechtigungs-URL, an den das Formular übergeben wird
  • clientDisplayName - Anzeigename des Clients
  • nonce - Generierte Zufallszahl zur Verhinderung von CSRF (Cross-Site Request Forgery, Cross-Site-Attacken durch Manipulation der Anforderungsdaten)
  • client_id - Siehe die Spezifikation OAuth 2.0
  • response_type - Siehe die Spezifikation OAuth 2.0
  • redirect_uri - Siehe die Spezifikation OAuth 2.0
  • state - Siehe die Spezifikation OAuth 2.0
  • scope - Siehe die Spezifikation OAuth 2.0

Der Entwickler einer Formularschablone muss den Inhalt der Variablen oauthFormData durch Verwendung von JavaScript einschließen. Der Entwickler muss den Geltungsbereichswert so interpretieren, dass er für einen Benutzer aussagefähig ist. Wenn ein Benutzer die Anforderung berechtigt, kann der Entwickler die Methode submitForm(oauthFormData) zur Ausführung der Berechtigung aufrufen. Die Methode submitForm wird standardmäßig bereitgestellt. Wenn die Entwickler mit dem Protokoll "OAuth 2.0" vertraut sind, können sie jedoch auch ihre eigene Funktion implementieren, um die OAuth-Berechtigungsanforderung zu übergeben.

Liberty-Repository[8.5.5.4 oder höher]Die Methode cancel(oauthFormData) wird standardmäßig bereitgestellt und kann verwendet werden, um einem Benutzer zu erlauben, die Berechtigungsanforderung abzubrechen.

Liberty-Repository[8.5.5.4 oder höher]Die Zustimmungserklärung kann auch geändert werden, damit die die Auswahl der Benutzerzustimmung zwischengespeichert werden kann. Das bedeutet, dass wenn derselbe OpenID Connect-Client eine neue Berechtigungsanforderung mit denselben genehmigten oder verkleinerten Geltungsbereichen absetzt, wird der Benutzer nicht aufgefordert, das Zustimmungsformular auszufüllen. Stattdessen gelten die zuvor zugelassenen Geltungsbereiche als berechtigt und werden entsprechend an die geschützte Ressource übergeben.

Liberty-Repository[8.5.5.4 oder höher]Wenn die Clientregistrierung sich im Modus localStore befindet, wird die Auswahl der Benutzerzustimmung in der Browsersitzung gespeichert. Die genehmigten Geltungsbereiche bleiben für den angegebenen Benutzer zwischengespeichert, bis die Sitzung geschlossen ist oder ein (in der Serverkonfiguration) definierter Zeitraum abgelaufen ist.

Liberty-Repository[8.5.5.4 oder höher]Wenn die Clientregistrierung sich im Modus databaseStore befindet, kann die Auswahl der Benutzerzustimmung in einer Datenbanktabelle, OAuthDBSchema.OAUTH20CONSENTCACHE, persistent gespeichert werden. Die Geltungsbereiche bleiben für den angegebenen Benutzer zwischengespeichert, bis ein (in der Serverkonfiguration) definierter Zeitraum abgelaufen ist. Der OpenID Connect-Provider versucht, die Zustimmungscachetabelle automatisch zu erstellen, es wird jedoch empfohlen, dass der Benutzer die Zustimmungstabelle erstellt, wenn er eine Datenbank für einen OAuth2.0-Provider und einen OpenID Connect-Provider konfiguriert. Weitere Informationen hierzu enthält der Abschnitt Persistente Konfiguration des OAuth-Service.

Liberty-Repository[8.5.5.4 oder höher]Um diese Funktionalität zu verwenden, muss der Entwickler einer Formularschablone einen prompt-Wert im oauthFormData-JavaScript-Objekt einschließen. Um die positive Antwort des Benutzers zwischenzuspeichern und zu verhindern, dass die Zustimmungserklärung in derselben Sitzung erneut angezeigt wird, wird der prompt-Wert auf none gesetzt. Um dem Benutzer zu erlauben, eine bejahende Antwort zu übergeben, ohne die Zustimmung zwischenzuspeichern, wird der prompt-Wert auf die Zeichenfolge consent gesetzt.

Wenn eine Globalisierung gewünscht wird, können Sie eine dynamische Seite verwenden, die entsprechend dem Accept-Language-Header in der Anforderung globalisierten Inhalt bereitstellt. Beim Abrufen der Schablone wird der Accept-Language-Header ebenfalls weitergeleitet, und der Entwickler der Schablone muss entscheiden, welcher Inhalt entsprechend der bevorzugten Sprache zurückgegeben werden soll.
Anmerkung: Der Variablen clientDisplayName werden in HTML keine Escapezeichen vorangestellt. Der Schablonenentwickler muss den Wert bereinigen, da der Wert von einem Benutzer während der Clientregistrierung eingegeben wird.
Wenn Sie eine angepasste Zustimmungsformularschablonenseite für einen bestimmten OAuth20-Service-Provider verwenden möchten, müssen Sie die Service-Provider-Definition in der Datei server.xml aktualisieren. In der Providerkonfiguration müssen Sie das Attribut authorizationFormTemplate des Elements oauthProvider verwenden und den Schablonen-URL als Wert hinzufügen. Das folgende Beispiel zeigt einen Beispielschabloneneintrag in der Providerkonfiguration:
<oauthProvider id="OAuthConfigSample"
  authorizationFormTemplate="https://acme.com:9043/oath20/template.html
  ...>
Das folgende Beispiel zeigt ein Beispielzustimmungsformular:
<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>

Symbol das den Typ des Artikels anzeigt. Konzeptartikel

Nutzungsbedingungen für Information Center | Feedback


Symbol für Zeitmarke Letzte Aktualisierung: 25.08.2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_oauth_customconsent
Dateiname: cwlp_oauth_customconsent.html