Grundlegendes zu Authentifizierungs- und Profilanwendungsdiensten von ASP.NET AJAX
von Scott Cate
Der Authentifizierungsdienst ermöglicht Benutzern das Bereitstellen von Anmeldeinformationen zum Empfangen eines Authentifizierungscookies und ist der Gatewaydienst, um benutzerdefinierte Benutzerprofile zuzulassen, die von ASP.NET bereitgestellt werden. Die Verwendung des ASP.NET AJAX-Authentifizierungsdiensts ist mit der Standardauthentifizierung ASP.NET Formularauthentifizierung kompatibel, sodass Anwendungen, die derzeit die Formularauthentifizierung verwenden (z. B. mit dem Anmeldesteuerelement), nicht durch ein Upgrade auf den AJAX-Authentifizierungsdienst unterbrochen werden.
Einführung
Im Rahmen der .NET Framework 3.5 bietet Microsoft ein beträchtliches Umgebungsupgrade. Nicht nur eine neue Entwicklungsumgebung ist verfügbar, sondern auch die neuen LINQ-Features (Language-Integrated Query) und andere Spracherweiterungen sind verfügbar. Darüber hinaus werden einige bekannte Features anderer Toolsets, insbesondere die ASP.NET AJAX-Erweiterungen, als erstklassige Mitglieder der .NET Framework Basisklassenbibliothek aufgenommen. Diese Erweiterungen ermöglichen viele neue umfangreiche Clientfeatures, einschließlich des teilweisen Renderings von Seiten, ohne dass eine vollständige Seitenaktualisierung erforderlich ist, die Möglichkeit, über Clientskripts (einschließlich der ASP.NET Profilerstellungs-API) auf Webdienste zuzugreifen, und eine umfangreiche clientseitige API, die zum Spiegel vieler Steuerungsschemas im ASP.NET serverseitigen Steuerelementsatz entwickelt wurde.
In diesem Whitepaper wird die Implementierung und Verwendung der ASP.NET-Profilerstellungs- und Formularauthentifizierungsdienste behandelt, da sie vom Microsoft ASP.NET AJAX-Erweiterungen verfügbar gemacht werden. Die AJAX-Erweiterungen machen die Unterstützung der Formularauthentifizierung unglaublich einfach, da sie (sowie der Profilerstellungsdienst) über ein Webdienstproxyskript verfügbar gemacht wird. Die AJAX-Erweiterungen unterstützen auch die benutzerdefinierte Authentifizierung über die AuthenticationServiceManager-Klasse.
Dieses Whitepaper basiert auf der Beta 2-Version von Visual Studio 2008 und dem .NET Framework 3.5. In diesem Whitepaper wird auch davon ausgegangen, dass Sie mit Visual Studio 2008 Beta 2 und nicht mit Visual Web Developer Express arbeiten und exemplarische Vorgehensweisen gemäß der Benutzeroberfläche von Visual Studio bereitstellen. Einige Codebeispiele verwenden möglicherweise Projektvorlagen, die in Visual Web Developer Express nicht verfügbar sind.
Profile und Authentifizierung
Die Microsoft ASP.NET Profile und Authentifizierungsdienste werden vom ASP.NET Formularauthentifizierungssystem bereitgestellt und sind Standardkomponenten von ASP.NET. Die ASP.NET AJAX-Erweiterungen bieten Skriptzugriff auf diese Dienste über Skriptproxys über ein recht einfaches Modell unter dem Sys.Services-Namespace der AJAX-Clientbibliothek.
Der Authentifizierungsdienst ermöglicht Benutzern das Bereitstellen von Anmeldeinformationen zum Empfangen eines Authentifizierungscookies und ist der Gatewaydienst, um benutzerdefinierte Benutzerprofile zuzulassen, die von ASP.NET bereitgestellt werden. Die Verwendung des ASP.NET AJAX-Authentifizierungsdiensts ist mit der Standardauthentifizierung ASP.NET Formularauthentifizierung kompatibel, sodass Anwendungen, die derzeit die Formularauthentifizierung verwenden (z. B. mit dem Anmeldesteuerelement), nicht durch ein Upgrade auf den AJAX-Authentifizierungsdienst unterbrochen werden.
Der Profildienst ermöglicht die automatische Integration und Speicherung von Benutzerdaten basierend auf der Mitgliedschaft, die vom Authentifizierungsdienst bereitgestellt wird. Die gespeicherten Daten werden durch die web.config-Datei angegeben, und die verschiedenen Profilerstellungsdienstanbieter übernehmen die Datenverwaltung. Wie beim Authentifizierungsdienst ist auch der AJAX-Profildienst mit dem Standard-ASP.NET-Profildienst kompatibel, sodass Seiten, die derzeit Features des ASP.NET Profildiensts enthalten, nicht durch die Ajax-Unterstützung unterbrochen werden sollten.
Die Integration der ASP.NET Authentifizierungs- und Profilerstellungsdienste selbst in eine Anwendung liegt außerhalb des Geltungsbereichs dieses Whitepapers. Weitere Informationen zu diesem Thema finden Sie im MSDN Library-Referenzartikel Verwalten von Benutzern mithilfe der Mitgliedschaft unter https://msdn.microsoft.com/library/tw292whz.aspx. ASP.NET enthält auch ein Hilfsprogramm zum automatischen Einrichten der Mitgliedschaft mit einem SQL Server, dem Standardauthentifizierungsdienstanbieter für ASP.NET Mitgliedschaft. Weitere Informationen finden Sie im Artikel ASP.NET SQL Server Registrierungstool (Aspnet_regsql.exe) unter https://msdn.microsoft.com/library/ms229862(vs.80).aspx.
Verwenden des ASP.NET AJAX-Authentifizierungsdiensts
Der ASP.NET AJAX-Authentifizierungsdienst muss in der datei web.config aktiviert sein:
<system.web.extensions>
<scripting>
<webServices>
<authenticationService enabled="true" />
</webServices>
</scripting>
</system.web.extensions>
Der Authentifizierungsdienst erfordert, dass ASP.NET Formularauthentifizierung aktiviert ist und Cookies im Clientbrowser aktiviert werden müssen (ein Skript kann keine cookielose Sitzung aktivieren, da cookielose Sitzungen URL-Parameter erfordern).
Sobald der AJAX-Authentifizierungsdienst aktiviert und konfiguriert ist, kann das Clientskript sofort die Vorteile des Sys.Services.AuthenticationService-Objekts nutzen. In erster Linie möchte das Clientskript die Methode und isLoggedIn
Eigenschaft login
nutzen. Es gibt mehrere Eigenschaften, um Standardwerte für die Anmeldemethode bereitzustellen, die eine große Anzahl von Parametern akzeptieren kann.
Sys.Services.AuthenticationService-Member
Anmeldemethode:
Die login()-Methode beginnt eine Anforderung zur Authentifizierung der Anmeldeinformationen des Benutzers. Diese Methode ist asynchron und blockiert die Ausführung nicht.
Parameter:
Parametername | Bedeutung |
---|---|
userName | Erforderlich. Der zu authentifizierde Benutzername. |
password | Optional (standardmäßig null). Das Kennwort des Benutzers. |
isPersistent | Optional (standardmäßig false). Gibt an, ob das Authentifizierungscookies des Benutzers sitzungsübergreifend beibehalten werden soll. Bei false meldet sich der Benutzer ab, wenn der Browser geschlossen wird oder die Sitzung abläuft. |
redirectUrl | Optional (standardmäßig null). Die URL, an die der Browser bei erfolgreicher Authentifizierung umgeleitet werden soll. Wenn dieser Parameter NULL oder eine leere Zeichenfolge ist, erfolgt keine Umleitung. |
customInfo | Optional (standardmäßig null). Dieser Parameter ist derzeit nicht verwendet und für die zukünftige Verwendung reserviert. |
loginCompletedCallback | Optional (standardmäßig null). Die Funktion, die aufgerufen werden soll, wenn die Anmeldung erfolgreich abgeschlossen wurde. Wenn angegeben, überschreibt dieser Parameter die defaultLoginCompleted-Eigenschaft. |
failedCallback | Optional (standardmäßig null). Die Funktion, die aufgerufen werden soll, wenn bei der Anmeldung ein Fehler aufgetreten ist. Wenn angegeben, überschreibt dieser Parameter die defaultFailedCallback-Eigenschaft. |
userContext | Optional (standardmäßig null). Benutzerdefinierte Benutzerkontextdaten, die an die Rückruffunktionen übergeben werden sollen. |
Rückgabewert:
Diese Funktion enthält keinen Rückgabewert. Nach Abschluss eines Aufrufs dieser Funktion sind jedoch eine Reihe von Verhaltensweisen enthalten:
- Die aktuelle Seite wird entweder aktualisiert oder geändert, wenn der
redirectUrl
Parameter weder NULL noch eine leere Zeichenfolge war. - Wenn der Parameter jedoch NULL oder eine leere Zeichenfolge war, wird der Parameter oder
defaultLoginCompletedCallback
dieloginCompletedCallback
Eigenschaft aufgerufen. - Wenn beim Aufruf des Webdiensts ein Fehler auftritt, wird der
failedCallback
Parameter derdefaultFailedCallback
-Eigenschaft aufgerufen.
Logout-Methode:
Die methode logout() entfernt das Anmeldeinformationen-Cookie und meldet den aktuellen Benutzer aus der Webanwendung ab.
Parameter:
Parametername | Bedeutung |
---|---|
redirectUrl | Optional (standardmäßig null). Die URL, an die der Browser bei erfolgreicher Authentifizierung umgeleitet werden soll. Wenn dieser Parameter NULL oder eine leere Zeichenfolge ist, erfolgt keine Umleitung. |
logoutCompletedCallback | Optional (standardmäßig null). Die Funktion, die aufgerufen werden soll, wenn die Abmeldung erfolgreich abgeschlossen wurde. Wenn angegeben, überschreibt dieser Parameter die defaultLogoutCompleted-Eigenschaft. |
failedCallback | Optional (standardmäßig null). Die Funktion, die aufgerufen werden soll, wenn bei der Anmeldung ein Fehler aufgetreten ist. Wenn angegeben, überschreibt dieser Parameter die defaultFailedCallback-Eigenschaft. |
userContext | Optional (standardmäßig null). Benutzerdefinierte Benutzerkontextdaten, die an die Rückruffunktionen übergeben werden sollen. |
Rückgabewert:
Diese Funktion enthält keinen Rückgabewert. Nach Abschluss eines Aufrufs dieser Funktion sind jedoch eine Reihe von Verhaltensweisen enthalten:
- Die aktuelle Seite wird entweder aktualisiert oder geändert, wenn der
redirectUrl
Parameter weder NULL noch eine leere Zeichenfolge war. - Wenn der Parameter jedoch NULL oder eine leere Zeichenfolge war, wird der Parameter oder
defaultLogoutCompletedCallback
dielogoutCompletedCallback
Eigenschaft aufgerufen. - Wenn beim Aufruf des Webdiensts ein Fehler auftritt, wird der
failedCallback
Parameter derdefaultFailedCallback
-Eigenschaft aufgerufen.
defaultFailedCallback-Eigenschaft (get, set):
Diese Eigenschaft gibt eine Funktion an, die aufgerufen werden soll, wenn ein Fehler bei der Kommunikation mit dem Webdienst auftritt. Sie sollte einen Delegaten (oder Funktionsverweis) erhalten.
Der von dieser Eigenschaft angegebene Funktionsverweis sollte die folgende Signatur aufweisen:
function AuthenticationFailureCallback(error, userContext, methodName);
Parameter:
Parametername | Bedeutung |
---|---|
error | Gibt die Fehlerinformationen an. |
userContext | Gibt die Benutzerkontextinformationen an, die beim Aufruf der Anmelde- oder Abmeldefunktion bereitgestellt wurden. |
methodName | Der Name der aufrufenden Methode. |
defaultLoginCompletedCallback-Eigenschaft (get, set):
Diese Eigenschaft gibt eine Funktion an, die aufgerufen werden soll, wenn der Aufruf des Anmeldewebdiensts abgeschlossen ist. Sie sollte einen Delegaten (oder Funktionsverweis) erhalten.
Der von dieser Eigenschaft angegebene Funktionsverweis sollte die folgende Signatur aufweisen:
function AuthenticationLoginCompletedCallback(validCredentials, userContext, methodName);
Parameter:
Parametername | Bedeutung |
---|---|
validCredentials | Gibt an, ob der Benutzer gültige Anmeldeinformationen angegeben hat. true wenn sich der Benutzer erfolgreich angemeldet hat; andernfalls false . |
userContext | Gibt die Benutzerkontextinformationen an, die beim Aufruf der Anmeldefunktion bereitgestellt wurden. |
methodName | Der Name der aufrufenden Methode. |
defaultLogoutCompletedCallback-Eigenschaft (get, set):
Diese Eigenschaft gibt eine Funktion an, die aufgerufen werden soll, wenn der Abmeldewebdienstaufruf abgeschlossen ist. Sie sollte einen Delegaten (oder Funktionsverweis) erhalten.
Der von dieser Eigenschaft angegebene Funktionsverweis sollte die folgende Signatur aufweisen:
function AuthenticationLogoutCompletedCallback(result, userContext, methodName);
Parameter:
Parametername | Bedeutung |
---|---|
result | Dieser Parameter ist immer; null er ist für die zukünftige Verwendung reserviert. |
userContext | Gibt die Benutzerkontextinformationen an, die beim Aufruf der Anmeldefunktion bereitgestellt wurden. |
methodName | Der Name der aufrufenden Methode. |
isLoggedIn-Eigenschaft (get):
Diese Eigenschaft ruft den aktuellen Authentifizierungsstatus des Benutzers ab. sie wird vom ScriptManager-Objekt während einer Seitenanforderung festgelegt.
Diese Eigenschaft gibt zurück true
, wenn der Benutzer derzeit angemeldet ist, andernfalls wird zurückgegeben false
.
path-Eigenschaft (get, festlegen):
Diese Eigenschaft bestimmt programmgesteuert den Speicherort des Authentifizierungswebdiensts. Es kann verwendet werden, um den Standardauthentifizierungsanbieter sowie einen Satz deklarativ in der Path-Eigenschaft des untergeordneten Knotens AuthenticationService des ScriptManager-Steuerelements zu überschreiben (weitere Informationen finden Sie im Thema Verwenden eines benutzerdefinierten Authentifizierungsdienstanbieters unten).
Beachten Sie, dass sich der Speicherort des Standardauthentifizierungsdiensts nicht ändert. Mit ASP.NET AJAX können Sie jedoch den Speicherort eines Webdiensts angeben, der dieselbe Klassenschnittstelle wie der ASP.NET AJAX-Authentifizierungsdienstproxy bereitstellt.
Beachten Sie außerdem, dass diese Eigenschaft nicht auf einen Wert festgelegt werden sollte, der die Skriptanforderung von der aktuellen Website aus leitet. Da die aktuelle Anwendung die Anmeldeinformationen für die Authentifizierung nicht erhält, wäre sie nutzlos. Außerdem sollte die zugrunde liegende AJAX-Technologie keine standortübergreifenden Anforderungen posten und möglicherweise eine Sicherheitsausnahme im Clientbrowser generieren.
Diese Eigenschaft ist ein String
Objekt, das den Pfad zum Authentifizierungswebdienst darstellt.
Timeouteigenschaft (get, festlegen):
Diese Eigenschaft bestimmt, wie lange auf den Authentifizierungsdienst gewartet werden muss, bevor angenommen, die Anmeldeanforderung ist fehlgeschlagen. Wenn das Timeout abläuft, während auf den Abschluss eines Anrufs gewartet wird, wird der rückruffehler bei der Anforderung aufgerufen, und der Aufruf wird nicht abgeschlossen.
Diese Eigenschaft ist ein Number
Objekt, das die Anzahl von Millisekunden darstellt, die auf Ergebnisse des Authentifizierungsdiensts warten.
Codebeispiel: Anmelden beim Authentifizierungsdienst
Das folgende Markup ist ein Beispiel ASP.NET Seite mit einem einfachen Skriptaufruf der Anmelde- und Abmeldemethoden der AuthenticationService-Klasse.
<%@ 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>
Zugreifen auf ASP.NET Profilerstellungsdaten über AJAX
Der ASP.NET Profilerstellungsdienst wird auch über die ASP.NET AJAX-Erweiterungen verfügbar gemacht. Da der ASP.NET-Profilerstellungsdienst eine umfassende, präzise API zum Speichern und Abrufen von Benutzerdaten bietet, kann dies ein hervorragendes Produktivitätstool sein.
Der Profildienst muss in web.config aktiviert sein. Standardmäßig ist dies nicht der Standard. Stellen Sie dazu sicher, dass für das profileService
untergeordnete Element enabled= true in web.config angegeben ist und Sie wie folgt angegeben haben, welche Eigenschaften gelesen oder geschrieben werden können:
<system.web.extensions>
<scripting>
<webServices>
<profileService enabled="true"
readAccessProperties= Name,Address,BackgroundColor
writeAccessProperties= BackgroundColor />
</webServices>
</scripting>
</system.web.extensions>
Der Profildienst muss ebenfalls konfiguriert werden. Obwohl die Konfiguration des Profilerstellungsdiensts außerhalb des Geltungsbereichs dieses Whitepapers liegt, ist es sinnvoll zu beachten, dass Gruppen, wie sie in den Profilkonfigurationseinstellungen definiert sind, als Untereigenschaften des Gruppennamens zugänglich sind. Beispielsweise mit dem folgenden Profilabschnitt:
<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>
Clientskript kann auf Name, Address.Line1, Address.Line2, Address.City, Address.State, Address.Zip und BackgroundColor als Eigenschaften des Eigenschaftenfelds der ProfileService-Klasse zugreifen.
Sobald der AJAX-Profilerstellungsdienst konfiguriert ist, ist er sofort auf Seiten verfügbar. Es muss jedoch vor der Verwendung einmal geladen werden.
Sys.Services.ProfileService-Member
Eigenschaftenfeld:
Das Eigenschaftenfeld macht alle konfigurierten Profildaten als untergeordnete Eigenschaften verfügbar, auf die durch die Konvention "dot-operator-name" verwiesen werden kann. Eigenschaften, die untergeordnete Eigenschaften von Eigenschaftengruppen sind, werden als GroupName.PropertyName bezeichnet. In der oben dargestellten Beispielprofilkonfiguration können Sie den folgenden Bezeichner verwenden, um den Status des Benutzers abzurufen:
Sys.Services.ProfileService.properties.Address.State
Load-Methode:
Lädt eine ausgewählte Liste oder alle Eigenschaften vom Server.
Parameter:
Parametername | Bedeutung |
---|---|
propertyNames | Optional (standardmäßig null). Die Eigenschaften, die vom Server geladen werden sollen. |
loadCompletedCallback | Optional (standardmäßig null). Die Funktion, die beim Laden aufgerufen werden soll, ist abgeschlossen. |
failedCallback | Optional (standardmäßig null). Die Funktion, die aufgerufen werden soll, wenn ein Fehler auftritt. |
userContext | Optional (standardmäßig null). Kontextinformationen, die an die Rückruffunktion übergeben werden sollen. |
Die Ladefunktion verfügt nicht über einen Rückgabewert. Wenn der Aufruf erfolgreich abgeschlossen wurde, wird entweder der Parameter oder defaultLoadCompletedCallback
die loadCompletedCallback
Eigenschaft aufgerufen. Wenn beim Aufruf ein Fehler aufgetreten ist oder das Timeout abgelaufen ist, wird entweder der Parameter oder defaultFailedCallback
die failedCallback
Eigenschaft aufgerufen.
Wenn der propertyNames
Parameter nicht angegeben wird, werden alle read-konfigurierten Eigenschaften vom Server abgerufen.
save-Methode:
Die save()-Methode speichert die angegebene Eigenschaftenliste (oder alle Eigenschaften) im ASP.NET Profil des Benutzers.
Parameter:
Parametername | Bedeutung |
---|---|
propertyNames | Optional (standardmäßig null). Die Eigenschaften, die auf dem Server gespeichert werden sollen. |
saveCompletedCallback | Optional (standardmäßig null). Die Funktion, die beim Speichern aufgerufen werden soll, ist abgeschlossen. |
failedCallback | Optional (standardwert: NULL). Die Funktion, die aufgerufen werden soll, wenn ein Fehler auftritt. |
userContext | Optional (standardwert: NULL). Kontextinformationen, die an die Rückruffunktion übergeben werden sollen. |
Die Save-Funktion verfügt nicht über einen Rückgabewert. Wenn der Aufruf erfolgreich abgeschlossen wird, wird entweder der -Parameter oder defaultSaveCompletedCallback
die saveCompletedCallback
-Eigenschaft aufgerufen. Wenn der Aufruf fehlgeschlagen ist oder das Timeout abgelaufen ist, wird entweder die failedCallback
-Eigenschaft oder defaultFailedCallback
aufgerufen.
Wenn der propertyNames
Parameter NULL ist, werden alle Profileigenschaften an den Server gesendet, und der Server entscheidet, welche Eigenschaften gespeichert werden können und welche nicht.
defaultFailedCallback-Eigenschaft (get, set):
Diese Eigenschaft gibt eine Funktion an, die aufgerufen werden soll, wenn ein Kommunikationsfehler mit dem Webdienst auftritt. Sie sollte einen Delegaten (oder Funktionsverweis) erhalten.
Der von dieser Eigenschaft angegebene Funktionsverweis sollte die folgende Signatur aufweisen:
function AuthenticationFailureCallback(error, userContext, methodName);
Parameter:
Parametername | Bedeutung |
---|---|
Fehler | Gibt die Fehlerinformationen an. |
userContext | Gibt die Benutzerkontextinformationen an, die beim Aufrufen der Load- oder Save-Funktion bereitgestellt wurden. |
methodName | Der Name der aufrufenden Methode. |
defaultSaveCompleted-Eigenschaft (get, set):
Diese Eigenschaft gibt eine Funktion an, die nach Abschluss des Speicherns der Profildaten des Benutzers aufgerufen werden soll. Sie sollte einen Delegaten (oder Funktionsverweis) erhalten.
Der von dieser Eigenschaft angegebene Funktionsverweis sollte die folgende Signatur aufweisen:
function ProfileSaveComplete(numPropsSaved, userContext, methodName);
Parameter:
Parametername | Bedeutung |
---|---|
numPropsSaved | Gibt die Anzahl der gespeicherten Eigenschaften an. |
userContext | Gibt die Benutzerkontextinformationen an, die beim Aufrufen der Load- oder Save-Funktion bereitgestellt wurden. |
methodName | Der Name der aufrufenden Methode. |
defaultLoadCompleted-Eigenschaft (get, set):
Diese Eigenschaft gibt eine Funktion an, die nach Abschluss des Ladens der Profildaten des Benutzers aufgerufen werden soll. Sie sollte einen Delegaten (oder Funktionsverweis) erhalten.
Der von dieser Eigenschaft angegebene Funktionsverweis sollte die folgende Signatur aufweisen:
function ProfileLoadComplete(numPropsLoaded, userContext, methodName);
Parameter:
Parametername | Bedeutung |
---|---|
numPropsLoaded | Gibt die Anzahl der geladenen Eigenschaften an. |
userContext | Gibt die Benutzerkontextinformationen an, die beim Aufrufen der Load- oder Save-Funktion bereitgestellt wurden. |
methodName | Der Name der aufrufenden Methode. |
path-Eigenschaft (get, set):
Diese Eigenschaft bestimmt programmgesteuert den Speicherort des Profilwebdiensts. Es kann verwendet werden, um den Standardprofildienstanbieter sowie einen in der Path-Eigenschaft des untergeordneten Knotens ProfileService des ScriptManager-Steuerelements deklarativ festzulegen.
Beachten Sie, dass sich der Speicherort des Standardprofildiensts nicht ändert. Mit ASP.NET AJAX können Sie jedoch den Speicherort eines Webdiensts angeben, der dieselbe Klassenschnittstelle wie der ASP.NET AJAX-Authentifizierungsdienstproxy bereitstellt.
Beachten Sie auch, dass diese Eigenschaft nicht auf einen Wert festgelegt werden sollte, der die Skriptanforderung von der aktuellen Website aus leitet. Die zugrunde liegende AJAX-Technologie sollte keine websiteübergreifenden Anforderungen posten und möglicherweise eine Sicherheitsausnahme im Clientbrowser generieren.
Diese Eigenschaft ist ein String
Objekt, das den Pfad zum Profilwebdienst darstellt.
timeout-Eigenschaft (get, set):
Diese Eigenschaft bestimmt die Dauer des Wartens auf den Profildienst, bevor davon ausgegangen wird, dass die Lade- oder Speicheranforderung fehlgeschlagen ist. Wenn das Timeout abläuft, während auf den Abschluss eines Aufrufs gewartet wird, wird der Rückruf mit fehlgeschlagener Anforderung aufgerufen, und der Aufruf wird nicht abgeschlossen.
Diese Eigenschaft ist ein Number
Objekt, das die Anzahl der Millisekunden darstellt, die auf Ergebnisse des Profildiensts gewartet werden sollen.
Codebeispiel: Laden von Profildaten beim Laden von Seiten
Mit dem folgenden Code wird überprüft, ob ein Benutzer authentifiziert ist, und wenn ja, wird die bevorzugte Hintergrundfarbe des Benutzers als die der Seite geladen.
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;
}
Verwenden eines benutzerdefinierten Authentifizierungsdienstanbieters
Mit den ASP.NET AJAX-Erweiterungen können Sie einen benutzerdefinierten Skriptauthentifizierungsdienstanbieter erstellen, indem Sie Ihre Funktionalität über einen benutzerdefinierten Webdienst verfügbar machen. Um verwendet zu werden, muss Ihr Webdienst zwei Methoden und verfügbar machen, Login
und Logout
diese Methoden müssen mit den gleichen Methodensignaturen wie der Standardwebdienst ASP.NET AJAX-Authentifizierung angegeben werden.
Nachdem Sie den benutzerdefinierten Webdienst erstellt haben, müssen Sie den Pfad dazu angeben, entweder deklarativ auf Ihrer Seite, programmgesteuert im Code oder über das Clientskript.
So legen Sie den Pfad deklarativ fest:
Um den Pfad deklarativ festzulegen, fügen Sie das untergeordnete AuthenticationService-Element des ScriptManager-Objekts auf der Seite ASP.NET ein:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<AuthenticationService Path="~/AuthService.asmx" />
</asp:ScriptManager>
So legen Sie den Pfad im Code fest:
Um den Pfad programmgesteuert festzulegen, geben Sie den Pfad über die instance Ihres Skript-Managers an:
protected void Page_Load(object sender, EventArgs e)
{
this.ScriptManager1.AuthenticationService.Path = "~/AuthService.asmx";
}
So legen Sie den Pfad im Skript fest:
Verwenden Sie zum programmgesteuerten Festlegen des Pfads im Skript die path
-Eigenschaft der AuthenticationService-Klasse:
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");
}
Beispielwebdienst für die benutzerdefinierte Authentifizierung
<%@ 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();
}
}
Zusammenfassung
ASP.NET-Dienste – insbesondere die Profilerstellungs-, Mitgliedschafts- und Authentifizierungsdienste – können im Clientbrowser problemlos für JavaScript verfügbar gemacht werden. Dadurch können Entwickler ihren clientseitigen Code nahtlos in den Authentifizierungsmechanismus integrieren, ohne von Steuerelementen wie UpdatePanels abhängig zu sein. Profildaten können auch vor dem Client geschützt werden, indem Webkonfigurationseinstellungen verwendet werden. Es sind standardmäßig keine Daten verfügbar, und Entwickler müssen sich für Profileigenschaften entscheiden.
Darüber hinaus können Entwickler durch das Erstellen vereinfachter Webdienstimplementierungen mit gleichwertigen Methodensignaturen benutzerdefinierte Skriptanbieter für diese systeminternen ASP.NET-Dienste erstellen. Die Unterstützung für diese Techniken vereinfacht die Entwicklung umfangreicher Clientanwendungen und bietet Entwicklern gleichzeitig eine breite Palette von Flexibilität, um bestimmte Anforderungen zu erfüllen.
Biografie
Scott Cate arbeitet seit 1997 mit Microsoft-Webtechnologien und ist President von myKB.com (www.myKB.com), wo er sich auf das Schreiben von ASP.NET basierten Anwendungen spezialisiert hat, die sich auf Knowledge Base-Softwarelösungen konzentrieren. Scott kann per E-Mail unter scott.cate@myKB.com oder seinem Blog unter ScottCate.com