페더레이션된 인증 장치 등록
이 섹션에서는 페더레이션 인증 정책을 사용하는 모바일 디바이스 등록 프로토콜의 예를 제공합니다. 인증 정책이 페더레이션됨으로 설정되면 웹 인증 브로커는 등록 클라이언트에서 보안 토큰을 가져오는 데 사용됩니다. 등록 클라이언트는 응답 메시지 내에서 웹 인증 브로커 API를 호출하여 프로세스를 시작합니다. 서버는 디바이스 화면에 맞게 웹 인증 브로커 페이지를 빌드해야 하며 기존 등록 UI와 일치해야 합니다. 브로커에서 엔드 페이지로 반환되는 불투명 보안 토큰은 클라이언트 인증서 요청 호출 중에 등록 클라이언트에서 디바이스 보안 비밀로 사용됩니다.
<AuthenticationServiceURL>
검색 응답 메시지가 웹 인증 브로커 페이지 시작 URL을 지정하는 요소입니다.
Windows용 Microsoft 모바일 디바이스 등록 프로토콜에 대한 자세한 내용은 [MS-MDE2]: 모바일 디바이스 등록 프로토콜 버전 2를 참조하세요.
참고
Windows에서 지원되지 않는 등록 시나리오 목록은 지원되지 않는 등록 시나리오를 참조하세요.
검색 서비스
검색 웹 서비스는 사용자가 관리 서비스에 휴대폰을 등록하는 데 필요한 구성 정보를 제공합니다. 이 서비스는 HTTPS(서버 인증에만 해당)를 통한 휴식 웹 서비스입니다.
참고
검색 서비스의 관리자는 주소 enterpriseenrollment.<domain_name>.com
가 인 호스트를 만들어야 합니다.
디바이스의 자동 검색 흐름은 로그인하는 동안 작업 공간 설정 화면에 제출된 전자 메일 주소의 도메인 이름을 사용합니다. 자동 검색 시스템은 이메일 주소의 도메인에 하위 도메인 enterpriseenrollment 를 추가하고 경로를 /EnrollmentServer/Discovery.svc
추가하여 이 호스트 이름을 사용하는 URI를 생성합니다. 예를 들어 이메일 주소가 sample@contoso.com
인 경우 첫 번째 Get 요청에 대한 결과 URI는 입니다 http://enterpriseenrollment.contoso.com/EnrollmentServer/Discovery.svc
.
첫 번째 요청은 표준 HTTP GET 요청입니다.
다음 예제에서는 HTTP GET을 통해 이메일 주소로 지정된 user@contoso.com
검색 서버에 대한 요청을 보여줍니다.
Request Full Url: http://EnterpriseEnrollment.contoso.com/EnrollmentServer/Discovery.svc
Content Type: unknown
Header Byte Count: 153
Body Byte Count: 0
GET /EnrollmentServer/Discovery.svc HTTP/1.1
User-Agent: Windows Phone 8 Enrollment Client
Host: EnterpriseEnrollment.contoso.com
Pragma: no-cache
Request Full Url: http://EnterpriseEnrollment.contoso.com/EnrollmentServer/Discovery.svc
Content Type: text/html
Header Byte Count: 248
Body Byte Count: 0
HTTP/1.1 200 OK
Connection: Keep-Alive
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 0
디바이스가 서버에서 응답을 가져오면 디바이스는 POST 요청을 로 enterpriseenrollment.<domain_name>/EnrollmentServer/Discovery.svc
보냅니다. 서버에서 다른 응답을 받은 후(등록 서버가 어디에 있는지 디바이스에 알려야 합니다) 디바이스에서 보낸 다음 메시지는 등록 서버입니다 enterpriseenrollment.<domain_name>
.
다음 논리가 적용됩니다.
- 디바이스는 먼저 HTTPS를 시도합니다. 디바이스가 서버 인증서를 신뢰하지 않으면 HTTPS 시도가 실패합니다.
- 실패하면 디바이스는 HTTP를 시도하여 리디렉션되었는지 확인합니다.
- 디바이스가 리디렉션되지 않으면 사용자에게 서버 주소를 묻는 메시지가 표시됩니다.
- 디바이스가 리디렉션되면 리디렉션을 허용하라는 메시지가 사용자에게 표시됩니다.
다음 예제에서는 HTTP POST 명령을 통해 이메일 주소로 지정된 user@contoso.com
검색 웹 서비스에 대한 요청을 보여줍니다.
https://EnterpriseEnrollment.Contoso.com/EnrollmentServer/Discovery.svc
다음 예제에서는 검색 서비스 요청을 보여줍니다.
<?xml version="1.0"?>
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/Discover
</a:Action>
<a:MessageID>urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">
https://ENROLLTEST.CONTOSO.COM/EnrollmentServer/Discovery.svc
</a:To>
</s:Header>
<s:Body>
<Discover xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment/">
<request xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<EmailAddress>user@contoso.com</EmailAddress>
<OSEdition>3</OSEdition>
<!-- New -->
<RequestVersion>3.0</RequestVersion>
<!-- Updated -->
<DeviceType>WindowsPhone</DeviceType>
<!-- Updated -->
<ApplicationVersion>10.0.0.0</ApplicationVersion>
<AuthPolicies>
<AuthPolicy>OnPremise</AuthPolicy>
<AuthPolicy>Federated</AuthPolicy>
</AuthPolicies>
</request>
</Discover>
</s:Body>
</s:Envelope>
검색 응답은 XML 형식이며 다음 필드를 포함합니다.
- 등록 서비스 URL(EnrollmentServiceUrl) - 관리 서비스에서 노출하는 등록 엔드포인트의 URL을 지정합니다. 디바이스는 사용자가 인증된 후 이 URL을 호출해야 합니다. 이 필드는 필수입니다.
- 인증 정책(AuthPolicy) - 필요한 인증 유형을 나타냅니다. MDM 서버의 경우 OnPremise는 지원되는 값입니다. 즉, 관리 서비스 URL을 호출할 때 사용자가 인증됩니다. 이 필드는 필수입니다.
- Windows에서 페더레이션은 지원되는 또 다른 값으로 추가됩니다. 이 추가를 통해 서버는 웹 인증 브로커를 사용하여 사용자 지정 사용자 인증 및 사용 약관 동의를 수행할 수 있습니다.
참고
HTTP 서버 응답은 Transfer-Encoding 청크로 설정해서는 안됩니다. 하나의 메시지로 보내야 합니다.
인증 정책을 페더레이션으로 설정하면 등록 클라이언트에서 WAB(웹 인증 브로커)를 사용하여 보안 토큰을 가져옵니다. WAB 시작 페이지 URL은 응답 메시지의 검색 서비스에서 제공합니다. 등록 클라이언트는 응답 메시지 내에서 WAB API를 호출하여 WAB 프로세스를 시작합니다. WAB 페이지는 서버 호스팅 웹 페이지입니다. 서버는 디바이스 화면에 잘 맞고 MDM 등록 UI의 다른 빌드와 최대한 일치하도록 해당 페이지를 빌드해야 합니다. WAB에서 끝 페이지로 반환되는 불투명 보안 토큰은 클라이언트 인증서 등록 요청 호출 중에 등록 클라이언트에서 디바이스 보안 비밀로 사용됩니다.
참고
인증 중에 전달되는 사용자 에이전트 문자열을 사용하여 OS 버전과 같은 정보를 가져오는 대신 다음 지침을 사용합니다.
- 검색 요청 중에 전송된 데이터에서 OS 버전을 구문 분석합니다.
- AUTHENTICATIONServiceURL에서 OS 버전을 매개 변수로 추가합니다.
- OS가 인증에 대한 응답을 보낼 때 AuthenticiationServiceURL에서 OS 버전을 구문 분석합니다.
서버가 WAB 페이지 시작 URL을 지정할 수 있도록 DiscoveryResponse XML에 새 XML 태그 AuthenticationServiceUrl이 도입되었습니다. 페더레이션 인증의 경우 이 XML 태그가 있어야 합니다.
참고
등록 클라이언트는 보안 토큰을 인증하고 반환하기 위한 프로토콜 흐름과 관련하여 독립적입니다. 서버에서 사용자 자격 증명을 직접 요청하거나 다른 서버 및 디렉터리 서비스와 페더레이션 프로토콜을 입력할 수 있지만 등록 클라이언트는 이 모든 것에 구애받지 않습니다. 불가지론을 유지하기 위해 등록 클라이언트를 포함하는 인증과 관련된 모든 프로토콜 흐름은 수동, 즉 브라우저 구현입니다.
다음은 서버에 대한 명시적 요구 사항입니다.
-
<DiscoveryResponse>``<AuthenticationServiceUrl>
요소는 HTTPS를 지원해야 합니다. - 인증 서버는 디바이스 신뢰할 수 있는 루트 인증서를 사용해야 합니다. 그렇지 않으면 WAP 호출이 실패합니다.
- WP는 WAB 인증 중에 ADFS에 대한 WIA(Windows 통합 인증)를 지원하지 않습니다. 사용되는 경우 Windows 디바이스에 대한 WIA를 시도하지 않도록 구성해야 하는 경우 ADFS 2012 R2입니다.
등록 클라이언트는 다음과 같이 HTTPS 요청을 발급합니다.
AuthenticationServiceUrl?appru=<appid>&login_hint=<User Principal Name>
-
<appid>
형식의 입니다.ms-app://string
-
<User Principal Name>
는 등록하는 사용자의 이름입니다(예 user@constoso.com : 등록 로그인 페이지에서 사용자의 입력). 이 특성의 값은 인증 서버에서 인증의 일부로 사용되는 힌트 역할을 합니다.
인증이 완료되면 인증 서버는 쿼리 문자열 매개 변수에서 식별된 appid의 POST 메서드 동작이 있는 HTML 양식 문서를 반환해야 합니다.
참고
엄격한 콘텐츠 보안 정책과 호환되는 애플리케이션을 만들려면 일반적으로 HTML 템플릿 및 클라이언트 쪽 코드를 일부 변경하고, 정책 헤더를 추가하고, 정책이 배포된 후 모든 것이 제대로 작동하는지 테스트해야 합니다.
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Content-Length: 556
<!DOCTYPE>
<html>
<head>
<title>Working...</title>
<script>
function formSubmit() {
document.forms[0].submit();
}
window.onload=formSubmit;
</script>
</head>
<body>
<!-- appid below in post command must be same as appid in previous client https request. -->
<form method="post" action="ms-app://appid">
<p><input type="hidden" name="wresult" value="token value"/></p>
<input type="submit"/>
</form>
</body>
</html>
서버는 POST 메서드 작업에 표시된 대로 양식 ms-app://string
의 리디렉션 URL(URL 체계는 ms-app)으로 POST를 보내야 합니다. 보안 토큰 값은 EncodingType 특성에 <wsse:BinarySecurityToken>
포함된 base64로 인코딩된 문자열 http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\#base64binary
입니다. Windows는 이진 인코딩을 등록 서버로 다시 보낼 때 HTML로 인코딩된 형식으로 수행합니다. 이 문자열은 등록 클라이언트에 불투명합니다. 클라이언트가 문자열을 해석하지 않습니다.
다음 예제에서는 WAB를 통한 인증이 필요한 검색 웹 서비스에서 받은 응답을 보여 줍니다.
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/DiscoverResponse
</a:Action>
<ActivityId>
d9eb2fdd-e38a-46ee-bd93-aea9dc86a3b8
</ActivityId>
<a:RelatesTo>urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478</a:RelatesTo>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DiscoverResponse xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment">
<DiscoverResult>
<AuthPolicy>Federated</AuthPolicy>
<EnrollmentVersion>3.0</EnrollmentVersion>
<EnrollmentPolicyServiceUrl>
https://enrolltest.contoso.com/ENROLLMENTSERVER/DEVICEENROLLMENTWEBSERVICE.SVC
</EnrollmentPolicyServiceUrl>
<EnrollmentServiceUrl>
https://enrolltest.contoso.com/ENROLLMENTSERVER/DEVICEENROLLMENTWEBSERVICE.SVC
</EnrollmentServiceUrl>
<AuthenticationServiceUrl>
https://portal.manage.contoso.com/LoginRedirect.aspx
</AuthenticationServiceUrl>
</DiscoverResult>
</DiscoverResponse>
</s:Body>
</s:Envelope>
등록 정책 웹 서비스
정책 서비스는 선택 사항입니다. 기본적으로 정책이 지정되지 않은 경우 최소 키 길이는 2k이고 해시 알고리즘은 SHA-1입니다.
이 웹 서비스는 서로 다른 시간에 엔터프라이즈의 다양한 보안 요구 사항(암호화 민첩성)에 맞게 인증서 등록을 사용자 지정할 수 있는 X.509 MS-XCEP(인증서 등록 정책 프로토콜) 사양을 구현합니다. 서비스는 클라이언트에서 GetPolicies 메시지를 처리하고, 클라이언트를 인증하고, GetPoliciesResponse 메시지에서 일치하는 등록 정책을 반환합니다.
페더레이션 인증 정책의 경우 보안 토큰 자격 증명은 [WSS] 요소를 사용하여 <wsse:BinarySecurityToken>
요청 메시지에 제공됩니다. 보안 토큰은 검색 응답 섹션에 설명된 대로 검색됩니다. 인증 정보는 다음과 같습니다.
- wsse:Security: 등록 클라이언트는 [WSS] 섹션 5에 정의된 요소를 구현
<wsse:Security>
합니다. 요소는<wsse:Security>
요소의<s:Header>
자식이어야 합니다. - wsse:BinarySecurityToken: 등록 클라이언트는 [WSS] 섹션 6.3에 정의된 요소를 구현
<wsse:BinarySecurityToken>
합니다. 요소는<wsse:BinarySecurityToken>
SOAP 헤더에 있는 요소의<wsse:Security>
자식으로 포함되어야 합니다.
검색 응답 섹션에서 설명한 대로 요소 포함 <wsse:BinarySecurityToken>
은 등록 클라이언트에 불투명하며 클라이언트는 문자열을 해석하지 않으며 요소 포함은 보안 토큰 인증 서버(및 엔터프라이즈 서버의 <DiscoveryResponse>
요소에서 식별됨)에 <AuthenticationServiceUrl>
의해 합의됩니다.
<wsse:BinarySecurityToken>
요소에는 base64로 인코딩된 문자열이 포함됩니다. 등록 클라이언트는 인증 서버에서 받은 보안 토큰을 사용하고 base64로 토큰을 인코딩하여 요소를 채웁니다 <wsse:BinarySecurityToken>
.
wsse:BinarySecurityToken/attributes/ValueType: ValueType 특성은
<wsse:BinarySecurityToken>
이어야http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentUserToken
합니다.wsse:BinarySecurityToken/attributes/EncodingType: EncodingType 특성은
<wsse:BinarySecurityToken>
이어야http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\#base64binary
합니다.
다음 예제는 수신된 보안 토큰을 클라이언트 자격 증명으로 사용하는 등록 정책 요청입니다.
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:ac="http://schemas.xmlsoap.org/ws/2006/12/authorization">
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/pki/2009/01/enrollmentpolicy/IPolicy/GetPolicies
</a:Action>
<a:MessageID>urn:uuid:72048B64-0F19-448F-8C2E-B4C661860AA0</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">
https://enrolltest.contoso.com/ENROLLMENTSERVER/DEVICEENROLLMENTWEBSERVICE.SVC
</a:To>
<wsse:Security s:mustUnderstand="1">
<wsse:BinarySecurityToken ValueType="http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentUserToken" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#base64binary"
xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
B64EncodedSampleBinarySecurityToken
</wsse:BinarySecurityToken>
</wsse:Security>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GetPolicies xmlns="http://schemas.microsoft.com/windows/pki/2009/01/enrollmentpolicy">
<client>
<lastUpdate xsi:nil="true"/>
<preferredLanguage xsi:nil="true"/>
</client>
<requestFilter xsi:nil="true"/>
</GetPolicies>
</s:Body>
</s:Envelope>
사용자가 인증되면 웹 서비스는 사용자가 등록해야 하는 인증서 템플릿을 검색하고 인증서 템플릿 속성을 기반으로 등록 정책을 만듭니다. 응답 샘플은 MSDN에서 찾을 수 있습니다.
MS-XCEP는 다양한 복합 형식 및 특성을 사용하여 유연한 등록 정책을 지원합니다. Windows 디바이스의 경우 먼저 minimalKeyLength, hashAlgorithmOIDReference 정책 및 CryptoProviders를 지원합니다. hashAlgorithmOIDReference에는 GetPolicesResponse의 관련 OID 및 OIDReferenceID 및 policySchema가 있습니다. policySchema는 인증서 템플릿 버전을 참조합니다. MS-XCEP 버전 3은 해시 알고리즘을 지원합니다.
참고
HTTP 서버 응답은 Transfer-Encoding 청크로 설정해서는 안됩니다. 하나의 메시지로 보내야 합니다.
다음 코드 조각은 정책 웹 서비스 응답을 보여줍니다.
<s:Envelope
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/pki/2009/01/enrollmentpolicy/IPolicy/GetPoliciesResponse
</a:Action>
<a:RelatesTo>urn:uuid: 69960163-adad-4a72-82d2-bb0e5cff5598</a:RelatesTo>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GetPoliciesResponse
xmlns="http://schemas.microsoft.com/windows/pki/2009/01/enrollmentpolicy">
<response>
<policyID />
<policyFriendlyName xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<nextUpdateHours xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<policiesNotChanged xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<policies>
<policy>
<policyOIDReference>0</policyOIDReference>
<cAs xsi:nil="true" />
<attributes>
<commonName>CEPUnitTest</commonName>
<policySchema>3</policySchema>
<certificateValidity>
<validityPeriodSeconds>1209600</validityPeriodSeconds>
<renewalPeriodSeconds>172800</renewalPeriodSeconds>
</certificateValidity>
<permission>
<enroll>true</enroll>
<autoEnroll>false</autoEnroll>
</permission>
<privateKeyAttributes>
<minimalKeyLength>2048</minimalKeyLength>
<keySpec xsi:nil="true" />
<keyUsageProperty xsi:nil="true" />
<permissions xsi:nil="true" />
<algorithmOIDReference xsi:nil="true" />
<cryptoProviders xsi:nil="true" />
</privateKeyAttributes>
<revision>
<majorRevision>101</majorRevision>
<minorRevision>0</minorRevision>
</revision>
<supersededPolicies xsi:nil="true" />
<privateKeyFlags xsi:nil="true" />
<subjectNameFlags xsi:nil="true" />
<enrollmentFlags xsi:nil="true" />
<generalFlags xsi:nil="true" />
<hashAlgorithmOIDReference>0</hashAlgorithmOIDReference>
<rARequirements xsi:nil="true" />
<keyArchivalAttributes xsi:nil="true" />
<extensions xsi:nil="true" />
</attributes>
</policy>
</policies>
</response>
<cAs xsi:nil="true" />
<oIDs>
<oID>
<value>1.3.14.3.2.29</value>
<group>1</group>
<oIDReferenceID>0</oIDReferenceID>
<defaultName>szOID_OIWSEC_sha1RSASign</defaultName>
</oID>
</oIDs>
</GetPoliciesResponse>
</s:Body>
</s:Envelope>
등록 웹 서비스
이 웹 서비스는 MS-WSTEP 프로토콜을 구현합니다. 클라이언트에서 RST(RequestSecurityToken) 메시지를 처리하고, 클라이언트를 인증하고, CA에서 인증서를 요청하고, RSTR(RequestSecurityTokenResponse)에서 클라이언트에 반환합니다. 발급된 인증서 외에도 응답에는 DMClient를 프로비전하는 데 필요한 구성도 포함됩니다.
RST(RequestSecurityToken)에는 사용자 자격 증명 및 인증서 요청이 있어야 합니다. RST SOAP 봉투의 사용자 자격 증명은 GetPolicies와 동일하며 인증 정책이 OnPremise인지 페더레이션인지에 따라 달라질 수 있습니다. RST SOAP 본문의 BinarySecurityToken에는 등록 정책에 따라 클라이언트에서 생성하는 Base64로 인코딩된 PKCS#10 인증서 요청이 포함됩니다. 클라이언트는 MS-WSTEP을 사용하여 인증서를 요청하기 전에 MS-XCEP를 사용하여 등록 정책을 요청할 수 있습니다. CA(인증 기관)(키 길이, 해시 알고리즘 등)에서 PKCS#10 인증서 요청을 수락하면 클라이언트가 성공적으로 등록할 수 있습니다.
RequestSecurityToken은 사용자 지정 TokenType(http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentToken
)을 사용합니다. 등록 토큰이 X.509 v3 인증서를 초과하기 때문입니다. 자세한 내용은 응답 섹션을 참조하세요.
RST는 DeviceType 및 버전과 같은 많은 AdditionalContext 항목을 지정할 수도 있습니다. 예를 들어 이러한 값에 따라 웹 서비스는 디바이스별 및 버전별 DM 구성을 반환할 수 있습니다.
참고
정책 서비스와 등록 서비스는 동일한 서버에 있어야 합니다. 즉, 호스트 이름이 같아야 합니다.
다음 예제에서는 페더레이션 인증에 대한 등록 웹 서비스 요청을 보여줍니다.
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512"
xmlns:ac="http://schemas.xmlsoap.org/ws/2006/12/authorization">
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/pki/2009/01/enrollment/RST/wstep
</a:Action>
<a:MessageID>urn:uuid:0d5a1441-5891-453b-becf-a2e5f6ea3749</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">
https://enrolltest.contoso.com:443/ENROLLMENTSERVER/DEVICEENROLLMENTWEBSERVICE.SVC
</a:To>
<wsse:Security s:mustUnderstand="1">
<wsse:BinarySecurityToken
wsse:ValueType="http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentUserToken"
wsse:EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#base64binary">
B64EncodedSampleBinarySecurityToken
</wsse:BinarySecurityToken>
</wsse:Security>
</s:Header>
<s:Body>
<wst:RequestSecurityToken>
<wst:TokenType>
http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentToken
</wst:TokenType>
<wst:RequestType>
http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue
</wst:RequestType>
<wsse:BinarySecurityToken
ValueType="http://schemas.microsoft.com/windows/pki/2009/01/enrollment#PKCS10"
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#base64binary">
DER format PKCS#10 certificate request in Base64 encoding Insterted Here
</wsse:BinarySecurityToken>
<ac:AdditionalContext xmlns="http://schemas.xmlsoap.org/ws/2006/12/authorization">
<ac:ContextItem Name="OSEdition">
<ac:Value> 4</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="OSVersion">
<ac:Value>10.0.9999.0</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="DeviceName">
<ac:Value>MY_WINDOWS_DEVICE</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="MAC">
<ac:Value>FF:FF:FF:FF:FF:FF</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="MAC">
<ac:Value>CC:CC:CC:CC:CC:CC</ac:Value>
<ac:ContextItem Name="IMEI">
<ac:Value>49015420323756</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="IMEI">
<ac:Value>30215420323756</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="EnrollmentType">
<ac:Value>Full</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="DeviceType">
<ac:Value>CIMClient_Windows</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="ApplicationVersion">
<ac:Value>10.0.9999.0</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="DeviceID">
<ac:Value>7BA748C8-703E-4DF2-A74A-92984117346A</ac:Value>
</ac:ContextItem>
<ac:ContextItem Name="TargetedUserLoggedIn">
<ac:Value>True</ac:Value>
</ac:ContextItem>
</ac:AdditionalContext>
</wst:RequestSecurityToken>
</s:Body>
</s:Envelope>
요청의 유효성을 검사한 후 웹 서비스는 클라이언트에 대해 할당된 인증서 템플릿을 조회하고, 필요한 경우 업데이트하고, PKCS#10 요청을 CA로 보내고, CA에서 응답을 처리하고, OMA 클라이언트 프로비저닝 XML 형식을 생성하고, RequestSecurityTokenResponse(RSTR)로 반환합니다.
참고
HTTP 서버 응답은 Transfer-Encoding 청크로 설정해서는 안됩니다. 하나의 메시지로 보내야 합니다.
RST의 TokenType과 마찬가지로 RSTR은 이진보안토켄(http://schemas.microsoft.com/ConfigurationManager/Enrollment/DeviceEnrollmentProvisionDoc
)에서 사용자 지정 ValueType을 사용합니다. 토큰이 X.509 v3 인증서보다 많기 때문입니다.
프로비저닝 XML에는 다음이 포함됩니다.
- 요청된 인증서(필수)
- DMClient 구성(필수)
클라이언트가 있는 경우 클라이언트 인증서, 엔터프라이즈 루트 인증서 및 중간 CA 인증서를 설치합니다. DM 구성에는 사용할 클라이언트 인증서인 DM 서버의 이름과 주소가 포함되며 DMClient가 서버로 다시 호출할 때 예약됩니다.
등록 프로비저닝 XML에는 MDM 클라이언트 인증서를 연결하는 데 필요한 최대 하나의 루트 인증서와 하나의 중간 CA 인증서가 포함되어야 합니다. OMA DM 세션 중에 더 많은 루트 및 중간 CA 인증서를 프로비전할 수 있습니다.
루트 및 중간 CA 인증서를 프로비전할 때 지원되는 CSP 노드 경로는 루트 인증서 프로비저닝을 위한 CertificateStore/Root/System, 중간 CA 인증서 프로비저닝을 위한 CertificateStore/My/User입니다.
다음은 샘플 RSTR 메시지와 RSTR 내의 OMA 클라이언트 프로비저닝 XML 샘플입니다. XML 프로비저닝에 사용되는 CSP(구성 서비스 공급자)에 대한 자세한 내용은 엔터프라이즈 설정, 정책 및 앱 관리 섹션을 참조하세요.
다음 예제에서는 등록 웹 서비스 응답을 보여줍니다.
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1" >
http://schemas.microsoft.com/windows/pki/2009/01/enrollment/RSTRC/wstep
</a:Action>
<a:RelatesTo>urn:uuid:81a5419a-496b-474f-a627-5cdd33eed8ab</a:RelatesTo>
<o:Security s:mustUnderstand="1" xmlns:o=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2012-08-02T00:32:59.420Z</u:Created>
<u:Expires>2012-08-02T00:37:59.420Z</u:Expires>
</u:Timestamp>
</o:Security>
</s:Header>
<s:Body>
<RequestSecurityTokenResponseCollection
xmlns="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
<RequestSecurityTokenResponse>
<TokenType>
http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentToken
</TokenType>
<DispositionMessage xmlns="http://schemas.microsoft.com/windows/pki/2009/01/enrollment"/>
<RequestedSecurityToken>
<BinarySecurityToken
ValueType="http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentProvisionDoc"
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#base64binary"
xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
B64EncodedSampleBinarySecurityToken
</BinarySecurityToken>
</RequestedSecurityToken>
<RequestID xmlns="http://schemas.microsoft.com/windows/pki/2009/01/enrollment">0</RequestID>
</RequestSecurityTokenResponse>
</RequestSecurityTokenResponseCollection>
</s:Body>
</s:Envelope>
다음 코드에서는 샘플 프로비저닝 XML(이전 패키지에 보안 토큰으로 제공됨)을 보여 주는 코드입니다.
<wap-provisioningdoc version="1.1">
<characteristic type="CertificateStore">
<characteristic type="Root">
<characteristic type="System">
<characteristic type="Encoded Root Cert Hash Inserted Here">
<parm name="EncodedCertificate" value="B64 encoded cert insert here" />
</characteristic>
</characteristic>
</characteristic>
</characteristic>
<characteristic type="CertificateStore">
<characteristic type="My" >
<characteristic type="User">
<characteristic type="Encoded Root Cert Hash Inserted Here">
<parm name="EncodedCertificate" value="B64EncodedCertInsertedHere" />
</characteristic>
<characteristic type="PrivateKeyContainer"/>
<!-- This tag must be present for XML syntax correctness. -->
</characteristic>
<characteristic type="WSTEP">
<characteristic type="Renew">
<!-If the datatype for ROBOSupport, RenewPeriod, and RetryInterval tags exist, they must be set explicitly. -->
<parm name="ROBOSupport" value="true" datatype="boolean"/>
<parm name="RenewPeriod" value="60" datatype="integer"/>
<parm name="RetryInterval" value="4" datatype="integer"/>
</characteristic>
</characteristic>
</characteristic>
</characteristic>
<characteristic type="APPLICATION">
<parm name="APPID" value="w7"/>
<parm name="PROVIDER-ID" value="TestMDMServer"/>
<parm name="NAME" value="Microsoft"/>
<parm name="ADDR" value="https://DM.contoso.com:443/omadm/Windows.ashx"/>
<parm name="CONNRETRYFREQ" value="6" />
<parm name="INITIALBACKOFFTIME" value="30000" />
<parm name="MAXBACKOFFTIME" value="120000" />
<parm name="BACKCOMPATRETRYDISABLED" />
<parm name="DEFAULTENCODING" value="application/vnd.syncml.dm+wbxml" />
<parm name="SSLCLIENTCERTSEARCHCRITERIA" value="Subject=DC%3dcom%2cDC%3dmicrosoft%2cCN%3dUsers%2cCN%3dAdministrator&amp;Stores=My%5CUser"/>
<characteristic type="APPAUTH">
<parm name="AAUTHLEVEL" value="CLIENT"/>
<parm name="AAUTHTYPE" value="DIGEST"/>
<parm name="AAUTHSECRET" value="password1"/>
<parm name="AAUTHDATA" value="B64encodedBinaryNonceInsertedHere"/>
</characteristic>
<characteristic type="APPAUTH">
<parm name="AAUTHLEVEL" value="APPSRV"/>
<parm name="AAUTHTYPE" value="BASIC"/>
<parm name="AAUTHNAME" value="testclient"/>
<parm name="AAUTHSECRET" value="password2"/>
</characteristic>
</characteristic>
<characteristic type="DMClient"> <!-- In Windows 10, an enrollment server should use DMClient CSP XML to configure DM polling schedules. -->
<characteristic type="Provider">
<!-- ProviderID in DMClient CSP must match to PROVIDER-ID in w7 APPLICATION characteristics -->
<characteristic type="TestMDMServer">
<parm name="UPN" value="UserPrincipalName@contoso.com" datatype="string" />
<parm name="EntDeviceName" value="Administrator_Windows" datatype="string" />
<characteristic type="Poll">
<parm name="NumberOfFirstRetries" value="8" datatype="integer" />
<parm name="IntervalForFirstSetOfRetries" value="15" datatype="integer" />
<parm name="NumberOfSecondRetries" value="5" datatype="integer" />
<parm name="IntervalForSecondSetOfRetries" value="3" datatype="integer" />
<parm name="NumberOfRemainingScheduledRetries" value="0" datatype="integer" />
<!-- Windows 10 supports MDM push for real-time communication. The DM client long term polling schedule's retry waiting interval should be more than 24 hours (1440) to reduce the impact to data consumption and battery life. Refer to the DMClient Configuration Service Provider section for information about polling schedule parameters.-->
<parm name="IntervalForRemainingScheduledRetries" value="1560" datatype="integer" />
<parm name="PollOnLogin" value="true" datatype="boolean" />
</characteristic>
</characteristic>
</characteristic>
</characteristic>
<!-- For Windows 10, we removed EnterpriseAppManagement from the enrollment protocol. -->
</wap-provisioningdoc>
참고
<Parm name>
w7 APPLICATION CSP XML의 및<characteristic type=>
요소는 대/소문자를 구분하며 모두 대문자여야 합니다.w7 APPLICATION 특성에서는 CLIENT 및 APPSRV 자격 증명을 XML로 제공해야 합니다.
이러한 설정에 대한 자세한 설명은 이 문서의 엔터프라이즈 설정, 정책 및 앱 관리 섹션에 있습니다.
PrivateKeyContainer 특성은 필수이며 등록에 의한 등록 프로비저닝 XML에 있어야 합니다. 다른 중요한 설정은 DM 공급자의 고유 ID 및 이름과 디바이스가 구성 프로비저닝을 위해 연결할 수 있는 주소를 포함해야 하는 PROVIDER-ID, NAME 및 ADDR 매개 변수 요소입니다. ID 및 NAME은 임의의 값일 수 있지만 고유해야 합니다.
또한 클라이언트 인증에 사용할 인증서를 선택하는 데 사용되는 SSLCLIENTCERTSEARCHCRITERIA도 중요합니다. 검색은 서명된 사용자 인증서의 주체 특성을 기반으로 합니다.
CertificateStore/WSTEP을 사용하면 인증서 갱신이 가능합니다. 서버에서 지원하지 않는 경우 설정하지 마세요.