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.
- 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.
Die Methode cancel(oauthFormData) wird standardmäßig bereitgestellt und kann verwendet werden, um einem Benutzer zu erlauben, die Berechtigungsanforderung abzubrechen.
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.
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.
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.
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.
<oauthProvider id="OAuthConfigSample"
authorizationFormTemplate="https://acme.com:9043/oath20/template.html
...>
<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>