토큰 사용자 정의
App ID에서는 토큰을 사용하여 사용자를 식별하고 리소스를 보호합니다. 서비스에서 토큰에 삽입한 정보를 사용자 정의하도록 선택할 수 있습니다. 토큰에 정보를 주입하면 추가 네트워크 호출을 구성할 필요 없이 런타임에 애플리케이션에서 해당 정보를 사용할 수 있습니다. 토큰 및 App ID에서 해당 토큰을 사용하는 방법에 관한 자세한 정보는 토큰 이해를 참조하십시오.
토큰 구성을 사용자 정의하여 보안 및 사용자 환경 요구사항이 충족되는지 확인할 수 있습니다. 그러나 토큰이 손상되는 경우 악의적 사용자가 애플리케이션에 영향을 미치는 데 사용할 수 있는 정보나 시간이 증가할 수 있습니다. 사용자 정의 전에 사용자 정의 때문에 미칠 수 있는 보안 영향을 파악하십시오.
사용자 정의 청구 맵핑 이해
청구는 엔티티가 자신에 대해 또는 다른 사용자 대신 작성하는 내역서입니다. 예를 들어 ID 제공자를 사용하여 애플리케이션에 사인인한 경우 해당 제공자는 이미 사용자에 대해 알고 있는 정보로 그룹화할 수 있도록 애플리케이션에 청구 그룹을 전송하거나 앱에 사용자에 대한 내역서를 전송합니다. 이 방법을 통해 사인인할 때 앱이 해당 정보로(사용자가 구성한 방식으로) 설정됩니다.
어떤 유형의 청구를 정의할 수 있습니까?
App ID에서 제공되는 청구는 사용자 정의 레벨에 따라 구분되는 몇 가지 카테고리로 분류됩니다.
- 정규화된 청구
- 각 ID 토큰에는 App ID에서 정규화된 청구로 인식하는 청구 세트가 있습니다. 사용 가능하면 기본적으로 ID 제공자에서 토큰으로 청구가 직접 맵핑됩니다. 이 청구는 명시적으로 생략할 수는 없지만, 토큰에서 사용자 정의 청구로 겹쳐쓸 수 있습니다. 청구에는
name,email,picture및locale이 포함됩니다. - 제한된 청구
- 제한된 청구는 사용자 정의 가능성이 제한되며 있으며 사용자 정의 맵핑으로 겹쳐쓸 수 없는 청구입니다. 액세스 토큰의 경우
scope가 제한된 유일한 청구입니다. 겹쳐쓸 수 없지만 고유 범위로 확장할 수 있습니다. 범위가 액세스 토큰에 맵핑되는 경우 값이 문자열이어야 하며appid_접두부를 사용할 수 없습니다. 그렇지 않을 경우 무시됩니다. ID 토큰의 경우identities및oauth_clients청구를 수정하거나 겹쳐쓸 수 없습니다. - 등록된 청구
- 등록된 청구는 액세스 및 ID 토큰에 있으며 App ID에서 정의합니다. 사용자 정의 맵핑으로 대체할 수 없습니다. 이 청구는 서비스에서 무시하며
iss,aud,sub,iat,exp,amr및tenant를 포함합니다.
토큰의 청구를 정의해도 속성을 변경하거나 제거하지 않습니다. 런타임 시 토큰에 있는 정보를 변경합니다.
청구를 토큰에 맵핑하는 방법은 무엇입니까?
각각의 맵핑은 청구를 검색하기 위해 사용되는 키 및 데이터 소스 오브젝트를 통해 정의됩니다. 최대 페이로드가 100KB 미만이면 최대 100개의 청구를 각 토큰에 삽입할 수 있습니다. 중첩된 청구를 사용하려면 점 구문을 사용하여 해당 청구를 포함할 수 있습니다. 예를 들어, nested.attribute입니다.
청구는 토큰마다 개별적으로 설정되며 다음 예에 표시된 대로 순차적으로 적용됩니다.
{
"accessTokenClaims": [
{
"source": "saml",
"sourceClaim": "moderator"
},
{
"source": "saml",
"sourceClaim": "viewer",
"destinationClaim": "reader"
}
],
"idTokenClaims": [
{
"source": "saml",
"sourceClaim": "attributes.uid"
},
{
"source": "saml",
"sourceClaim": "Name",
"destinationClaim": "firstName"
},
{
"source": "saml",
"sourceClaim": "Country"
}
]
}
| 오브젝트 | 설명 |
|---|---|
source |
청구의 소스를 정의합니다. 옵션에는 saml, cloud_directory, facebook, google, appid_custom 및 attributes가 포함됩니다. |
sourceClaim |
소스에서 제공한 대로 청구를 정의합니다. ID 제공자의 사용자 정보 또는 사용자의 App ID 사용자 정의 속성을 참조할 수 있습니다. |
destinationClaim |
선택사항: 토큰의 현재 청구를 대체할 수 있는 사용자 정의 속성을 정의합니다. |
토큰 구성
API를 사용하면 App ID 토큰에 리턴된 정보를 사용자 정의할 수 있습니다.
토큰의 수명을 구성하려면 서비스 대시보드를 통해 빠르게 변경할 수 있습니다. 자세한 정보는 인증 관리를 참조하십시오.
-
터미널에서 다음 명령을 실행하여 API키를 얻으십시오.
ibmcloud iam api-key-create NAME [-d DESCRIPTION] [-f, --file FILE]API 키 만들기 명령 옵션 이해 옵션 설명 NAME키에 부여할 이름입니다. 예를 들어, myKey입니다.DESCRIPTION키 또는 키 용도에 대한 설명입니다. 예를 들어, "This is my App ID API key"입니다.FILE키 저장 위치입니다. 예를 들어, key_file입니다. -
이전 단계에서 얻은 API 키를 사용하여 IAM 토큰을 얻으십시오.
curl -k -X POST "https://iam.cloud.ibm.com/identity/token" \ --header "Content-Type: application/x-www-form-urlencoded" \ --header "Accept: application/json" \ --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" \ --data-urlencode "apikey=<apiKey>" -
서비스 인스턴스의 테넌트 ID를 가져오십시오. 서비스 또는 애플리케이션 인증 정보에서 값을 찾을 수 있습니다.
-
토큰 구성이 포함된
/config/tokens엔드포인트에 대한 PUT 요청을 작성하십시오.curl -X PUT "https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/tokens" \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer <IAMToken>" \ -d '{ "access": { "expires_in": 3600 }, "refresh": { "enabled": true, "expires_in": 2592001 }, "anonymousAccess": { "enabled": false }, "accessTokenClaims": [ { "source": "roles" }, { "source": "saml", "sourceClaim": "name_id", "destinationClaim": "id" } ], "idTokenClaims": [ { "source": "saml", "sourceClaim": "attributes.uid" } ] }'토큰 구성 이해 가변 설명 access: expires_in액세스 토큰이 유효한 시간 길이입니다. 값이 작을수록 토큰 절도에 대비한 더 많은 보호가 제공됩니다. 값은 초 단위로 제공되며 300-86400범위의 정수가 될 수 있습니다. 기본값은3600입니다.refresh: expires_in새로 고치기 토큰이 유효한 시간 길이입니다. 값이 작을수록 토큰 절도에 대비한 더 많은 보호가 제공됩니다. 값은 초 단위로 제공되며 86400-7776000범위의 정수가 될 수 있습니다. 기본값은2592000(30일)입니다.anonymousAccess익명 토큰이 유효한 시간 길이입니다. 앱과 상호작용을 시작할 때 사용자에게 익명 토큰을 지정합니다. 사용자가 사인인하면 익명 토큰의 정보가 해당 사용자와 연관된 토큰으로 전송됩니다. 값은 초 단위로 제공되며 86400-7776000범위의 정수가 될 수 있습니다. 기본값은2592000(30일)입니다.accessTokenClaims액세스 토큰과 관련된 청구가 맵핑될 때 작성되는 오브젝트가 포함된 배열입니다. 선택한 사용자 ID 제공자가 리턴할 역할 또는 특정 속성에 대한 정보를 포함시킬 수 있습니다. 참고: ID 제공자에서 "roles"라는 제목의 사용자 정의 청구를 이미 사용 중인 경우 두 값을 모두 확인하려면 대상 청구를 사용해야 합니다. idTokenClaims청구를 ID 토큰에 맵핑할 때 토큰에 있는 정보가 포함된 배열입니다. 구성에 따라 "roles"가 ID 토큰에 있도록 선택할 수도 있습니다. 요청을 할 때마다 토큰 수명을 설정해야 합니다. 값이 설정되지 않으면 기본값을 사용합니다. 각 사용자 정의 요청으로 이전에 구성한 내용을 겹쳐씁니다. API의 수명 구성 스펙은 서비스 대시보드의 스펙과 다릅니다.
-
토큰이 리턴되어 토큰을 디코딩하면 다음 예와 유사한 결과가 표시됩니다.
{ "sub" : "1234567890", "name" : "John Doe", "exp" : 1564566, "roles" : ["admin", "manager"], "id": "<nameIDFromSaml>", "attributes.uid": "<uidFromSaml>" ... }