다음을 통해 공유


클레임 규칙 언어의 역할

ADFS(Active Directory Federation Services) 클레임 규칙 언어는 들어오고 나가는 클레임의 동작에 대한 관리 구성 요소 역할을 하며, 클레임 엔진은 사용자 지정 규칙을 정의하는 클레임 규칙 언어의 논리에 대한 처리 엔진 역할을 합니다. 모든 규칙은 클레임 엔진에서 처리 하는 방법에 대 한 자세한 내용은 참조 하십시오. 클레임 엔진의 역할합니다.

클레임 규칙 언어를 사용하여 사용자 지정 클레임 규칙 만들기

AD FS 클레임 규칙 언어를 id 클레임의 동작을 결정 하기 위해 사용 하는 사용자 지정 규칙을 정의 하는 옵션으로는 관리자를 제공 합니다. 이 항목의 클레임 규칙 언어 구문 예를 사용하여 조직의 요구 사항에 맞게 클레임을 열거, 추가, 삭제 및 수정하는 사용자 지정 규칙을 만들 수 있습니다. 클레임 규칙 언어 구문에를 입력 하 여 사용자 지정 규칙을 빌드할 수는 사용자 지정 클레임을 사용 하 여 클레임 보내기 규칙 템플릿.

규칙은 세미콜론으로 구분합니다.

사용자 지정 규칙을 사용 하는 경우에 대 한 자세한 내용은 참조 사용자 지정 클레임 규칙을 사용 하는 경우합니다.

클레임 규칙 템플릿을 사용하여 클레임 규칙 언어 구문 학습

AD FS에는 또한 미리 정의 된 클레임 발급 및 일반적인 구현 하는 데 사용할 수 있는 허용 규칙 템플릿 클레임 규칙 클레임 집합을 제공 합니다. 에 클레임 규칙 편집 대화 상자 지정된 트러스트에 대 한 미리 정의 된 규칙을 만들 수 있습니다-해당 규칙을 구성 하는 클레임 규칙 언어 구문을 보려면 및-클릭 하 여는 규칙 언어 보기 해당 규칙에 대 한 탭 합니다. 이 섹션의 정보를 사용 하 고 규칙 언어 보기 기술은 사용자 지정 규칙을 생성 하는 방법에 대 한 정보를 제공할 수 있습니다.

클레임 규칙 및 클레임 규칙 템플릿에 대 한 정보를 자세한 참조 규칙의 역할 클레임합니다.

클레임 규칙 언어의 구성 요소 이해

클레임 규칙 언어는 다음 구성 요소로 구성되며, “ =>” 연산자로 구분됩니다.

  • 조건

  • 발급 문

조건

규칙의 조건을 사용하여 입력 클레임을 확인하고 규칙의 발급 문을 실행할지를 결정할 수 있습니다. 조건은 규칙 본문 부분을 실행할 때 true로 평가되어야 하는 논리 식을 나타냅니다. 이 부분이 누락되면 논리상 true, 즉 규칙 본문이 항상 실행되는 것으로 가정합니다. 조건 부분에는 결합 논리 연산자(“&&”)와 함께 결합되는 조건 목록이 포함됩니다. 전체 조건 부분이 true로 평가되려면 목록의 모든 조건이 true로 평가되어야 합니다. 조건은 클레임 선택 연산자 또는 집계 함수 호출일 수 있습니다. 이 둘은 상호 배타적인데 이는 클레임 선택기와 집계 함수가 단일 규칙 조건 부분에서 결합될 수 없음을 의미합니다.

조건은 규칙에서 선택 사항입니다. 예를 들어 다음 규칙에는 조건이 없습니다.

=> issue(type = "http://test/role", value = "employee");

다음과 같은 세 가지 조건이 있습니다.

  • 단일 조건—조건의 가장 단순한 형태입니다. 하나의 표현식(예: Windows 계정 이름 = 도메인 사용자)에 대해서만 확인합니다.

  • 다중 조건 - 이 조건은 규칙 본문에서 여러 표현식을 처리하기 위해 추가 확인이 필요합니다(예: Windows 계정 이름 = 도메인 사용자 및 그룹 = contosopurchasers).

참고 항목

다른 조건이 있지만 이는 단일 조건 또는 다중 조건의 하위 집합입니다. 이를 정규식(Regex) 조건이라고 합니다. 입력 식을 사용하고 이 식과 지정된 패턴을 일치시키는 데 사용됩니다. 사용할 수 있는 방법에 대한 예가 아래에 나와 있습니다.

다음 예에서는 사용자 지정 규칙을 만드는 데 사용할 수 있는 조건 형식을 기반으로 한 몇 가지 구문 생성을 보여 줍니다.

단일 조건 예제

다음 표에서 단일 표현식 조건을 설명합니다. 지정된 클레임 유형의 클레임 또는 지정된 클레임 유형과 클레임 값의 클레임을 단순히 확인하도록 생성됩니다.

조건 설명 조건 구문 예
이 규칙에는 지정된 클레임 형식('<http://test/name>')이 있는 입력 클레임을 확인하는 조건이 있습니다. 일치하는 클레임이 입력 클레임에 있으면 규칙이 일치하는 클레임을 출력 클레임 집합에 복사합니다. c: [type == "http://test/name"] => issue(claim = c );
이 규칙에는 지정된 클레임 형식('<http://test/name>') 및 클레임 값('Terry')이 있는 입력 클레임을 확인하는 조건이 있습니다. 일치하는 클레임이 입력 클레임에 있으면 규칙이 일치하는 클레임을 출력 클레임 집합에 복사합니다. c: [type == "http://test/name", value == "Terry"] => issue(claim = c);

다음 섹션에는 여러 클레임을 확인하는 조건, 클레임 발급자를 확인하는 조건, 정규식 패턴과 일치하는 값을 확인하는 조건 등 더욱 복잡한 조건이 나와 있습니다.

다중 조건 예제

다음 표에는 다중 표현식 조건 예제가 나와 있습니다.

조건 설명 조건 구문 예
이 규칙에는 각각 지정된 클레임 유형('<http://test/name>' 및 '<http://test/email>')이 있는 두 개의 입력 클레임을 확인하는 조건이 있습니다. 두 개의 일치하는 클레임이 입력 클레임에 있으면 규칙이 이름 클레임을 출력 클레임 집합에 복사합니다. c1: [type == "http://test/name"] && c2: [type == "http://test/email"] => issue (claim = c1 );

정규 조건 예제

다음 표에는 정규 표현식 기반 조건의 예제가 나와 있습니다.

조건 설명 조건 구문 예
이 규칙에는 정규 표현식을 사용하여 '@fabrikam.com'으로 끝나는 메일 클레임을 확인하는 조건이 있습니다. 일치하는 클레임이 입력 클레임에 있으면 규칙이 일치하는 클레임을 출력 클레임 집합에 복사합니다. c: [type == "http://test/email", value =~ "^. +@fabrikam.com$" ] => issue (claim = c );

발급 문

사용자 지정 규칙은 클레임 규칙에 프로그래밍한 발급 문(발급 또는 추가)를 기반으로 처리합니다. 원하는 결과에 따라 입력 클레임 집합 또는 출력 클레임 집합을 채우는 규칙에 issue 문 또는 add 문을 작성할 수 있습니다. add 문을 사용하는 사용자 지정 규칙은 입력 클레임 집합에만 명시적으로 클레임 값을 채우지만 issue 문을 사용하는 사용자 지정 클레임 규칙은 입력 클레임 집합과 출력 클레임 집합 둘 다에 클레임 값을 채웁니다. 이는 클레임 값을 클레임 규칙 집합의 향후 규칙에서만 사용하려고 할 경우에 유용합니다.

예를 들어 다음 일러스트레이션에서 들어오는 클레임이 클레임 발급 엔진에 의해 입력 클레임 집합에 추가되었습니다. 첫 번째 사용자 지정 클레임 규칙을 실행하고 도메인 사용자의 기준을 충족하면 클레임 발급 엔진이 추가 문을 사용하여 규칙의 논리를 처리하고 편집기의 값을 입력 클레임 집합에 추가합니다. 값 편집기의 입력된 클레임 집합에 나타나는 이기 때문에 규칙 2 성공적으로 논리에 문제가 문을 처리 하 고 생성할 수의 새 값을 Hello, 클레임 집합 모두 출력에 추가 되 고 입력된 클레임이 규칙에서 다음 규칙에 의해 사용 하도록 설정 하려면 설정 합니다. 이제 규칙 3은 입력 클레임에 있는 모든 값을 해당 논리를 처리하기 위한 입력으로 사용할 수 있습니다.

AD FS 역할

클레임 발급 동작

규칙 본문이 클레임 발급 동작을 나타냅니다. 언어가 인식하는 두 가지 클레임 발급 동작이 있습니다.

  • 문을 실행: 문제 문은 클레임 집합을 모두 입력 및 출력으로 이동 하는 클레임을 만듭니다. 예를 들어 다음 문은 해당 입력 클레임 집합을 기반한 새 클레임을 발급합니다.

    c:[type == "Name"] => issue(type = "Greeting", value = "Hello " + c.value);

  • 문을 추가 합니다. 추가 문은 입력된 클레임 집합 컬렉션에만 추가 된 새 클레임을 만듭니다. 예를 들어 다음 문은 입력 클레임 집합에 새 클레임을 추가합니다.

    c:[type == "Name", value == "domain user"] => add(type = "Role", value = "Editor");

규칙의 발급 문이 조건이 일치하는 경우 규칙에 의해 발급될 클레임을 정의합니다. 인수 및 문 동작에 대한 두 가지 형태의 발급 문이 있습니다.

  • 보통-일반 발급 문을 규칙에 리터럴 값 또는 조건과 일치 하는 클레임의 값을 사용 하 여 클레임을 발급할 수 있습니다. 보통 발급 문은 다음 형식 중 하나 또는 둘 다로 구성될 수 있습니다.

    • 복사를 클레임: 클레임 복사본 출력 클레임 집합에 있는 기존 클레임의 복사본을 만듭니다. 이 발급 양식은 “issue” 발급 문과 결합된 경우에만 적합합니다. “add” 발급 문과 결합된 경우에는 적용이 되지 않습니다.

    • 새 클레임: 이 양식은 다양한 클레임 속성에 대한 값을 지정하여 새 클레임을 만듭니다. Claim.Type은 지정되어야 합니다. 다른 모든 클레임 속성은 선택 사항입니다. 이 양식에 대한 인수 순서는 무시됩니다.

  • 특성 저장소-이 양식을 특성 저장소에서 검색 된 값이 있는 클레임을 만듭니다. 단일 발급 문을 사용하여 여러 클레임 유형을 생성할 수 있으며, 이는 특성 검색 중에 네트워크 또는 디스크 입/출력(I/O) 작업을 수행하는 특성 저장소에서 중요합니다. 따라서 정책 엔진과 특성 저장소 간 왕복 수를 제한하는 것이 바람직합니다. 지정된 클레임 유형에 대해 여러 클레임을 만드는 것은 합법입니다. 특성 저장소가 지정된 클레임 유형에 대해 여러 값을 반환하는 경우 발급 문이 반환된 각 클레임 값에 대한 클레임을 자동으로 만듭니다. 특성 저장소 구현이 매개 변수 인수를 사용하여 매개 변수 인수에 제공되는 값으로 쿼리 인수에 있는 자리 표시자를 대체합니다. 자리 표시자는 .NET String.Format ( ) 함수와 동일한 구문(예: {1}, {2} 등)을 사용합니다. 이 발급 양식에 대한 인수 순서는 중요하며 다음 문법에 규정된 순서로 지정되어야 합니다.

다음 표에서는 클레임 규칙의 두 가지 발급 문 형식에 대한 일부 일반적인 구문 생성에 대해 설명합니다.

발급 문 형식 발급 문 설명 발급 문 구문 예
Normal 다음 규칙은 사용자가 지정된 클레임 유형과 값을 가질 때마다 항상 동일한 클레임을 내보냅니다. c: [type == "http://test/employee", value == "true"] => issue (type = "http://test/role", value = "employee");
Normal 다음 규칙은 한 클레임 유형을 다른 유형으로 변환합니다. 조건 "c"와 일치하는 클레임 값이 발급 문에 사용되었습니다. c: [type == "http://test/group" ] => issue (type = "http://test/role", value = c.Value );
특성 저장소 다음 규칙은 Active Directory 특성 저장소를 쿼리하는 데 들어오는 클레임 값을 사용합니다. c: [Type == "http://test/name" ] => issue (store = "Enterprise AD Attribute Store", types = ("http://test/email" ), query = ";mail;{0}", param = c.Value )
특성 저장소 다음 규칙은 들어오는 클레임 값을 사용하여 이전에 구성된 SQL(구조적 쿼리 언어) 특성 저장소를 쿼리합니다. c: [type == "http://test/name"] => issue (store = "Custom SQL store", types = ("http://test/email","http://test/displayname" ), query = "SELECT mail, displayname FROM users WHERE name ={0}", param = c.value );

식은 클레임 선택기 제약 조건과 발급 문 매개 변수 둘 다에 대해 오른쪽에 사용됩니다. 언어가 지원하는 다양한 종류의 식이 있습니다. 언어의 모든 식은 문자열 기반이며 이는 문자열을 입력으로 사용하고 문자열을 생성함을 의미합니다. 식에서 날짜/시간 등 숫자 또는 다른 데이터 형식은 지원되지 않습니다. 다음은 언어가 지원하는 식의 형식입니다.

  • 문자열 리터럴: 문자열 값, 양쪽 따옴표(") 문자로 구분

  • 식의 문자열 연결: 결과는 왼쪽과 오른쪽 값의 연결로 생성된 문자열입니다.

  • 함수 호출: 함수는 식별자로 구분하며 매개변수는 괄호('( )')로 둘러싸인 쉼표로 구분된 표현식 목록으로 구분

  • 변수 이름 DOT 속성 이름 형식으로 클레임의 속성 액세스: 주어진 변수 평가에 대한 식별된 클레임의 속성 값 결과 변수는 이러한 방법으로 사용되기 전에 먼저 클레임 선택기에 바인딩되어야 합니다. 동일한 클레임 선택기에 대해 제약 조건 내의 클레임 선택기에 바인딩된 변수를 사용할 수 없습니다.

다음 클레임 속성을 액세스에 사용할 수 있습니다.

  • Claim.Type

  • Claim.Value

  • Claim.Issuer

  • Claim.OriginalIssuer

  • Claim.ValueType

  • Claim.Properties[property_name] (이 속성은 클레임의 속성 컬렉션에서 property _name을 찾을 수 없는 경우 빈 문자열을 반환합니다.)

RegexReplace 함수를 사용하여 식 내에서 호출할 수 있습니다. 이 함수는 입력 식을 사용하고 지정된 패턴과 일치시킵니다. 패턴이 일치하는 경우 일치 항목 출력이 대체 값으로 대체됩니다.

Exists 함수

Exists 함수는 해당 조건과 일치하는 클레임이 입력 클레임 집합에 있는지 평가하는 조건에서 사용할 수 있습니다. 일치하는 클레임이 있으면 발급 문이 한 번만 호출됩니다. 다음 예에서는 “MSFT”에 대한 발급자 집합이 있는 입력 클레임 집합 컬렉션에 하나 이상의 클레임이 있는 경우 클레임에 있는 “MSFT”에 대한 발급자 집합 수에 상관 없이 “origin” 클레임이 정확히 한 번만 발급됩니다. 이 함수를 사용하여 중복된 클레임 발급을 방지합니다.

exists([issuer == "MSFT"])
   => issue(type = "origin", value = "Microsoft");

규칙 본문

규칙 본문에는 단일 발급 문만 포함될 수 있습니다. Exists 함수를 사용하지 않고 조건이 사용되는 경우 규칙 본문은 조건 부분이 일치될 때마다 한 번씩 실행됩니다.

추가 참조

사용자 지정 규칙을 사용하여 클레임을 보내는 규칙 만들기