ASP.NET 은 Forms 인증 기반 웹 서비스 응용 인 스 턴 스 를 실현 합 니 다.

본 고 는 ASP.NET 이 Forms 인증 을 바탕 으로 하 는 WebService 응용 방법 을 실례 적 으로 서술 하 였 다.모두 에 게 참고 하도록 공유 하 다.구체 적 인 실현 방법 은 다음 과 같다.
보안 요구 가 높 지 않 은 ASP.Net 프로그램 에 서 는 Forms 기반 인증 이 자주 사용 되 는 방식 이 고,WebService 에 대한 인증 이 필요 하 다 면 Soap 레이 블 기반 의 사용자 정의 인증 방식 이 가장 많이 사 용 될 수 있 습 니 다.만약 에 이들 을 비교 해 보면 Forms 를 바탕 으로 하 는 검증 방식 이 더욱 편리 하고 사용 하기 쉬 운 것 이 분명 합 니 다.Forms 검증 방식 을 WebService 에 응용 할 수 있 습 니까?
이론 적 으로 볼 때 Forms 를 바탕 으로 하 는 방식 으로 WebService 에 대해 인증 을 하 는 것 은 가능 하지만 사용 과정 에서 다음 과 같은 두 가지 문제 가 존재 할 수 있다.
1.Forms 기반 인증 방식 은 Cookie 기반 인증 방식 이기 도 합 니 다.브 라 우 저 를 사용 할 때 이 문 제 는 저희 가 고려 할 필요 가 없습니다.그러나 웹 서 비 스 를 사용 하 는 애플 리 케 이 션 의 경우 기본적으로 쿠키 를 저장 할 수 없 으 므 로 이 작업 을 스스로 해 야 합 니 다.
2.WebService 는 A2A(Application To Application)응용 프로그램 인 만큼 웹 폼 을 사용 하여 인증 하 는 것 은 적절 하지 않 고 인간 과 컴퓨터 의 상호작용 을 초래 하여 WebService 의 응용 을 크게 할인 할 수 밖 에 없다.
다음 에 우 리 는 이 두 문 제 를 단계별 로 해결 할 것 이다.
1.쿠키 의 저장 문제
WebService 의 클 라 이언 트 에이전트 클래스 는 CookieContainer 가 Cookie 집합 을 설정 하거나 가 져 올 수 있 는 속성 이 있 습 니 다.Cookie 를 저장 하 는 작업 은 그 에 게 맡 깁 니 다.
System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
MyService.WebService service = new App.MyService.WebService();
service.CookieContainer = cookieContainer;
2.저 희 는 웹 폼 을 사용 하여 인증 하고 싶 지 않 습 니 다.다행히도 ASP.Net 폼 인증 의 폼 페이지(즉,Web.config 파일 의 forms 요소 에 있 는 loginUrl)역시 웹 서비스 파일 로 지정 할 수 있 습 니 다.
저 희 는 인증 을 위 한 웹 서 비 스 를 만 들 었 습 니 다.잠시 Login.asmx 라 고 명명 한 다음 에 loginUrl 을'Login.asmx'와 같 게 해 야 합 니 다.물론 웹.config 파일 의 authorization 절 에서 익명 접근 을 금지 해 야 합 니 다.(그렇지 않 으 면 저 희 는 헛수고 를 할 수 있 습 니 다)배 치 된 웹.config 파일 은 다음 과 같 습 니 다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.web>
 <compilation debug="false" />
 <authentication mode="Forms">
 <forms name="MyService" loginUrl="Login.asmx"></forms>
 </authentication>
 <authorization >
 <deny users="?"/>
 </authorization>
 </system.web>
</configuration>
사실 저 희 는 인증 을 통과 하지 않 았 을 때 브 라 우 저 를 Login.asmx 로 전환 시 키 고 싶 지 않 습 니 다.WebService 를 사용 하 는 클 라 이언 트 프로그램 에 있어 서 진정한 혜택 은 Login.asmx 에 익명 으로 접근 할 수 있 는 방법 입 니 다.(물론 저 희 는 Login.asmx 를 단독 디 렉 터 리 에 두 고 이 디 렉 터 리 에 대한 익명 접근 을 허용 할 수 있 습 니 다.그래도 loginUrl 로 하 는 게 더 우아 할 것 같 아 요.
다음은 Login.asmx 에 인증 에 사용 할 WebMethod 를 추가 합 니 다.

[WebMethod]
public bool Check(string userName,string password)
{
 if(userName == "aaaaaa" && password == "123456")
 //      
 {
 System.Web.Security.FormsAuthentication.SetAuthCookie(userName, false);
 return true;
 }
 else
 {
 return false;
 }
}
마지막 작업 은 클 라 이언 트 프로그램의 WebService 인 스 턴 스 와 Login 인 스 턴 스 를 공유 하 는 CookieContainer 입 니 다.

class Sample
{
 System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
 public void Login()
 {
 MyServiceLogin.Login login = new App.MyServiceLogin.Login();
 login.CookieContainer = cookieContainer;
 login.Check("aaaaaa", "123456");   
 }
 public void ShowHelloWorld()
 {
 MyService.WebService service = new App.MyService.WebService();
 service.CookieContainer = cookieContainer;
 Console.WriteLine(service.HelloWorld());
 }
}
Login()은 나중에 Hello World()를 보 여 드 리 겠 습 니 다.저희 가 잘 아 는'Hello World'를 보 셨 나 요?Ok,이렇게 간단 해!
본 고 에서 말 한 것 이 여러분 의 C\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기