9.5. JavaScript 통합
Red Hat Single Sign-On Server에는 정책 적용자가 보호하는 리소스 서버와 상호 작용하는 데 사용할 수 있는 JavaScript 라이브러리가 제공됩니다. 이 라이브러리는 Red Hat Single Sign-On JavaScript 어댑터를 기반으로 하며, 이를 통합하여 클라이언트가 Red Hat Single Sign-On 서버에서 권한을 얻을 수 있습니다.
웹 페이지에 다음 스크립트
태그를 포함하여 실행 중인 Red Hat Single Sign-On Server 인스턴스에서 이 라이브러리를 가져올 수 있습니다.
<script src="http://.../auth/js/keycloak-authz.js"></script>
<script src="http://.../auth/js/keycloak-authz.js"></script>
이렇게 하면 다음과 같이 KeycloakAuthorization
인스턴스를 생성할 수 있습니다.
const keycloak = ... // obtain a Keycloak instance from keycloak.js library const authorization = new KeycloakAuthorization(keycloak);
const keycloak = ... // obtain a Keycloak instance from keycloak.js library
const authorization = new KeycloakAuthorization(keycloak);
keycloak-authz.js 라이브러리는 다음 두 가지 주요 기능을 제공합니다.
- UMA 보호 리소스 서버에 액세스하는 경우 권한 티켓을 사용하여 서버에서 권한을 얻습니다.
- 리소스를 전송하고 애플리케이션이 액세스하려는 범위를 보내 서버에서 권한을 얻습니다.
두 경우 모두 라이브러리를 사용하면 리소스 서버와 Red Hat Single Sign-On 인증 서비스와 쉽게 상호 작용하여 클라이언트가 리소스 서버의 보호 리소스에 액세스하는 데 사용할 수 있는 권한을 통해 토큰을 가져올 수 있습니다.
9.5.1. UMA 보호 리소스 서버의 권한 부여 응답 처리
리소스 서버가 정책 적용자에 의해 보호되는 경우 전달자 토큰과 함께 전달된 권한에 따라 클라이언트 요청에 응답합니다. 일반적으로 보호된 리소스에 액세스할 수 있는 권한이 없는 전달자 토큰을 사용하여 리소스 서버에 액세스하려고 하면 리소스 서버는 401 상태 코드 및 WWW-Authenticate
헤더로 응답합니다.
HTTP/1.1 401 Unauthorized WWW-Authenticate: UMA realm="${realm}", as_uri="https://${host}:${port}/auth/realms/${realm}", ticket="016f84e8-f9b9-11e0-bd6f-0021cc6004de"
HTTP/1.1 401 Unauthorized
WWW-Authenticate: UMA realm="${realm}",
as_uri="https://${host}:${port}/auth/realms/${realm}",
ticket="016f84e8-f9b9-11e0-bd6f-0021cc6004de"
자세한 내용은 UMA 권한 부여 프로세스를 참조하십시오.
클라이언트가 해야 하는 작업은 리소스 서버에서 반환한
헤더에서 권한 티켓을 추출하고 라이브러리를 사용하여 다음과 같이 권한 부여 요청을 보내는 것입니다.
WWW-Authenticate
// prepare a authorization request with the permission ticket const authorizationRequest = {}; authorizationRequest.ticket = ticket; // send the authorization request, if successful retry the request Identity.authorization.authorize(authorizationRequest).then(function (rpt) { // onGrant }, function () { // onDeny }, function () { // onError });
// prepare a authorization request with the permission ticket
const authorizationRequest = {};
authorizationRequest.ticket = ticket;
// send the authorization request, if successful retry the request
Identity.authorization.authorize(authorizationRequest).then(function (rpt) {
// onGrant
}, function () {
// onDeny
}, function () {
// onError
});
authorize
함수는 완전히 비동기식이며 서버로부터 알림을 수신하는 몇 가지 콜백 함수를 지원합니다.
-
OnGrant
: 함수의 첫 번째 인수입니다. 권한 부여에 성공하고 서버가 요청된 권한이 있는 RPT를 반환하면 콜백에서 RPT를 수신합니다. -
onDeny
: 함수의 두 번째 인수입니다. 서버가 권한 부여 요청을 거부한 경우에만 호출됩니다. -
OnError
: 함수의 세 번째 인수입니다. 서버가 예기치 않게 응답한 경우에만 호출됩니다.
대부분의 애플리케이션에서는 onGrant
콜백을 사용하여 401 응답 후 요청을 다시 시도해야 합니다. 후속 요청에는 재시도를 위한 전달자 토큰으로 RPT가 포함되어야 합니다.
9.5.2. 인타이틀먼트 가져오기
라이브러리는 클라이언트가 액세스하려는 리소스와 범위를 제공하여 서버에서 RPT를 얻는 데 사용할 수 있는 keycloak-authz.js
인타이틀먼트
기능을 제공합니다.
예를 들어 사용자가 액세스할 수 있는 모든 리소스 및 범위에 대한 권한이 있는 RPT를 얻는 방법
authorization.entitlement('my-resource-server-id').then(function (rpt) { // onGrant callback function. // If authorization was successful you'll receive an RPT // with the necessary permissions to access the resource server });
authorization.entitlement('my-resource-server-id').then(function (rpt) {
// onGrant callback function.
// If authorization was successful you'll receive an RPT
// with the necessary permissions to access the resource server
});
특정 리소스 및 범위에 대한 권한이 있는 RPT를 얻는 방법의 예
authorization.entitlement('my-resource-server', { "permissions": [ { "id" : "Some Resource" } ] }).then(function (rpt) { // onGrant });
authorization.entitlement('my-resource-server', {
"permissions": [
{
"id" : "Some Resource"
}
]
}).then(function (rpt) {
// onGrant
});
인타이틀먼트
기능을 사용하는 경우 액세스하려는 리소스 서버의 client_id 를 제공해야 합니다.
인타이틀먼트
기능은 완전히 비동기식이며 서버로부터 알림을 수신하는 몇 가지 콜백 함수를 지원합니다.
-
OnGrant
: 함수의 첫 번째 인수입니다. 권한 부여에 성공하고 서버가 요청된 권한이 있는 RPT를 반환하면 콜백에서 RPT를 수신합니다. -
onDeny
: 함수의 두 번째 인수입니다. 서버가 권한 부여 요청을 거부한 경우에만 호출됩니다. -
OnError
: 함수의 세 번째 인수입니다. 서버가 예기치 않게 응답한 경우에만 호출됩니다.
9.5.3. 권한 부여 요청
및 인증
기능은 모두 권한 부여 요청 오브젝트를 수락합니다. 이 오브젝트는 다음 속성을 사용하여 설정할 수 있습니다.
인타이틀먼트
권한
리소스 및 범위를 나타내는 오브젝트의 배열입니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow const authorizationRequest = { "permissions": [ { "id" : "Some Resource", "scopes" : ["view", "edit"] } ] }
const authorizationRequest = { "permissions": [ { "id" : "Some Resource", "scopes" : ["view", "edit"] } ] }
metadata
해당 속성이 서버에서 권한 부여 요청을 처리하는 방법을 정의하는 오브젝트입니다.
response_include_resource_name
RPT 권한에 리소스 이름이 포함되어야 하는 경우 서버에 대한 부울 값입니다. false인 경우 리소스 식별자만 포함됩니다.
response_permissions_limit
RPT에 있을 수 있는 권한 수에 대한 제한을 정의하는 정수 N입니다.
rpt
매개변수와 함께 사용하면 마지막 N개의 요청된 권한만 RPT에 유지됩니다.
submit_request
서버가 권한 티켓에서 참조하는 리소스 및 범위에 대한 권한 요청을 생성해야 하는지 여부를 나타내는 부울 값입니다. 이 매개변수는 UMA 권한 부여 프로세스의 일부로
티켓
매개변수와 함께 사용할 때만 적용됩니다.
9.5.4. RPT 얻기
라이브러리에서 제공하는 권한 부여 함수를 사용하여 이미 RPT를 받은 경우, 권한 부여 개체(이전에 표시된 기술 중 하나에 의해 초기화되었다고 가정함)에서 다음과 같이 RPT를 얻을 수 있습니다.
const rpt = authorization.rpt;
const rpt = authorization.rpt;