ASP.NET AJAX 인증 및 프로필 애플리케이션 서비스 이해

작성 자: Scott Cate

인증 서비스를 사용하면 사용자가 인증 쿠키를 받기 위해 자격 증명을 제공할 수 있으며 ASP.NET 제공한 사용자 지정 사용자 프로필을 허용하는 게이트웨이 서비스입니다. ASP.NET AJAX 인증 서비스의 사용은 표준 ASP.NET Forms 인증과 호환되므로 현재 Forms 인증(예: 로그인 컨트롤)을 사용하는 애플리케이션은 AJAX 인증 서비스로 업그레이드하여 손상되지 않습니다.

소개

.NET Framework 3.5의 일환으로 Microsoft는 상당한 규모의 환경 업그레이드를 제공하고 있습니다. 새로운 개발 환경을 사용할 수 있는 것뿐만 아니라 새로운 LINQ(Language-Integrated Query) 기능 및 기타 언어 개선 사항이 곧 제공될 예정입니다. 또한 다른 도구 집합, 특히 ASP.NET AJAX 확장의 몇 가지 친숙한 기능이 .NET Framework 기본 클래스 라이브러리의 일류 멤버로 포함됩니다. 이러한 확장을 사용하면 전체 페이지 새로 고침 없이 페이지 부분 렌더링, 클라이언트 스크립트(ASP.NET 프로파일링 API 포함)를 통해 Web Services에 액세스할 수 있는 기능, ASP.NET 서버 쪽 컨트롤 집합에 표시된 많은 제어 체계를 미러 위해 설계된 광범위한 클라이언트 쪽 API 등 다양한 새로운 풍부한 클라이언트 기능을 사용할 수 있습니다.

이 백서에서는 Microsoft ASP.NET AJAX 확장에 의해 노출되는 ASP.NET 프로파일링 및 Forms 인증 서비스의 구현 및 사용을 살펴봅니다. AJAX 확장은 양식 인증이 웹 서비스 프록시 스크립트를 통해 노출되기 때문에 폼 인증을 매우 쉽게 지원할 수 있도록 합니다. AJAX 확장은 AuthenticationServiceManager 클래스를 통해 사용자 지정 인증도 지원합니다.

이 백서는 Visual Studio 2008의 베타 2 릴리스와 .NET Framework 3.5를 기반으로 합니다. 또한 이 백서에서는 Visual Web Developer Express가 아닌 Visual Studio 2008 베타 2로 작업한다고 가정하고 Visual Studio의 사용자 인터페이스에 따라 연습을 제공합니다. 일부 코드 샘플은 Visual Web Developer Express에서 사용할 수 없는 프로젝트 템플릿을 활용할 수 있습니다.

프로필 및 인증

Microsoft ASP.NET 프로필 및 인증 서비스는 ASP.NET Forms 인증 시스템에서 제공하며 ASP.NET 표준 구성 요소입니다. ASP.NET AJAX 확장은 클라이언트 AJAX 라이브러리의 Sys.Services 네임스페이스 아래에 있는 매우 간단한 모델을 통해 스크립트 프록시를 통해 이러한 서비스에 대한 스크립트 액세스를 제공합니다.

인증 서비스를 사용하면 사용자가 인증 쿠키를 받기 위해 자격 증명을 제공할 수 있으며 ASP.NET 제공한 사용자 지정 사용자 프로필을 허용하는 게이트웨이 서비스입니다. ASP.NET AJAX 인증 서비스의 사용은 표준 ASP.NET Forms 인증과 호환되므로 현재 Forms 인증(예: 로그인 컨트롤)을 사용하는 애플리케이션은 AJAX 인증 서비스로 업그레이드하여 손상되지 않습니다.

프로필 서비스는 인증 서비스에서 제공하는 멤버 자격에 따라 사용자 데이터의 자동 통합 및 스토리지를 허용합니다. 저장된 데이터는 web.config 파일로 지정되며 다양한 프로파일링 서비스 공급자가 데이터 관리를 처리합니다. 인증 서비스와 마찬가지로 AJAX 프로필 서비스는 표준 ASP.NET 프로필 서비스와 호환되므로 현재 ASP.NET Profile 서비스의 기능을 통합하는 페이지는 AJAX 지원을 포함하여 손상되지 않아야 합니다.

ASP.NET 인증 및 프로파일링 서비스 자체를 애플리케이션에 통합하는 것은 이 백서의 scope. 이 항목에 대한 자세한 내용은 MSDN 라이브러리 참조 문서 에서 https://msdn.microsoft.com/library/tw292whz.aspx멤버 자격을 사용하여 사용자 관리를 참조하세요. ASP.NET ASP.NET 멤버 자격에 대한 기본 인증 서비스 공급자인 SQL Server 멤버 자격을 자동으로 설정하는 유틸리티도 포함되어 있습니다. 자세한 내용은 의 등록 도구(Aspnet_regsql.exe)ASP.NET SQL Server 문서를 참조하세요https://msdn.microsoft.com/library/ms229862(vs.80).aspx.

ASP.NET AJAX 인증 서비스 사용

web.config 파일에서 ASP.NET AJAX 인증 서비스를 사용하도록 설정해야 합니다.

<system.web.extensions> 
 <scripting>
 <webServices>
 <authenticationService enabled="true" /> 
 </webServices>
 </scripting> 
</system.web.extensions>

인증 서비스는 ASP.NET Forms 인증을 사용하도록 설정하고 클라이언트 브라우저에서 쿠키를 사용하도록 설정해야 합니다(쿠키 없는 세션에는 URL 매개 변수가 필요하기 때문에 스크립트는 쿠키 없는 세션을 사용하도록 설정할 수 없음).

AJAX 인증 서비스를 사용하도록 설정하고 구성하면 클라이언트 스크립트가 Sys.Services.AuthenticationService 개체를 즉시 활용할 수 있습니다. 주로 클라이언트 스크립트는 메서드 및 isLoggedIn 속성을 활용 login 하려고 합니다. 많은 수의 매개 변수를 허용할 수 있는 로그인 메서드에 대한 기본값을 제공하기 위한 몇 가지 속성이 있습니다.

Sys.Services.AuthenticationService 멤버

login 메서드:

login() 메서드는 사용자의 자격 증명을 인증하는 요청을 시작합니다. 이 메서드는 비동기이며 실행을 차단하지 않습니다.

매개 변수:

매개 변수 이름 의미
userName 필수 사항입니다. 인증할 사용자 이름입니다.
password 선택 사항(기본값은 null)입니다. 사용자 암호입니다.
isPersistent 선택 사항(기본값은 false)입니다. 사용자의 인증 쿠키가 세션 간에 유지되어야 하는지 여부입니다. false이면 브라우저가 닫혀 있거나 세션이 만료되면 사용자가 로그아웃합니다.
redirectUrl 선택 사항(기본값은 null)입니다. 인증에 성공하면 브라우저를 로 리디렉션할 URL입니다. 이 매개 변수가 null이거나 빈 문자열인 경우 리디렉션이 발생하지 않습니다.
customInfo 선택 사항(기본값은 null)입니다. 이 매개 변수는 현재 사용되지 않으며 나중에 사용하도록 예약되어 있습니다.
loginCompletedCallback 선택 사항(기본값은 null)입니다. 로그인이 성공적으로 완료될 때 호출할 함수입니다. 지정한 경우 이 매개 변수는 defaultLoginCompleted 속성을 재정의합니다.
failedCallback 선택 사항(기본값은 null)입니다. 로그인에 실패할 때 호출할 함수입니다. 지정된 경우 이 매개 변수는 defaultFailedCallback 속성을 재정의합니다.
userContext 선택 사항(기본값은 null)입니다. 콜백 함수에 전달되어야 하는 사용자 지정 사용자 컨텍스트 데이터입니다.

반환 값:

이 함수에는 반환 값이 포함되지 않습니다. 그러나 이 함수에 대한 호출이 완료되면 다음과 같은 여러 동작이 포함됩니다.

  • 매개 변수가 둘 다ull이거나 빈 문자열이 아니면 현재 페이지가 새로 고쳐지거나 변경 redirectUrl 됩니다.
  • 그러나 매개 변수가 null이거나 빈 문자열인 loginCompletedCallback 경우 매개 변수 또는 defaultLoginCompletedCallback 속성이 호출됩니다.
  • 웹 서비스에 대한 호출이 실패 failedCallback 하면 속성의 defaultFailedCallback 매개 변수가 호출됩니다.

logout 메서드:

logout() 메서드는 자격 증명 쿠키를 제거하고 웹 애플리케이션에서 현재 사용자를 로그아웃합니다.

매개 변수:

매개 변수 이름 의미
redirectUrl 선택 사항(기본값은 null)입니다. 인증에 성공하면 브라우저를 로 리디렉션할 URL입니다. 이 매개 변수가 null이거나 빈 문자열인 경우 리디렉션이 발생하지 않습니다.
logoutCompletedCallback 선택 사항(기본값은 null)입니다. 로그아웃이 성공적으로 완료될 때 호출할 함수입니다. 지정한 경우 이 매개 변수는 defaultLogoutCompleted 속성을 재정의합니다.
failedCallback 선택 사항(기본값은 null)입니다. 로그인에 실패할 때 호출할 함수입니다. 지정된 경우 이 매개 변수는 defaultFailedCallback 속성을 재정의합니다.
userContext 선택 사항(기본값은 null)입니다. 콜백 함수에 전달되어야 하는 사용자 지정 사용자 컨텍스트 데이터입니다.

반환 값:

이 함수에는 반환 값이 포함되지 않습니다. 그러나 이 함수에 대한 호출이 완료되면 다음과 같은 여러 동작이 포함됩니다.

  • 매개 변수가 둘 다ull이거나 빈 문자열이 아니면 현재 페이지가 새로 고쳐지거나 변경 redirectUrl 됩니다.
  • 그러나 매개 변수가 null이거나 빈 문자열인 logoutCompletedCallback 경우 매개 변수 또는 defaultLogoutCompletedCallback 속성이 호출됩니다.
  • 웹 서비스에 대한 호출이 실패 failedCallback 하면 속성의 defaultFailedCallback 매개 변수가 호출됩니다.

defaultFailedCallback 속성(get, set):

이 속성은 웹 서비스와 통신하지 못하는 경우 호출해야 하는 함수를 지정합니다. 대리자(또는 함수 참조)를 받아야 합니다.

이 속성에 지정된 함수 참조에는 다음 서명이 있어야 합니다.

function AuthenticationFailureCallback(error, userContext, methodName);

매개 변수:

매개 변수 이름 의미
error 오류 정보를 지정합니다.
userContext 로그인 또는 로그아웃 함수가 호출될 때 제공되는 사용자 컨텍스트 정보를 지정합니다.
methodName 호출 메서드의 이름입니다.

defaultLoginCompletedCallback 속성(get, set):

이 속성은 로그인 웹 서비스 호출이 완료될 때 호출해야 하는 함수를 지정합니다. 대리자(또는 함수 참조)를 받아야 합니다.

이 속성에 지정된 함수 참조에는 다음 서명이 있어야 합니다.

function AuthenticationLoginCompletedCallback(validCredentials, userContext, methodName);

매개 변수:

매개 변수 이름 의미
validCredentials 사용자가 유효한 자격 증명을 제공했는지 여부를 지정합니다. true 사용자가 성공적으로 로그인하면 이고, 그렇지 않으면 false입니다.
userContext 로그인 함수가 호출될 때 제공되는 사용자 컨텍스트 정보를 지정합니다.
methodName 호출 메서드의 이름입니다.

defaultLogoutCompletedCallback 속성(get, set):

이 속성은 로그아웃 웹 서비스 호출이 완료될 때 호출해야 하는 함수를 지정합니다. 대리자(또는 함수 참조)를 받아야 합니다.

이 속성에 지정된 함수 참조에는 다음 서명이 있어야 합니다.

function AuthenticationLogoutCompletedCallback(result, userContext, methodName);

매개 변수:

매개 변수 이름 의미
result 이 매개 변수는 항상 null입니다. 나중에 사용하도록 예약되어 있습니다.
userContext 로그인 함수가 호출될 때 제공되는 사용자 컨텍스트 정보를 지정합니다.
methodName 호출 메서드의 이름입니다.

isLoggedIn 속성(get):

이 속성은 사용자의 현재 인증 상태를 가져옵니다. 페이지 요청 중에 ScriptManager 개체에 의해 설정됩니다.

이 속성은 사용자가 현재 로그인한 경우 를 반환 true 하고, 그렇지 않으면 를 반환합니다 false.

path 속성(get, set):

이 속성은 프로그래밍 방식으로 인증 웹 서비스의 위치를 결정합니다. 기본 인증 공급자뿐만 아니라 ScriptManager 컨트롤의 AuthenticationService 자식 노드의 Path 속성에서 선언적으로 하나의 집합을 재정의하는 데 사용할 수 있습니다(자세한 내용은 아래 사용자 지정 인증 서비스 공급자 사용 항목을 참조하세요).

기본 인증 서비스의 위치는 변경되지 않습니다. 그러나 ASP.NET AJAX를 사용하면 ASP.NET AJAX 인증 서비스 프록시와 동일한 클래스 인터페이스를 제공하는 웹 서비스의 위치를 지정할 수 있습니다.

또한 이 속성은 스크립트 요청을 현재 사이트에서 해제하는 값으로 설정해서는 안 됩니다. 현재 애플리케이션은 인증 자격 증명을 받지 않으므로 쓸모가 없습니다. 또한 기본 AJAX 기술은 사이트 간 요청을 게시해서는 안 되며 클라이언트 브라우저에서 보안 예외를 생성할 수 있습니다.

이 속성은 String 인증 웹 서비스의 경로를 나타내는 개체입니다.

timeout 속성(get, set):

이 속성은 로그인 요청이 실패했다고 가정하기 전에 인증 서비스를 기다리는 시간을 결정합니다. 호출이 완료될 때까지 기다리는 동안 시간 제한이 만료되면 요청 실패 콜백이 호출되고 호출이 완료되지 않습니다.

이 속성은 Number 인증 서비스의 결과를 대기할 시간(밀리초)을 나타내는 개체입니다.

코드 샘플: 인증 서비스에 로그인

다음 태그는 AuthenticationService 클래스의 로그인 및 로그아웃 메서드에 대한 간단한 스크립트 호출이 있는 예제 ASP.NET 페이지입니다.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
 <title>Login Example</title>
 <script type="text/javascript">
 function Login()
 {
 var userTextbox = $get("txtUser");
 var passTextbox = $get("txtPassword");
 Sys.Services.AuthenticationService.login(userTextbox.value, 
 passTextbox.value, false, null, null, LoginServiceCompleted, 
 LoginServiceFailed, "Context Info");
 }
 function Logout()
 {
 Sys.Services.AuthenticationService.logout(null, LogoutServiceCompleted, 
 LoginServiceFailed, "Context Info");
 }
 function LoginServiceFailed(error, userContext, methodName)
 {
 alert('There was an error with the authentication service:\n\n' + error);
 }
 function LoginServiceCompleted(validCredentials, userContext, methodName)
 {
 if (validCredentials)
 {
 alert('Great! You successfully logged in.');
 }
 else
 {
 alert('Oops! You gave us bad credentials!');
 }
 }
 function LogoutServiceCompleted(result, userContext, methodName)
 {
 alert('You have been logged out from the web site.');
 }
 </script>
 </head>
 <body>
 <form id="form1" runat="server">
 <asp:ScriptManager ID="ScriptManager1" runat="server" 
 EnableScriptLocalization="true">
 </asp:ScriptManager>
 <div>
 <asp:TextBox ID="txtUser" runat="Server"></asp:TextBox>
 <br />
 <asp:TextBox ID="txtPassword" runat="Server" TextMode="Password"/>
 <br />
 <asp:Button Text="Log in" ID="btnLogin" runat="server" 
 OnClientClick="Login(); return false;" />
 </div>
 </form>
 </body>
</html>

AJAX를 통해 ASP.NET 프로파일링 데이터에 액세스

ASP.NET 프로파일링 서비스는 ASP.NET AJAX 확장을 통해도 노출됩니다. ASP.NET 프로파일링 서비스는 사용자 데이터를 저장하고 검색할 수 있는 풍부하고 세분화된 API를 제공하므로 뛰어난 생산성 도구가 될 수 있습니다.

프로필 서비스는 web.config 사용하도록 설정해야 합니다. 기본적으로는 아닙니다. 이렇게 하려면 자식 요소가 web.config 지정된 true= 를 사용하도록 설정하고 다음과 같이 읽거나 쓸 수 있는 속성을 지정했는지 확인 profileService 합니다.

<system.web.extensions>
 <scripting>
 <webServices>
 <profileService enabled="true"
 readAccessProperties= Name,Address,BackgroundColor 
 writeAccessProperties= BackgroundColor />
 </webServices>
 </scripting>
</system.web.extensions>

프로필 서비스도 구성해야 합니다. 프로파일링 서비스의 구성은 이 백서의 scope 외부에 있지만 프로필 구성 설정에 정의된 그룹은 그룹 이름의 하위 속성으로 액세스할 수 있습니다. 예를 들어 다음 프로필 섹션이 지정되어 있습니다.

<profile enabled="true">
 <properties>
 <add name="Name" type="System.String"/>
 <group name="Address">
 <add name="Line1" type="System.String"/>
 <add name="Line2" type="System.String"/>
 <add name="City" type="System.String"/>
 <add name="State" type="System.String"/>
 <add name="Zip" type="System.String"/>
 </group>
 <add name="BackgroundColor" type="System.Drawing.Color"/>
 </properties>
</profile>

클라이언트 스크립트는 ProfileService 클래스의 속성 필드 속성으로 Name, Address.Line1, Address.Line2, Address.City, Address.State, Address.Zip 및 BackgroundColor에 액세스할 수 있습니다.

AJAX 프로파일링 서비스가 구성되면 페이지에서 즉시 사용할 수 있습니다. 그러나 사용하기 전에 한 번 로드해야 합니다.

Sys.Services.ProfileService 멤버

속성 필드:

속성 필드는 구성된 모든 프로필 데이터를 dot-operator-name 규칙에서 참조할 수 있는 자식 속성으로 노출합니다. 속성 그룹의 자식 속성은 GroupName.PropertyName이라고 합니다. 위에 제시된 예제 프로필 구성에서 사용자의 상태를 가져오기 위해 다음 식별자를 사용할 수 있습니다.

Sys.Services.ProfileService.properties.Address.State

load 메서드:

서버에서 선택한 목록 또는 모든 속성을 로드합니다.

매개 변수:

매개 변수 이름 의미
propertyNames 선택 사항(기본값은 null)입니다. 서버에서 로드할 속성입니다.
loadCompletedCallback 선택 사항(기본값은 null)입니다. 로드가 완료된 경우 호출할 함수입니다.
failedCallback 선택 사항(기본값은 null)입니다. 오류가 발생하는 경우 호출할 함수입니다.
userContext 선택 사항(기본값은 null)입니다. 콜백 함수에 전달할 컨텍스트 정보입니다.

load 함수에는 반환 값이 없습니다. 호출이 성공적으로 완료되면 매개 변수 또는 defaultLoadCompletedCallback 속성을 호출 loadCompletedCallback 합니다. 호출에 실패하거나 시간 제한이 만료된 failedCallback 경우 매개 변수 또는 defaultFailedCallback 속성이 호출됩니다.

매개 변수가 propertyNames 제공되지 않으면 모든 읽기 구성 속성이 서버에서 검색됩니다.

save 메서드:

save() 메서드는 지정된 속성 목록(또는 모든 속성)을 사용자의 ASP.NET 프로필에 저장합니다.

매개 변수:

매개 변수 이름 의미
propertyNames 선택 사항(기본값은 null)입니다. 서버에 저장할 속성입니다.
saveCompletedCallback 선택 사항(기본값은 null)입니다. 저장이 완료된 경우 호출할 함수입니다.
failedCallback 선택 사항(기본값은 null)입니다. 오류가 발생하는 경우 호출할 함수입니다.
userContext 선택 사항(기본값은 null)입니다. 콜백 함수에 전달할 컨텍스트 정보입니다.

save 함수에는 반환 값이 없습니다. 호출이 성공적으로 완료되면 매개 변수 또는 defaultSaveCompletedCallback 속성을 호출 saveCompletedCallback 합니다. 호출에 실패하거나 시간 제한이 만료되면 또는 defaultFailedCallback 속성이 failedCallback 호출됩니다.

매개 변수가 propertyNames null이면 모든 프로필 속성이 서버로 전송되고 서버는 저장할 수 있는 속성과 저장할 수 없는 속성을 결정합니다.

defaultFailedCallback 속성(get, set):

이 속성은 웹 서비스와 통신하지 못하는 경우 호출해야 하는 함수를 지정합니다. 대리자(또는 함수 참조)를 받아야 합니다.

이 속성에 지정된 함수 참조에는 다음 서명이 있어야 합니다.

function AuthenticationFailureCallback(error, userContext, methodName);

매개 변수:

매개 변수 이름 의미
오류 오류 정보를 지정합니다.
userContext 부하 또는 저장 함수가 호출될 때 제공되는 사용자 컨텍스트 정보를 지정합니다.
methodName 호출 메서드의 이름입니다.

defaultSaveCompleted 속성(get, set):

이 속성은 사용자의 프로필 데이터 저장을 완료할 때 호출해야 하는 함수를 지정합니다. 대리자(또는 함수 참조)를 받아야 합니다.

이 속성에 지정된 함수 참조에는 다음 서명이 있어야 합니다.

function ProfileSaveComplete(numPropsSaved, userContext, methodName);

매개 변수:

매개 변수 이름 의미
numPropsSaved 저장된 속성 수를 지정합니다.
userContext 부하 또는 저장 함수가 호출될 때 제공되는 사용자 컨텍스트 정보를 지정합니다.
methodName 호출 메서드의 이름입니다.

defaultLoadCompleted 속성(get, set):

이 속성은 사용자의 프로필 데이터 로드가 완료될 때 호출해야 하는 함수를 지정합니다. 대리자(또는 함수 참조)를 받아야 합니다.

이 속성에 지정된 함수 참조에는 다음 서명이 있어야 합니다.

function ProfileLoadComplete(numPropsLoaded, userContext, methodName);

매개 변수:

매개 변수 이름 의미
numPropsLoaded 로드된 속성 수를 지정합니다.
userContext 부하 또는 저장 함수가 호출될 때 제공되는 사용자 컨텍스트 정보를 지정합니다.
methodName 호출 메서드의 이름입니다.

path 속성(get, set):

이 속성은 프로그래밍 방식으로 프로필 웹 서비스의 위치를 결정합니다. ScriptManager 컨트롤의 ProfileService 자식 노드의 Path 속성에서 선언적으로 하나의 집합뿐만 아니라 기본 프로필 서비스 공급자를 재정의하는 데 사용할 수 있습니다.

기본 프로필 서비스의 위치는 변경되지 않습니다. 그러나 ASP.NET AJAX를 사용하면 ASP.NET AJAX 인증 서비스 프록시와 동일한 클래스 인터페이스를 제공하는 웹 서비스의 위치를 지정할 수 있습니다.

또한 이 속성은 스크립트 요청을 현재 사이트에서 해제하는 값으로 설정해서는 안 됩니다. 기본 AJAX 기술은 사이트 간 요청을 게시해서는 안 되며 클라이언트 브라우저에서 보안 예외를 생성할 수 있습니다.

이 속성은 String 프로필 웹 서비스의 경로를 나타내는 개체입니다.

timeout 속성(get, set):

이 속성은 로드 또는 저장 요청이 실패했다고 가정하기 전에 프로필 서비스를 기다리는 시간을 결정합니다. 호출이 완료될 때까지 기다리는 동안 시간 제한이 만료되면 요청 실패 콜백이 호출되고 호출이 완료되지 않습니다.

이 속성은 Number 프로필 서비스의 결과를 대기할 시간(밀리초)을 나타내는 개체입니다.

코드 샘플: 페이지 로드 시 프로필 데이터 로드

다음 코드는 사용자가 인증되었는지 여부를 확인하는 검사, 그렇다면 사용자의 기본 배경색을 페이지로 로드합니다.

function Page_Load()
{
 if (Sys.Services.AuthenticationService.get_isLoggedIn())
 {
 Sys.Services.ProfileService.load();
 }
}
function ProfileLoaded(numPropsLoaded, userContext, methodName)
{
 document.documentElement.style.backgroundColor = Sys.Services.ProfileService.properties.BackgroundColor;
}

사용자 지정 인증 서비스 공급자 사용

ASP.NET AJAX 확장을 사용하면 사용자 지정 웹 서비스를 통해 기능을 노출하여 사용자 지정 스크립트 인증 서비스 공급자를 만들 수 있습니다. 사용하려면 웹 서비스가 두 메서드 LoginLogout를 노출해야 하며 이러한 메서드는 기본 ASP.NET AJAX 인증 웹 서비스와 동일한 메서드 서명으로 지정되어야 합니다.

사용자 지정 웹 서비스를 만든 후에는 페이지에 선언적으로, 프로그래밍 방식으로 코드에서 또는 클라이언트 스크립트를 통해 경로를 지정해야 합니다.

경로를 선언적으로 설정하려면 다음을 수행합니다.

경로를 선언적으로 설정하려면 ASP.NET 페이지에 ScriptManager 개체의 AuthenticationService 자식 을 포함합니다.

<asp:ScriptManager ID="ScriptManager1" runat="server">
 <AuthenticationService Path="~/AuthService.asmx" />
</asp:ScriptManager>

코드에서 경로를 설정하려면 다음을 수행합니다.

경로를 프로그래밍 방식으로 설정하려면 스크립트 관리자의 instance 통해 경로를 지정합니다.

protected void Page_Load(object sender, EventArgs e)
{
    this.ScriptManager1.AuthenticationService.Path = "~/AuthService.asmx";
}

스크립트에서 경로를 설정하려면 다음을 수행합니다.

스크립트에서 프로그래밍 방식으로 경로를 설정하려면 AuthenticationService 클래스의 속성을 사용합니다 path .

function Login()
{
 var userTextbox = $get("txtUser");
 var passTextbox = $get("txtPassword");
 Sys.Services.AuthenticationService.set_path("./AuthService.asmx");
 Sys.Services.AuthenticationService.login(userTextbox.value, passTextbox.value, false, null, null, LoginServiceCompleted, LoginServiceFailed, "Context Info");
}

사용자 지정 인증을 위한 샘플 웹 서비스

<%@ WebService Language="C#" Class="AuthService" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
[ScriptService]
[WebService]
public class AuthService : WebService
{
 [WebMethod]
 public bool Login(string userName, string password, bool createCookie)
 {
 Session["LoggedInUser"] = userName;
 return true;
 }
 [WebMethod]
 public void Logout()
 {
 Session.Abandon();
 }
}

요약

ASP.NET 서비스(특히 프로파일링, 멤버 자격 및 인증 서비스)는 클라이언트 브라우저에서 JavaScript에 쉽게 노출됩니다. 이를 통해 개발자는 UpdatePanels와 같은 컨트롤에 따라 많은 작업을 수행하지 않고도 클라이언트 쪽 코드를 인증 메커니즘과 원활하게 통합할 수 있습니다. 프로필 데이터는 웹 구성 설정을 활용하여 클라이언트로부터도 보호할 수 있습니다. 기본적으로 사용할 수 있는 데이터는 없으며 개발자는 속성을 프로파일에 옵트인해야 합니다.

또한 동일한 메서드 서명을 사용하여 간소화된 웹 서비스 구현을 만들어 개발자는 이러한 기본 ASP.NET 서비스에 대한 사용자 지정 스크립트 공급자를 만들 수 있습니다. 이러한 기술에 대한 지원은 풍부한 클라이언트 애플리케이션의 개발을 간소화하는 동시에 개발자에게 특정 요구 사항을 충족할 수 있는 다양한 유연성을 제공합니다.

사용자 정보

Scott Cate은 1997년부터 Microsoft 웹 기술과 함께 일해 왔으며 myKB.com(www.myKB.com)의 사장으로 기술 자료 소프트웨어 솔루션에 중점을 둔 ASP.NET 기반 애플리케이션을 작성하는 일을 전문으로 합니다. Scott은 이메일 scott.cate@myKB.com 또는 ScottCate.com 블로그를 통해 연락할 수 있습니다.