カスタム同意フォーム・テンプレート
OAuth 許可サーバーは、特定の有効範囲内で保護リソースへのアクセスが許可されている OAuth クライアントに関するユーザー同意情報を獲得するためのテンプレートを提供します。 OAuth クライアントからの許可要求は、要求された有効範囲のリストをテンプレートに示します。
WebSphere® Application Server では、同意フォーム・テンプレートを静的 HTML ページまたは動的 Web ページのいずれかとすることができます。 いずれの場合にも、このテンプレートを無保護 Web リソースとして提供する必要があります。 WebSphere Application Server 統合でのフォーム・リトリーバーは、このテンプレート URL へのアクセス時に認証を実行しません。
WebSphere Application Server OAuth プロバイダーには簡単なサンプルの同意フォームが含まれており、このプロバイダーは 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 許可要求を送信することができます。

<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>