定制同意书模板

OAuth 授权服务器提供了一个模板来获取有关已授权哪些 OAuth 客户机访问所给定范围中的受保护资源的用户同意信息。来自 OAuth 客户机的授权请求显示了该模板中所请求范围的列表。

WebSphere® Application Server 允许同意书模板为静态 HTML 页面或者动态 Web 页面。在这两种情况下,必须将模板作为不受保护的 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 方法。但是,如果开发者熟悉 OAuth2 协议,那么他们可以实现自己的功能来提交 OAuth 授权请求。

如果需要全球化,那么可以使用动态页面,此页面将根据请求中的 Accept-Language 头来返回全球化的内容。检索模板时,还会转发 Accept-Language 头,并且模板开发者必须决定要返回哪些有关首选语言的内容。
避免故障 避免故障: 在 HTML 中,clientDisplayName 变量未转义。模板开发者必须审查值,因为值是由用户在客户机注册期间输入。gotcha
要使用特定 OAuth20 服务提供程序的定制同意书模板页面,您必须更新服务提供程序配置文件。在提供程序配置中,您必须更新 oauth20.authorization.form.template 参数,并添加模板 URL 作为值。以下示例显示了提供者配置中的样本模板条目:
<parameter name="oauth20.authorization.form.template" type="cc" customizable="true">
  <value>https://acme.com:9043/oath20/template.html</value>
</parameter>
以下示例说明了一个样本同意书:
<parameter name="oauth20.authorization.loginURL" type="cc" customizable="true">
  <value>https://acme.com:9043/oath20/login.jsp</value>
</parameter>

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>
    <input type="button" value="Yes" onclick="javascript:submitForm(oauthFormData);"/>
    <input type="button" value="No, Thanks"/>
  </div>
</body>
</html>

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_oauthcustomconsent
文件名:cwbs_oauthcustomconsent.html