カスタム同意フォーム・テンプレート

OAuth 許可サーバーは、特定の有効範囲内で保護リソースへのアクセスが許可されている OAuth クライアントに関するユーザー同意情報を獲得するためのテンプレートを提供します。 OAuth クライアントからの許可要求は、要求された有効範囲のリストをテンプレートに示します。

WebSphere® Application Server では、同意フォーム・テンプレートを静的 HTML ページまたは動的 Web ページのいずれかとすることができます。 いずれの場合にも、このテンプレートを無保護 Web リソースとして提供する必要があります。 WebSphere Application Server 統合でのフォーム・リトリーバーは、このテンプレート URL へのアクセス時に認証を実行しません。

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 ヘッダーも転送され、テンプレート開発者は優先言語を考慮してどのコンテンツを返すかを決める必要があります。
トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): clientDisplayName 変数は HTML ではエスケープされません。 この値はクライアント登録時にユーザーによって入力されるので、テンプレート開発者はこの値を浄化する必要があります。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