클라이언트 등록 엔드포인트는 OpenID Connect 제공자를 사용하기 위해
OpenID Connect 신뢰 당사자에 대한 정보를 등록하고 업데이트하고 삭제하고
검색하는 데 사용되는 관리자 관리 서비스입니다. 등록 프로세스는
OAuth 2.0 클라이언트 ID 및 클라이언트 시크릿을 포함하여 신뢰 당사자가
사용하기 위해 필요한 정보를 제공합니다(지정되지 않은 경우).
시작하기 전에
클라이언트 등록 서비스는 로컬 저장소와 데이터베이스 저장소라는
두 가지 모드 중 하나로 작동합니다. 이 모드는 Liberty 서버가 해당
클라이언트 저장소를 구성하는 방법(클라이언트가
server.xml
파일에서
oauthProvider localStore 속성(로컬 저장소)을
사용하여 정의되어 있는지 아니면 데이터베이스(데이터베이스 저장소)를
사용하여 구성되어 있는지 여부)에 의해 판별됩니다.
로컬 저장소 구성에서
클라이언트 등록 서비스는 OpenID Connect 신뢰 당사자 정보 검색으로만
제한됩니다. 더 많은 조작을 추가하여 OpenID Connect 신뢰 당사자를
등록하거나 업데이트하거나 삭제하기 위해 server.xml
파일을 수정할 수 있습니다.
데이터베이스 저장소 구성에서는
클라이언트 등록 서비스에 대한 제한사항이 없으며 모든 조작은 REST
인터페이스를 통해 작동합니다.
참고: Liberty 서버는 로컬 저장소와
데이터베이스 저장소를 둘 다 사용하여 해당 클라이언트 저장소를 구성해서는
안 됩니다. 하나의 구성 경로만 선택하십시오.
클라이언트
등록 엔드포인트는 clientManager 역할을 가진 보호된
관리 엔드포인트입니다. 이 엔드포인트에 액세스하려면 관리자가 사용자에게
clientManager 역할을 부여해야 합니다.
clientManager 역할은
oauthProvider에 대해 정의된 oauth-roles 중 하나입니다.
clientManager 역할을 clientAdministrator 그룹의 사용자
Alice 또는 멤버에게 부여하는 것을 보여주는 샘플 구성은 다음과 같습니다.
<oauth-roles>
<authenticated>
<special-subject type="ALL_AUTHENTICATED_USERS"/>
</authenticated>
<clientManager>
<group name="clientAdministrator" />
<user name="Alice" />
</clientManager>
</oauth-roles>
이 태스크 정보
OpenID Connect 신뢰 당사자에 대한 클라이언트 등록 정보는
주로 클라이언트의 사용법 시나리오 제한조건을 정의하는 데 사용됩니다.
또한 클라이언트에 대해 불투명한 OP의 기타 조작에서는 클라이언트
등록 메타데이터를 사용하여 권한 부여 의사결정을 작성합니다.
다음 예제에서는 Liberty OP가 포트 443에서 SSL로 구성되어
있다고 가정합니다.
https://server.example.com:443/oidc/endpoint/<provider_name>/registration
또한 이전 예제에서는
server.xml 파일이 사용자 이름 clientAdmin 및
비밀번호 clientAdminPassword로 구성되어 있고 oauth-role: clientManager를
사용한다고 가정합니다.
클라이언트 등록 메타데이터는 다음과 같은
매개변수로 구성됩니다.
표 1. 클라이언트 등록 매개변수속성 이름 |
데이터 유형 |
필수/선택사항 |
설명 |
client_id |
입출력(I/O) |
선택사항 |
OP에 등록 중인 클라이언트 ID입니다.
지정되지 않은 경우 이 매개변수 값은 기본적으로 등록 중에
생성됩니다. 이는 문자열입니다. |
client_secret |
입출력(I/O) |
선택사항 |
OP에 등록 중인 클라이언트 시크릿입니다.
지정되지 않은 경우 이 매개변수 값은 기본적으로 등록 중에
생성됩니다. 이는 문자열입니다. 업데이트 조작 동안 매개변수
값 '*'는 기존 값을 유지합니다. 비어 있는 매개변수 값은 새 client_secret을 생성합니다.
비어 있지 않은 매개변수 값은 기존 값을 새로 지정되는 값으로 대체합니다. |
client_name |
입출력(I/O) |
선택사항 |
OP에 등록 중인 클라이언트에 대한 설명입니다.
지정되지 않은 경우 이 매개변수는 기본적으로 client_id
매개변수 값으로 설정됩니다. 이는 문자열입니다. |
application_type |
입력 |
선택사항 |
클라이언트에 대해 설명하는 애플리케이션 유형입니다.
지정되지 않은 경우 기본값은 web입니다. 이는 문자열입니다.
예를 들어, 가능한 값은 다음과 같습니다. - <an empty value is valid>
- web
- native
|
response_types |
입력 |
선택사항 |
이 클라이언트가 사용하는 응답 유형
제한조건입니다. 지정되지 않은 경우 기본값은 code입니다.
이는 JSON 배열입니다. 예를 들어, 가능한 값은 다음과 같습니다. - <an empty value is valid>
- code
- token
- id_token token (order reversible)
특정 response_type의 경우
해당 grant_types를 지정해야 합니다. 자세한 정보는 Client Metadata
웹 사이트에서 response_types를 참조하십시오.
|
grant_types |
입력 |
선택사항 |
이 클라이언트가 사용하는 권한 부여 유형 제한조건입니다.
지정되지 않은 경우 기본값은 authorization_code입니다.
이는 JSON 배열입니다. 예를 들어, 가능한 값은 다음과 같습니다. - <an empty value is valid>
- authorization_code
- implicit
- refresh_token
- client_credentials
- urn:ietf:params:oauth:grant-type:jwtbearer
- password
|
redirect_uris |
입력 |
선택사항 |
클라이언트가 제한되는 경로 재지정 URI의 배열입니다.
이는 JSON 배열입니다. |
post_logout_redirect_uris |
입력 |
선택사항 |
클라이언트가 제한되는 포스트 로그아웃
경로 재지정 URI의 배열입니다. 이는 JSON 배열입니다. |
trusted_uri_prefixes |
입력 |
선택사항 |
클라이언트가 액세스 토큰 전송을 위해 안전한 것으로
간주한 신뢰할 수 있는 URI 접두부의 배열입니다. 이는 JSON 배열입니다. |
scope |
입력 |
선택사항 |
클라이언트가 제한되는 공백으로 구분된
범위 값입니다. 이는 문자열입니다. 클라이언트가 임의의 범위를
요청할 수 있으면 ALL_SCOPES 값을 사용할 수 있습니다. |
preauthorized_scope |
입력 |
선택사항 |
사용자 승인을 요구하지 않는 클라이언트가
미리 권한 부여하는 공백으로 구분된 범위 값입니다. 이는 문자열입니다. |
subject_type |
입력 |
선택사항 |
클라이언트에 의해 설명되는 주제 유형 제한조건입니다.
이는 문자열입니다. 예를 들어, 가능한 값은 다음과 같습니다. - <an empty value is valid>
- public
|
token_endpoint_auth_method |
입력 |
선택사항 |
클라이언트가 사용하는 토큰 엔드포인트 인증 메소드
제한조건입니다. 지정되지 않은 경우 기본값은 client_secret_basic입니다.
이는 문자열입니다. 예를 들어, 가능한 값은 다음과 같습니다. - <an empty value is valid>
- client_secret_basic
- client_secret_post
- none
|
functional_user_id |
입력 |
선택사항 |
이 매개변수는 client_credentials 권한 부여 유형에서
클라이언트 대신 작성된 요청과 연관시킬 사용자 ID를 표시합니다.
이는 문자열입니다. |
functional_user_groupIds |
입력 |
선택사항 |
클라이언트 신임 권한 부여 유형을 사용하여
이 클라이언트가 얻는 액세스 토큰과 연관시킬 그룹 ID의 목록입니다.
값은 기능 사용자가 멤버인 그룹 ID의 목록이며 여기서 그룹 ID는
대소문자를 구분하는 문자열입니다. 문자열은 권한 부여 서버에 의해
정의됩니다. 값에 여러 그룹 ID가 포함되어 있는 경우 순서는 중요하지
않습니다. 목록이 비어 있으면 청구가 생략됩니다. 이 클라이언트
메타데이터 매개변수가 지정된 경우에는 클라이언트 신임 권한 부여로
이 클라이언트에 발행되는 액세스 토큰에 대한 자체 검사 엔드포인트로부터
functional_user_groupIds 응답 매개변수에 값이 리턴됩니다.
functional_user_id 매개변수가 사용되지 않는 경우
이 매개변수는 무시됩니다. 참고: 권한 부여 서버는 이 매개변수를 자체 어설션하기 위해
클라이언트를 신뢰해서는 안 됩니다.
|
introspect_tokens |
입력 |
선택사항 |
지정된 클라이언트에 OP에 의해 발행되는 액세스 토큰을
자체 검사하는 데 필요한 권한이 있는지 여부를 표시하는 매개변수 값입니다.
이는 부울 값입니다. |
registration_client_uri |
출력 전용 |
해당사항 없음 |
등록된 클라이언트의 고유 URL을 표시하는
값과 함께 응답에서 리턴되는 매개변수입니다. 이는 문자열입니다. |
client_secret_expires_at |
출력 전용 |
해당사항 없음 |
클라이언트 시크릿이 만료되는 UTC 단위로 측정된
1970-01- 01T0:0:0Z로부터의 시간(초)을 표시하는 값과 함께 응답에
리턴되는 매개변수입니다. 0 값은 만기 시간이 없음을 표시합니다. |
client_id_issued_at |
출력 전용 |
해당사항 없음 |
클라이언트 ID가 발행된 UTC 단위로 측정된
1970-01- 01T0:0:0Z로부터의 시간(초)을 표시하는 값과 함께 응답에
리턴되는 매개변수입니다. 0 값은 식별된 클라이언트 ID 발행 시간이
없음을 표시합니다. |
- 다음 예제와 같이 클라이언트를 등록하십시오.
요청 헤더:
POST https://server.example.com:443/oidc/endpoint/<provider_name>/registration
Accept: application/json
Content-Type: application/json
Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==
요청 페이로드:
{
"token_endpoint_auth_method":"client_secret_basic",
"scope":"openid profile email general",
"grant_types":[
"authorization_code",
"client_credentials",
"implicit",
"refresh_token",
"urn:ietf:params:oauth:grant-type:jwt-bearer"
],
"response_types":[
"code",
"token",
"id_token token"
],
"application_type":"web",
"subject_type":"public",
"post_logout_redirect_uris":[
"https://server.example.com:9000/logout/",
"https://server.example.com:9001/exit/"
],
"preauthorized_scope":"openid profile email general",
"introspect_tokens":true,
"trusted_uri_prefixes":[
"https://server.example.com:9000/trusted/"
],
"redirect_uris":[
"https://server.example.com:443/resource/redirect1",
"https://server.example.com:9000/resource/redirect2"
]
}
응답 헤더:
Status: 201
Cache-Control: private
ETag: "1B2M2Y8AsgTpgAmY7PhCfg=="
Content-Type: application/json
응답 본문:
{
"client_id_issued_at":1401776782,
"registration_client_uri":"https://server.example.com:8020/oidc/endpoint/OIDC/registration/b0a376ec4b694b67b6baeb0604a312d8",
"client_secret_expires_at":0,
"token_endpoint_auth_method":"client_secret_basic",
"scope":"openid profile email general",
"grant_types":[
"authorization_code",
"client_credentials",
"implicit",
"refresh_token",
"urn:ietf:params:oauth:grant-type:jwt-bearer"
],
"response_types":[
"code",
"token",
"id_token token"
],
"application_type":"web",
"subject_type":"public",
"post_logout_redirect_uris":[
"https://server.example.com:9000/logout/",
"https://server.example.com:9001/exit/"
],
"preauthorized_scope":"openid profile email general",
"introspect_tokens":true,
"trusted_uri_prefixes":[
"https://server.example.com:9000/trusted/"
],
"client_id":"b0a376ec4b694b67b6baeb0604a312d8",
"client_secret":"nmrOQ20CrMdwd4pjqaimutZTcbQPzIoYgItjaccb9Wk33rKarhM3WDLmWIoE",
"client_name":"b0a376ec4b694b67b6baeb0604a312d8",
"redirect_uris":[
"https://server.example.com:443/resource/redirect1",
"https://server.example.com:9000/resource/redirect2"
]
}
- 다음 예제와 같이 클라이언트를 업데이트하십시오.
요청 헤더:
PUT https://server.example.com:443/oidc/endpoint/<provider_name>/registration/registration/b0a376ec4b694b67b6baeb0604a312d8
Accept: application/json
Content-Type: application/json
Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==
요청 페이로드:
{
"token_endpoint_auth_method":"client_secret_basic",
"scope":"openid profile",
"grant_types":[
"authorization_code"
],
"response_types":[
"code"
],
"application_type":"native",
"subject_type":"public",
"post_logout_redirect_uris":[
"https://server.example.com:9000/logout/"
],
"preauthorized_scope":"openid",
"introspect_tokens":false,
"trusted_uri_prefixes":[
"https://server.example.com:9003/trusted/"
],
"client_id":"b0a376ec4b694b67b6baeb0604a312d8",
"client_secret":"*",
"client_name":"updated client",
"redirect_uris":[
"https://server.example.com:443/resource/redirect1"
]
}
응답 헤더:
Status: 200
ETag: “3DD7affTGS91mfhPZ83B39Y==”
Content-Type: application/json
응답 본문:
{
"client_id_issued_at":1401776782,
"registration_client_uri":"https://server.example.com:8020/oidc/endpoint/OIDC/registration/b0a376ec4b694b67b6baeb0604a312d8",
"client_secret_expires_at":0,
"token_endpoint_auth_method":"client_secret_basic",
"scope":"openid profile",
"grant_types":[
"authorization_code"
],
"response_types":[
"code"
],
"application_type":"native",
"subject_type":"public",
"post_logout_redirect_uris":[
"https://server.example.com:9000/logout/"
],
"preauthorized_scope":"openid",
"introspect_tokens":false,
"trusted_uri_prefixes":[
"https://server.example.com:9003/trusted/"
],
"client_id":"b0a376ec4b694b67b6baeb0604a312d8",
"client_secret":"*",
"client_name":"updated client",
"redirect_uris":[
"https://server.example.com:443/resource/redirect1"
]
}
- 다음 예제와 같이 클라이언트를 검색하십시오.
요청 헤더:
GET https://server.example.com:443/oidc/endpoint/<provider_name>/registration/registration/b0a376ec4b694b67b6baeb0604a312d8
Accept: application/json
Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==
응답 헤더:
Status: 200
Cache-Control: private
ETag: “3DD7affTGS91mfhPZ83B39Y==”
Content-Type: application/json
응답 본문:
{
"client_id_issued_at":1401776782,
"registration_client_uri":"https://server.example.com:8020/oidc/endpoint/OIDC/registration/b0a376ec4b694b67b6baeb0604a312d8",
"client_secret_expires_at":0,
"token_endpoint_auth_method":"client_secret_basic",
"scope":"openid profile",
"grant_types":[
"authorization_code"
],
"response_types":[
"code"
],
"application_type":"native",
"subject_type":"public",
"post_logout_redirect_uris":[
"https://server.example.com:9000/logout/"
],
"preauthorized_scope":"openid",
"introspect_tokens":false,
"trusted_uri_prefixes":[
"https://server.example.com:9003/trusted/"
],
"client_id":"b0a376ec4b694b67b6baeb0604a312d8",
"client_secret":"*",
"client_name":"updated client",
"redirect_uris":[
"https://server.example.com:443/resource/redirect1"
]
}
- 다음 예제와 같이 클라이언트(헤드 요청)를 검색하십시오.
요청 헤더:
HEAD https://server.example.com:443/oidc/endpoint/<provider_name>/registration/registration/b0a376ec4b694b67b6baeb0604a312d8
Accept: application/json
Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==
응답 헤더:
Status: 200
Cache-Control: private, no-cache=set-cookie
ETag: “3DD7affTGS91mfhPZ83B39Y==”
Content-Type: application/json
- 다음 예제와 같이 클라이언트를 삭제하십시오.
요청 헤더:
DELETE https://server.example.com:443/oidc/endpoint/<provider_name>/registration/registration/b0a376ec4b694b67b6baeb0604a312d8
Authorization: Basic Y2xpZW50QWRtaW46Y2xpZW50QWRtaW5QYXNzd29yZA==
응답 헤더:
Status: 204
Content-Length: 0
Content-Language: en-US
참고: 이 주제의 정보는 OpenID Connect 신뢰 당사자와 OAuth 2.0 클라이언트의
클라이언트 등록 서비스에도 적용됩니다.