이 설명서는 보관되지만 유지 되지 않습니다.

SWT(단순 웹 토큰)

업데이트 날짜: 2015년 6월

이 2009 백서는 IETE(Internet Engineering Task Force)를 위한 SWT(단순 웹 토큰)의 제안된 표준으로 작성되었습니다. 도움말 항목이 아니며 완전하지 않지만 SWT 토큰의 형식 및 사용에 대한 흥미로운 정보를 제공합니다.

버전 0.9.5.1, 2009년 11월 4일

SWT(단순 웹 토큰)는 두 당사자 간에 어설션을 전송하는 형식을 제공합니다. 어설션은 HTML 양식으로 인코딩된 다음 결과 문자열이 당사자 간에 공유되는 키를 사용하여 SHA 256 HMAC에 의해 어설션되는 이름/값 쌍 집합입니다.

  • Dick Hardt(dick.hardt@microsoft.com), 편집자

  • Yaron Goland(yarong@microsoft.com)

이 사양은 Open Web Foundation Agreement 버전 0.9(http://groups.google.com/group/open-web-board/web/owf-agreement-for-final-specs---pt-9-draft)에서 사용할 수 있습니다(참고: URL 업데이트 보류 중). 이 사양에 대한 Open Web Foundation Agreement 버전 0.9의 서명된 복사본은 [그룹 규약 저장소 URI 삽입]에서 검토할 수 있으며, 여기에는 위에 나열된 당사자에 추가 당사자가 포함될 수도 있습니다. 이 사양의 사용에는 다른 제3자 권리가 적용될 수도 있습니다. 이 사양은 "있는 그대로" 제공됩니다. 참여자들은 상품성, 비침해, 특정 목적에의 적합성 또는 사양과 관련된 권리를 포함하여 어떠한 보증(명시적, 묵시적 등)도 명시적으로 부인합니다. 사양의 구현 또는 사용에 대한 위험은 사양 구현자 및 사용자가 전적으로 부담합니다. 어떠한 경우에도 일방 당사자는 상대방 당사자에 대해 계약 위반, 불법 행위(과실 포함) 등의 기반 및 손해 발생 가능성에 대한 상대방 당사자의 인지 여부에 상관없이 본 사양 또는 준용 계약과 관련된 모든 종류의 행위로 인한 이익 상실 또는 모든 형태의 간접, 특별, 부수적 또는 결과적 손해에 대해 책임을 지지 않습니다.

SWT(단순 웹 토큰)는 HTTP와 같은 프로토콜의 헤더에 쉽게 포함되도록 형식이 지정되고 컴팩트한 단순 어설션을 전송하는 형식을 정의합니다. 단순 어설션은 이름/값 쌍 집합으로 표현될 수 있습니다. HTML 양식으로 인코딩된 값은 HTTP 헤더의 이해하기 쉽고 안전한 형식입니다.

SWT는 중요한 ID 및 액세스 정보를 전송하기 때문에 변조를 방지할 수 있는 방법이 필요합니다. 이를 위해 SWT - HMACSHA256에 필수 이름/값 쌍만 도입했습니다. 이는 항상 SWT의 마지막 이름/값 쌍이며, 값은 SWT에 있는 다른 이름/값 쌍의 SHA 256 HMAC입니다.

SWT에서 사용되는 다른 이름/값 쌍의 선택은 본 사양의 범위를 벗어납니다. 하지만 다양한 어설션 프레임워크, 특히 Issuer, Audience 및 ExpiresOn에서 활용도가 검증된 여러 조건 및 특성이 있습니다. 이러한 이름/값 쌍의 사용은 필수 사항이 아니지만 상호 운용성을 용이하기 위해 여기에 정의되어 있습니다.

끝으로, 많은 특성이 SWT를 교환하는 당사자들에 의해 만들어지기를 기대합니다. Microsoft에서는 역방향 DNS 이름을 사용하여 이름 충돌에 대한 걱정 없이 새 특성 이름을 쉽게 만들 수 있도록 도와줍니다. 또한 URI를 이름으로 사용할 수도 있도록 지원합니다. 역방향 DNS 이름 또는 URI가 아닌 이름은 SWT 생산자와 소비자 간의 규약에 의해 정의되므로 충돌이 발생할 수 있습니다. 본 사양에 정의된 이름은 예약되어 있습니다.

본 문서의 키워드 "해야 함", "해서는 안 됨", "필수", "권장됨", "할 수 있음", "선택" 등은 [RFC2119](Bradner, B., “Key words for use in RFCs to Indicate Requirement Levels,”)에 설명된 대로 해석됩니다. 도메인 이름 예제에서는 [RFC2606](Eastlake, D. 및 A. Panitz, “Reserved Top Level DNS Names,”)을 사용합니다.

SWT를 생성하는 당사자는 SWT의 생산자이고, SWT를 확인하는 당사자는 SWT의 소비자입니다. SWT를 생성하기 전에 생산자와 소비자는 SWT에 포함할 특성을 합의하고 무작위로 생성된 256비트 키를 대역 외에서 교환했습니다. SWT를 생성하려면 생산자는 다음 단계를 수행합니다.

  1. SWT에서 전송할 이름/값 쌍을 수집하고 HTML 4.01의 17.13.4에 따라 application/x-www-form-urlencoded로 양식 인코딩합니다.

  2. 양식 인코딩된 SWT와 합의된 키를 SHA 256 HMAC 프로세스에 입력합니다.

  3. 결과 HMAC 값을 가져와 RFC 4648의 Section 4에 따라 Base64로 인코딩합니다.

  4. 양식 인코딩 규칙에 따라 이름 "HMACSHA256"과 Base 64로 인코딩된 HMAC 값을 양식 인코딩된 SWT의 끝에 추가합니다.

SWT의 소비자는 다음 단계를 수행하여 SWT가 생산자에 의해 생산되었으며 변조되지 않았는지 확인합니다.

  1. 제출된 SWT를 가져와 문자열을 “&HMACSHA256=” 앞 부분과 URL로 인코딩 HMAC인 나머지 부분으로 분할합니다. 첫 번째 부분은 noHMACSWT입니다.

  2. URL은 SWT 문자열의 나머지 부분을 디코딩합니다. 이는 submittedHMAC입니다.

  3. 합의된 키를 사용하여 noHMACSWT에 대한 HMAC를 생성한 다음 RFC 4648의 Section 4에 따라 Base64를 사용하여 인코딩합니다. 결과 문자열은 localHMAC입니다.

  4. submittedHMAC와 localHMAC의 문자별 비교를 수행합니다. 문자열이 동일하면 SWT의 HMAC가 유효합니다.

SWT 생산자는 다음 정보가 포함된 SWT를 발급할 수 있습니다.

Issuer = issuer.example.com
ExpiresOn = 1/1/2010, Midnight
com.example.group = gold
over18 = true

HMAC 키 값(Base 64로 표현됨)은 다음과 같습니다.

N4QeKa3c062VBjnVK6fb+rnwURkcwGXh7EoNK34n0uM=

이 예제에서 Issuer와 ExpiresOn은 본 사양에서 예약된 이름입니다. com.example.group 특성은 example.com 도메인의 소유자가 만든 그룹의 구문 및 의미 체계 정의에 대해 합의된 것입니다. over18은 SWT 생산자와 소비자 간에 합의된 개인적으로 정의되는 특성입니다.

SWT를 인코딩하려면 먼저 ExpiresOn을 1/1/1970, Midnight UTC에서 만료 시간인 1/1/2010, Midnight까지의 시간(초)으로 바꿔야 합니다. 결과는 1262304000입니다.

  1. 이름/값 쌍을 HTML 양식으로 인코딩합니다. 결과는 다음과 같습니다(읽기 쉽도록 줄 바꿈 삽입).

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true
    
  2. 그런 다음 키를 사용하여 이전 값의 HMAC를 계산합니다.

  3. HMAC를 Base64로 인코딩합니다. 결과는 다음과 같습니다.

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  4. Base64로 인코딩된 결과 HMAC를 URL로 인코딩하여 어설션의 끝에 연결합니다. 결과 SWT는 다음과 같습니다(읽기 쉽도록 줄 바꿈 삽입).

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true&
    HMACSHA256=
    AT55%2B2jLQeuigpg0xm%2Fvn7tjpSGXBUfFe0UXb0%2F9opE%3D
    

  1. 다음을 사용하여 SWT를 분할합니다. &HMACSHA256= 결과 noHMACSWT 문자열은 다음과 같습니다(읽기 쉽도록 줄 바꿈 추가).

    Issuer=issuer.example.com&
    ExpiresOn=1262304000&
    com.example.group=gold&
    over18=true&
    
    또한 결과 submittedHMAC 문자열은 다음과 같습니다.

    AT55%2B2jLQeuigpg0xm%2Fvn7tjpSGXBUfFe0UXb0%2F9opE%3D
    
  2. 그런 다음 submittedHMAC를 URL로 인코딩합니다. 결과는 다음과 같습니다.

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  3. 이제 noHMACSWT 및 HMAC 키를 사용하여 localHMAC를 계산하고 결과를 Base64로 인코딩합니다. 결과 localHMAC 값은 다음과 같습니다.

    AT55+2jLQeuigpg0xm/vn7tjpSGXBUfFe0UXb0/9opE=
    
  4. submittedHMAC와 localHMAC를 비교하여 동일한 문자열인지 확인합니다. 그런 다음 noHMACSWT를 URL로 디코딩하여 SWT 값에 대한 액세스 권한을 얻습니다.

다음 이름/값 쌍은 선택 사항입니다. 이는 유용한 여러 가지 일반적인 시나리오에서 상호 운용성을 용이하게 하기 위해 정의된 것입니다.

 

Name 값 구문 값 의미 체계

Issuer

UTF-8 문자열

SWT를 발급한 당사자를 식별합니다.

ExpiresOn

서명되지 않은 Base 10 정수를 나타내는 ASCII 문자열입니다.

SWT를 추가 처리할 수 없는 경우를 식별합니다.

만료 날짜/시간은 1970-01-01T0:0:0Z부터 만료 시점(UTC로 측정됨)까지의 시간(초)으로 기록됩니다.

사용자

UTF-8 문자열

SWT의 의도된 대상 그룹을 식별합니다. SWT 소비자가 SWT 대상 그룹을 식별하지 않는 대상 그룹 값이 있는 SWT를 받은 경우에는 SWT가 거부됩니다.

SWT 생산자는 역방향 DNS 이름 또는 URI를 사용하여 추가 특성을 정의할 수 있습니다.

SWT의 생산자와 소비자는 예약된 이름 또는 공용 이름이 아닌 특성 이름에 합의할 수 있습니다. 이러한 이름은 위의 "예약된 이름" 섹션에 정의된 예약된 이름 목록에 포함될 수 없습니다. 이러한 전용 이름은 공용 이름과 달리 충돌할 수 있으므로 주의해서 사용해야 합니다.

참고 항목

표시: