SOAP 예제를 사용한 웹 서비스(WS) 보안 튜토리얼
WS 보안이란 무엇입니까?
WS 보안은 데이터가 웹 서비스의 일부로 교환될 때 보안을 다루는 표준입니다. 이는 웹 서비스 생성에 널리 사용되는 SOAP의 핵심 기능입니다.
보안은 모든 웹 애플리케이션에서 중요한 기능입니다. 거의 모든 웹 애플리케이션은 인터넷에 노출되어 있기 때문에 웹 애플리케이션에 대한 보안 위협이 발생할 가능성은 항상 존재합니다. 따라서 웹 기반 애플리케이션을 개발할 때 항상 보안을 염두에 두고 애플리케이션을 설계하고 개발하는 것이 좋습니다.
보안 위협 및 대응책
웹 애플리케이션에 해로울 수 있는 보안 위협을 이해하기 위해 웹 애플리케이션의 간단한 시나리오를 살펴보고 보안 측면에서 어떻게 작동하는지 살펴보겠습니다.
HTTP에 사용할 수 있는 보안 조치 중 하나는 HTTPS 프로토콜입니다. HTTPS는 웹을 통해 클라이언트와 서버 간의 안전한 통신 방법입니다. HTTPS는 보안 통신을 위해 SSL 또는 SSL을 사용합니다. 클라이언트와 서버 간에 통신이 발생할 때 클라이언트와 서버 모두 자신을 정품으로 식별하는 디지털 인증서를 갖게 됩니다.
클라이언트와 서버 간의 표준 HTTPS 통신에서 다음 단계가 수행됩니다.
- 클라이언트는 클라이언트 인증서를 통해 서버에 요청을 보냅니다. 서버가 클라이언트 인증서를 보면 캐시 시스템에 메모를 작성하여 응답이 이 클라이언트로만 돌아가야 한다는 것을 알 수 있습니다.
- 그런 다음 서버는 인증서를 전송하여 클라이언트에 자신을 인증합니다. 이를 통해 클라이언트가 올바른 서버와 통신하고 있는지 확인합니다.
- 이후 클라이언트와 서버 간의 모든 통신은 암호화됩니다. 이렇게 하면 다른 사용자가 보안을 깨고 필요한 데이터를 얻으려고 시도하는 경우 해당 데이터가 암호화되므로 읽을 수 없게 됩니다.
그러나 위의 보안 유형은 모든 상황에서 작동하지 않습니다. 클라이언트가 여러 서버와 통신할 수 있는 때가 올 수 있습니다. 아래에 제공된 예는 클라이언트가 한 번에 데이터베이스와 웹 서버 모두와 통신하는 것을 보여줍니다. 이러한 경우 모든 정보가 https 프로토콜을 통과할 수 있는 것은 아닙니다.
SOAP가 WS 보안 사양을 마련하여 이러한 장애물을 극복하기 위해 행동하는 곳이 바로 여기입니다. 이 사양을 사용하면 모든 보안 관련 데이터가 SOAP 헤더 요소에 정의됩니다.
헤더 요소에는 아래에 언급된 정보가 포함될 수 있습니다.
- SOAP 본문 내의 메시지가 보안 키로 서명된 경우 해당 키는 헤더 요소에 정의될 수 있습니다.
- SOAP 본문 내의 요소가 암호화된 경우 헤더에는 메시지가 대상에 도달했을 때 해독될 수 있도록 필요한 암호화 키가 포함됩니다.
다중 서버 환경에서 위의 SOAP 인증 기술은 다음과 같은 방식으로 도움이 됩니다.
- SOAP 본문은 암호화되어 있으므로 웹 서비스를 호스팅하는 웹 서버에 의해서만 해독될 수 있습니다. 이는 SOAP 프로토콜이 설계된 방식 때문입니다.
- 메시지가 HTTP 요청을 통해 데이터베이스 서버에 전달되는 경우 데이터베이스에 해독을 위한 올바른 메커니즘이 없기 때문에 해독할 수 없다고 가정해 보겠습니다.
- 요청이 실제로 SOAP 프로토콜로 웹 서버에 도달하는 경우에만 메시지를 해독하고 적절한 응답을 클라이언트에 다시 보낼 수 있습니다.
WS 보안 표준이 어떻게 사용될 수 있는지에 대해서는 다음 주제에서 살펴보겠습니다. SOAP.
웹 서비스 보안 표준
이전 섹션에서 설명한 것처럼 WS-Security 표준은 SOAP 헤더에 포함된 보안 정의를 중심으로 진행됩니다.
SOAP 헤더의 자격 증명은 두 가지 방법으로 관리됩니다.
먼저 UsernameToken이라는 특수 요소를 정의합니다. 이는 웹 서비스에 사용자 이름과 비밀번호를 전달하는 데 사용됩니다.
다른 방법은 BinarySecurityToken을 통해 바이너리 토큰을 사용하는 것입니다. 이는 Kerberos나 X.509와 같은 암호화 기술이 사용되는 상황에서 사용됩니다.
아래 다이어그램은 WS Security에서 보안 모델이 작동하는 방식의 흐름을 보여줍니다.
다음은 위의 워크플로에서 수행되는 단계입니다.
- 웹 서비스 클라이언트에서 Security Token Service로 요청을 보낼 수 있습니다. 이 서비스는 실제 SOAP 웹 서비스에 사용자 이름/비밀번호 또는 인증서를 제공하기 위해 특별히 구축된 중간 웹 서비스일 수 있습니다.
- 그런 다음 보안 토큰이 웹 서비스 클라이언트에 전달됩니다.
- 그런 다음 웹 서비스 클라이언트는 웹 서비스를 호출했지만 이번에는 보안 토큰이 SOAP 메시지에 포함되어 있는지 확인했습니다.
- 그런 다음 웹 서비스는 인증 토큰이 포함된 SOAP 메시지를 이해하고 보안 토큰 서비스에 연결하여 보안 토큰이 인증되었는지 확인할 수 있습니다.
아래 스니펫은 WSDL 문서의 일부인 인증 부분의 형식을 보여줍니다. 이제 아래 스니펫을 기반으로 SOAP 메시지에는 2개의 추가 요소가 포함됩니다. 하나는 사용자 이름이고 다른 하나는 비밀번호입니다.
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType></xs:element>
SOAP 메시지가 실제로 클라이언트와 서버 사이에 전달될 때 사용자 자격 증명이 포함된 메시지 부분은 위에 표시된 것과 같을 수 있습니다. wsse 요소 이름은 SOAP용으로 정의된 특수 요소로 보안 기반 정보가 포함되어 있음을 의미합니다.
안전한 웹 서비스를 구축하는 방법
이제 SOAP 웹 서비스 보안 예제를 살펴보겠습니다. SOAP 장 앞부분에서 설명한 예를 바탕으로 웹 서비스 보안을 구축하고 여기에 보안 계층을 추가할 것입니다.
이 예에서는 웹 서비스를 호출하는 애플리케이션에 문자열을 반환하는 데 사용되는 간단한 웹 서비스를 만들겠습니다. 그러나 이번에는 웹 서비스가 호출될 때 호출 서비스에 자격 증명을 제공해야 합니다. 아래 단계에 따라 SOAP 웹 서비스를 생성하고 여기에 보안 정의를 추가해 보겠습니다.
단계 1) 첫 번째 단계는 빈 공간을 만드는 것입니다. Asp.Net 웹 애플리케이션. Visual Studio 2013에서 메뉴 옵션 파일->새 프로젝트를 클릭합니다.
새 프로젝트 옵션을 클릭하면 Visual Studio에서 프로젝트 유형을 선택하고 프로젝트에 필요한 세부 정보를 제공하는 또 다른 대화 상자가 표시됩니다. 이는 다음 단계에서 설명합니다.
단계 2) 이 단계에서,
- 먼저 다음을 선택했는지 확인하세요. C# ASP.NET 웹 애플리케이션용 웹 템플릿입니다. 웹 서비스 프로젝트를 만들려면 프로젝트가 이 유형이어야 합니다. 이 옵션을 선택하면 Visual Studio가 웹 기반 애플리케이션에 필요한 필수 파일을 추가하는 데 필요한 단계를 수행합니다.
- 우리의 경우에는 "로 지정된 프로젝트 이름을 지정하십시오.webservice.asmx.” 그런 다음 프로젝트 파일이 저장될 위치를 지정하십시오.
완료되면 Visual Studio 2013의 솔루션 탐색기에 프로젝트 파일이 생성된 것을 볼 수 있습니다.
단계 3) 이 단계에서,
프로젝트에 웹 서비스 파일을 추가하겠습니다.
- 먼저 아래와 같이 프로젝트 파일을 마우스 오른쪽 버튼으로 클릭하십시오.
- 프로젝트 파일을 마우스 오른쪽 버튼으로 클릭하면 "추가->웹 서비스(ASMX)" 옵션을 선택하여 웹 서비스 파일을 추가할 수 있습니다. 웹 서비스 이름 파일에 Tutorial Service 이름을 제공하기만 하면 됩니다.
위의 단계에서는 대화 상자가 나타나며, 여기서 웹 서비스 파일의 이름을 입력할 수 있습니다. 따라서 아래 대화 상자에서 TutorialService라는 이름을 파일 이름으로 입력합니다.
단계 4) 다음 코드를 Tutorial Service asmx 파일에 추가합니다. 아래 코드 조각은 SOAP 메시지가 생성될 때 SOAP 헤더를 변경하는 데 사용되는 사용자 지정 클래스를 추가하는 데 사용됩니다. 이제 SOAP 헤더에 보안 자격 증명을 추가하려고 하므로 이 단계가 필요합니다.
return "This is a Guru99 Web Service";
}
public class AuthHeader : SoapHeader
{
public string UserName;
public string Password;
}
}
코드 설명:-
- 이제 우리는 별도의 클래스를 생성하고 있습니다. 인증헤더 유형의 것 SoapHeader 클래스. SOAP 헤더에 전달되는 내용을 변경하려면 .Net의 내장 SoapHeader 클래스를 사용하는 클래스를 만들어야 합니다. SOAPheader를 사용자 정의함으로써 이제 웹 서비스가 호출될 때 '사용자 이름'과 '비밀번호'를 전달할 수 있습니다.
- 그런 다음 문자열 유형인 'UserName' 및 'Password' 변수를 정의합니다. 이는 웹 서비스에 전달되는 사용자 이름과 비밀번호 값을 보유하는 데 사용됩니다.
단계 5) 다음 단계로, 다음 코드를 동일한 항목에 추가해야 합니다. TutorialService.asmx 파일. 이 코드는 실제로 웹 서비스의 기능을 정의합니다. 이 함수는 "This is a Guru99 Web service"라는 문자열을 클라이언트에 반환합니다. 그러나 이번에는 클라이언트 애플리케이션이 자격 증명을 웹 서비스에 전달하는 경우에만 문자열이 반환됩니다.
public class TutorialService : System.Web.Services.WebService
{
public AuthHeader Credentials;
[SoapHeader("Credentials")]
[WebMethod]
public string Guru99WebService()
{
if (Credentials.UserName.ToLower() != "Guru99" ||
Credentials.Password.ToLower() != "Guru99Password")
{
throw new SoapException("Unauthorized",
SoapException.ClientFaultCode);
}
eise
return "This is a Guru99 Web service";
}
코드 설명:-
- 여기서는 이전 단계에서 생성된 AuthHeader 클래스의 객체를 생성합니다. 이 개체는 우리에게 전달됩니다. Guru99웹서비스 사용자 이름과 비밀번호를 면밀히 조사할 수 있습니다.
- 이제 [SoapHeader] 특성을 사용하여 웹 서비스를 호출할 때 사용자 이름과 암호를 전달해야 함을 지정합니다.
- 이 코드 블록에서는 웹 서비스가 호출될 때 전달된 사용자 이름과 비밀번호를 실제로 검사하고 있습니다. 사용자 이름이 "Guru99"이고 비밀번호가 "Guru99Password"이면 "이것은 Guru99 웹 서비스입니다"라는 메시지가 클라이언트에 전달됩니다. 그렇지 않으면 잘못된 사용자 ID와 비밀번호가 전달되면 클라이언트에 오류가 전송됩니다.
코드가 성공적으로 실행되면 브라우저에서 코드를 실행할 때 다음과 같은 출력이 표시됩니다.
출력:
위의 출력은 프로그램이 실행될 때 표시되며 이는 이제 웹 서비스를 사용할 수 있음을 의미합니다. 서비스를 클릭해 볼까요? Descript이온링크.
이제 서비스 설명에서 사용자 이름과 비밀번호가 wsdl 파일. 이러한 매개변수는 웹 서비스가 호출될 때 전송되어야 합니다.
웹 서비스 보안 우수사례
웹 서비스를 사용할 때 주의해야 할 보안 고려 사항은 다음과 같습니다.
1. 감사 및 로그 관리 – 애플리케이션 로깅을 사용하여 웹 서비스에 대한 모든 요청을 기록합니다. 이는 웹 서비스를 호출한 사람에 대한 자세한 보고서를 제공하며 보안 침해가 발생할 경우 영향 분석에 도움이 될 수 있습니다.
2. 웹 서비스 호출 흐름 – 웹 서비스의 호출 흐름을 기록해 보세요. 기본적으로 애플리케이션은 이러한 웹 서비스 간에 전달되는 인증 토큰을 사용하여 여러 웹 서비스 요청을 호출할 수 있습니다. 웹 서비스 간의 모든 호출을 모니터링하고 기록해야 합니다.
3. 민감한 정보 – 비밀번호나 신용카드 번호 또는 기타 기밀 정보와 같은 민감한 정보를 로그 항목에 포함하지 마십시오. 이러한 정보가 포함된 이벤트가 있는 경우 로깅하기 전에 삭제해야 합니다.
4. 사업 추적 OperaTIONS – 중요한 비즈니스 운영을 추적합니다. 예를 들어, 특히 민감한 메서드와 비즈니스 로직에 대한 액세스를 기록하도록 애플리케이션을 계측합니다. 온라인 쇼핑 애플리케이션의 예를 들어보겠습니다. 일반적인 애플리케이션에는 구매할 품목 선택, 카트에 로드된 품목, 그리고 최종 구매와 같은 여러 단계가 있습니다. 이 전체 비즈니스 워크플로는 웹 서비스에서 추적해야 합니다.
5. 올바른 인증 – 인증은 클라이언트가 해당 ID를 증명할 수 있는 특정 자격 증명 세트를 사용하여 웹 서비스에서 자신의 ID를 설정할 수 있는 메커니즘입니다. 사용자 자격 증명은 절대 저장해서는 안 되며, 따라서 WS 보안을 사용하여 웹 서비스를 호출하는 경우 웹 서비스는 SOAP 헤더에 전송된 자격 증명을 저장해서는 안 된다는 점에 유의해야 합니다. 이는 웹 서비스에서 삭제되어야 합니다.
제품 개요
- SOAP는 웹 서비스 호출 시 추가 보안을 제공하기 위해 WS 보안이라는 추가 계층을 제공합니다.
- WS 보안은 간단한 사용자 이름이나 비밀번호로 호출할 수 있거나 인증을 위해 바이너리 인증서와 함께 사용할 수 있습니다.
- 우리는 그것을 보았습니다. . NET SOAP 헤더 요소의 일부로 사용자 이름과 비밀번호가 전달되도록 웹 서비스를 사용자 정의할 수 있습니다.













