自訂同意表單範本

OAuth 授權伺服器會提供一個範本,用來取得關於在給定的範圍內,哪些 OAuth 用戶端獲授權存取受保護之資源的使用者同意資訊。 OAuth 用戶端的授權要求包括範本中所要求的範圍清單。

WebSphere® Application Server 接受同意表單範本是靜態的 HTML 頁面或動態網頁。 不論哪一種情況,範本都必須是作為一項未受保護的 Web 資源來提供。 當存取這個範本 URL 時,WebSphere Application Server 整合中的表單擷取器不會執行任何鑑別。

WebSphere Application Server OAuth 提供者包含一份範例同意表單範本,您可以利用 oauthFormData 變數來進行自訂。

如果要自訂同意表單,您必須利用 JavaScript 來編輯 oauthFormData 變數。 表單資料包含下列變數:
  • authorizationUrl - 提交表單的授權 URL
  • clientDisplayName - 用戶端的顯示名稱
  • nonce - 隨機產生的號碼,用來防止偽造跨網站要求 (CSRF)
  • client_id - 請參閱 OAuth 2.0 規格
  • response_type - 請參閱 OAuth 2.0 規格
  • redirect_uri - 請參閱 OAuth 2.0 規格
  • state - 請參閱 OAuth 2.0 規格
  • scope - 請參閱 OAuth 2.0 規格

表單範本的開發人員必須使用 JavaScript,來包含 oauthFormData 變數的內容。開發人員必須將範圍值解譯為對使用者有意義的值。 當使用者進行要求授權時,開發人員可以呼叫 submitForm(oauthFormData) 方法來執行授權。依預設會提供 submitForm 方法。不過,如果開發人員熟悉 OAuth 2.0 通訊協定,他們可以實作他們自己的函數來提交 OAuth 授權要求。

Liberty 儲存庫[8.5.5.4 或更新版本]依預設,會提供 cancel(oauthFormData) 方法,這可用來容許使用者取消授權要求。

Liberty 儲存庫[8.5.5.4 或更新版本]也可以修改同意表單,以容許快取使用者的同意選項。也就是說,如果同一 OpenID Connect 用戶端發出新的授權要求,且核准範圍或縮減範圍相同,則不會提示使用者提供同意表單。反倒是會將先前容許的範圍視為已授權,從而傳遞給受保護的資源。

Liberty 儲存庫[8.5.5.4 或更新版本]如果用戶端登錄是 localStore 模式,則會在瀏覽器階段作業快取使用者的同意選項。仍會快取給定使用者的核准範圍,直到階段作業關閉或過了所設定的時間量(指定於伺服器配置中)。

Liberty 儲存庫[8.5.5.4 或更新版本]如果用戶端登錄是 databaseStore 模式,則使用者的同意選項可以持續保存在資料庫表格 OAuthDBSchema.OAUTH20CONSENTCACHE 中。仍會快取給定使用者的範圍,直到過了所設定的時間量(指定於伺服器配置中)。OpenID Connect 提供者會嘗試自動建立同意快取表格,但是若有為 OAuth 2.0 提供者和 OpenID Connect 提供者配置資料庫,建議使用者明確建立同意表格;如需進一步詳細資料,請參閱持續保存 OAuth 服務配置

Liberty 儲存庫[8.5.5.4 或更新版本]如果要使用這項功能,表單範本開發人員必須在 oauthFormData JavaScript 物件中包含 prompt 值。如果要快取使用者的肯定回應,並阻止同意表單再次顯示於相同的階段作業中,可將 prompt 值設為字串 none。如果要容許使用者提交肯定回應,而不快取核准,可將 prompt 值設為字串 consent

您可以使用動態頁面,根據要求中的 Accept-Language 標頭來傳回全球化內容。擷取範本時,會轉遞 Accept-Language 標頭,關於偏好的語言,範本開發人員必須決定要傳回哪些內容。
註: 在 HTML 中,不會跳出 clientDisplayName 變數。 範本開發人員必須將值消毒,因為這個值是使用者在用戶端登錄期間所輸入。
如果要將自訂同意表單範本頁面用於特定的 OAuth 2.0 服務提供者,您必須更新 server.xml 檔中的服務提供者定義。在提供者配置中,您必須使用 oauthProvider 元素的 authorizationFormTemplate 屬性,並新增範本 URL 來作為值。 下列範例顯示提供者配置中的範例範本項目:
<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];
			                callbackHandler.handle(callbacks);
		}
	}
	                callbackHandler.handle(callbacks);
		// 設定用戶端名稱
		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>

指示主題類型的圖示 概念主題

資訊中心條款 | 意見


「時間戳記」圖示 前次更新: 2015 年 6 月 22 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_oauth_customconsent
檔名:cwlp_oauth_customconsent.html