定制许可表单模板

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 Repository[8.5.5.4 或更高版本]cancel(oauthFormData) 方法是缺省情况下提供的,可用于允许用户取消授权请求。

Liberty Repository[8.5.5.4 或更高版本]还可修改同意书以允许缓存用户的同意选择。这意味着,如果同一 OpenID Connect 客户机发出新的授权请求(具有相同批准范围或缩减范围),那么系统不会提示用户提供同意书。反而先前允许的范围被视为已授权并相应传递至受保护资源。

Liberty Repository[8.5.5.4 或更高版本]如果客户机注册处于 localStore 方式,那么用户的同意选择缓存在浏览器会话中。系统会缓存给定用户的已批准范围,直到会话关闭或一定量的时间(在服务器配置中指定)已过去。

Liberty Repository[8.5.5.4 或更高版本]如果客户机注册处于 databaseStore 方式,那么用户的同意选择可保存在数据库表 OAuthDBSchema.OAUTH20CONSENTCACHE 中。系统会缓存给定用户的范围,直到一定量的时间(在服务器配置中指定)已过去。OpenID Connect 提供者尝试自动创建同意缓存表,但建议为 OAuth2.0 提供者和 OpenID Connect 提供者配置数据库时用户显式创建同意表,有关进一步详细信息,请参阅持久 OAuth 服务配置

Liberty Repository[8.5.5.4 或更高版本]要使用此功能,表单模板的开发者必须将 prompt 值包含在 oauthFormData JavaScript 对象中。为缓存用户的肯定响应并阻止同一会话中再次显示同意书,prompt 值设置为字符串 none。为允许用户提交肯定响应而不缓存批准,prompt 值设置为字符串 consent

可以使用动态页面,根据请求中的 Accept-Language 头来返回全球化内容。检索模板时,会转发 Accept-Language 头,并且模板开发者必须决定要返回哪些有关首选语言的内容。
注: clientDisplayName 变量不会在 HTML 中进行转义。模板开发者必须净化值,因为值是由用户在客户机注册期间输入。
要将定制许可表单模板页面用于特定 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];
						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>

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

信息中心的条款和条件 | 反馈


时间戳记图标 最近一次更新时间: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_oauth_customconsent
文件名:cwlp_oauth_customconsent.html