사용자 정의 승인 양식 템플리트

OAuth 권한 부여 서버는 OAuth 클라이언트가 지정된 범위의 보호된 자원에 액세스하도록 권한이 부여된 사용자 승인 정보를 얻기 위한 템플리트를 제공합니다. OAuth 클라이언트의 권한 부여 요청에는 템플리트의 요청된 범위 목록이 포함됩니다.

WebSphere® Application Server를 통해 승인 양식 템플리트를 정적 HTML 페이지나 동적 웹 페이지로 지정할 수 있습니다. 두 경우 모두 보호되지 않는 웹 자원으로 템플리트를 제공해야 합니다. WebSphere Application Server 통합의 양식 검색자는 이 템플리트 URL에 액세스할 때 인증을 수행하지 않습니다.

WebSphere Application Server OAuth 제공자는 샘플 승인 양식 템플리트를 포함하며 oauthFormData 변수를 사용하여 사용자 정의할 수 있습니다.

승인 양식을 사용자 정의하려면 Javascript를 사용하여 oauthFormData 변수를 편집해야 합니다. 다음 변수는 양식 데이터에 포함됩니다.
  • authorizationUrl - 양식을 제출할 권한 부여 URL
  • clientDisplayName - 클라이언트의 표시 이름
  • nonce - CSRF(Cross-Site Request Forgery)를 방지하기 위해 임의로 생성된 번호
  • 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 권한 부여 요청을 제출하는 사용자 고유 기능을 구현할 수 있습니다.

cancel(oauthFormData) 메소드는 기본적으로 제공되며 사용자가 권한 부여 요청을 취소할 수 있도록 허용하는 데 사용될 수 있습니다.

승인 양식 또한 사용자의 승인 선택사항을 캐시할 수 있도록 하기 위해 수정될 수 있습니다. 이는 같은 OpenID Connect 클라이언트가 동일한 승인 범위 또는 더 줄어든 범위로 새 권한 부여 요청을 수행하면 사용자에게 승인 양식이 표시되지 않음을 의미합니다. 대신 이전에 허용된 범위가 권한 부여된 것으로 간주되어 보호된 자원에 적절히 전달됩니다.

클라이언트 등록이 localStore 모드인 경우에는 사용자의 승인 선택사항이 브라우저 세션에 캐시됩니다. 승인된 범위는 세션이 닫히거나 일정 시간(서버 구성에 지정되어 있음)이 경과할 때까지 해당 사용자에 대해 캐시된 상태로 유지됩니다.

클라이언트 등록이 databaseStore 모드인 경우에는 사용자의 승인 선택사항이 데이터베이스 테이블 OAuthDBSchema.OAUTH20CONSENTCACHE에서 지속될 수 있습니다. 이 범위는 일정 시간(서버 구성에 지정되어 있음)이 경과할 때까지 해당 사용자에 대해 캐시된 상태로 유지됩니다. OpenID Connect 제공자는 승인 캐시 테이블을 자동으로 작성하려 시도하지만, OAuth2.0 제공자 및 OpenID Connect 제공자에 대해 데이터베이스를 구성하는 경우에는 사용자가 명시적으로 승인 테이블을 작성하는 것이 좋습니다. 세부사항은 지속적 OAuth 서비스 구성을 참조하십시오.

이 기능을 사용하려면 양식 템플리트의 개발자가 oauthFormData JavaScript 오브젝트 내에 prompt 값을 포함시켜야 합니다. 사용자의 긍정적인 응답을 캐시하고 같은 세션에서 승인 양식이 다시 표시되지 않도록 하려는 경우에는 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>

주제의 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwlp_oauth_customconsent
파일 이름: cwlp_oauth_customconsent.html