von James Lowes
Erweiterung der FunktionalitätÜber die Redirect-Anweisung wird der Benutzer pro-blemlos zu der Web-Anwendung weitergeleitet. Eine unangenehme Einschränkung dieser Anweisung ist allerdings, dass ihr keine Parameter mitgegeben werden können. Ein Anfügen von Parametern ist zwar grund- sätzlich möglich, jedoch sind diese Parameter beim Laden der URL nicht verfügbar. Das kann man hinneh- men, wenn für die Anwendung keine Parameter benötigt werden, im Sinne einer erweiterten Funktionalität kann sich dies aber recht hinderlich auswirken. Eine Möglichkeit zur Umgehung dieser Einschrän-kung ist ein Redirect an ein Formular, bevor letztlich dann die eigentliche Anwendung geladen wird. Hierzu sind zusätzlich zu den bisher vorgestellten Schritten einige weitere Aktionen erforderlich.Zuerst klickt der Benutzer einen Link auf der Websitean, wodurch ein Fenster geöffnet und der Authentifi- zierungs-Agent gestartet wird.
Dieser stellt zur Abwicklung der Authentifizierung eine Print-Anweisung zusammen und leitet den Benutzer weiter. Nach erfolg- reicher Authentifizierung wird über den Redirect-Teil der Anweisung ein Formular geladen. Dieses Formular kann man sich als den ersten Schritt zu der Anwendung vorstellen. Die bisherigen Schritte sind im Grunde nicht allzu schwierig und sollten annähernd vertraut sein. Um an die Informationen zu gelangen, die als Para-meter an die Anwendung weitergeleitet werden sollen, gibt es an dieser Stelle mehrere Optionen. Eine Möglich- keit ist, einen Agenten im WebQueryOpen des Formulars einzusetzen, um die erforderlichen Informationen abzu- fragen und in ein Feld einzustellen. Die vom WQO- Agenten gesetzten Werte können dann für ein weiteresFeld verwendet werden, in dem die Bestimmungs-URL mit den zu übergebenden Parametern zusammenge- führt werden. Schließlich kann dann das JavaScript- Ereignis onLoad im Formular die location.href auf den Wert des Feldes abändern, in dem zuvor die Bestim- mungs-URL zusammengestellt wurde. 
Eine weitere Technik ist, mit JavaScript und derEigenschaft window.opener auf Werte in Feldern auf der Portalseite zuzugreifen. Wie bei der vorherigen Technik stellt auch hier das JavaScript-Ereignis onLoad im Formular die Bestimmungs-URL zusammen und ändert den Wert von location.href. Als Ergebnis kann die Anwendung nach minimaler Verzögerung durch den Umweg über das Formular mit den benötigten Parametern gestartet werden. Noch mehr FunktionalitätEine weitere Möglichkeit, die Funktionalität diesesProzesses zu erweitern, ist es, einen Parameter in den Authentifizierungs-Agenten einzubringen. Der Parame- ter, der an den Agenten (zur Steuerung, welche ID für die Authentifizierung genutzt werden soll) übergeben wird, kann hier genutzt werden. Dies ermöglicht innerhalb der Anwendung den Einsatz von ACL-Rollen und Domino- Security zur Steuerung der vorhandenen Funktionalität und des Dokumentzugriffs. Gibt es beispielsweise Benutzer, die für die Anwendung nur Leseberechtigung haben und andere Benutzer, die auch über Schreibbe- rechtigung verfügen, lässt sich zur Steuerung des Authentifizierungsprozesses nun derselbe Agent verwen- den.
Wir wollen uns ansehen, wie das erreicht werden kann. Im Authentifizierungs-Agenten wird eine ZeichenketteIntegration einer Portal-Anwendung mit einer Domino-AuthentifizierungsanwendungTeil 1 des Artikels ist in der Juliausgabe 2005 der NEWSolutions erschienen. In diesem zweiten Teil des Artikels geht der Autor darauf ein, wie der Benutzer zu der Web-Anwendung weitergeleitet wird.IT-MANAGEMENT DominoAutomatisierte Domino-Authentifizierung im Web, Teil 2VONJAMESLOWES benutzt, um den Wert des Parameters aus Query_String zu übernehmen. Über eine case- oder If-Anweisung wird bestimmt, welche ID an die Anweisung Print übergeben werden soll. Die
URL für dieses Beispiel wäre: portal.nsf/autoLogin?openAgent&id=1&.’DeclarationsDim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim LoginType As String Dim intFound As IntegerSet db = session.CurrentDatabase Set doc = session.DocumentContextCall agentLog.LogAction(„Setvariables…“)’find where the ID info starts intFound=Instr(doc.Query_String(0),“&id=“) +3’return the first character after the „&id=“ loginType=Left(Right(doc.Query_String(0), Len(doc.Query_String(0))-intFound), 1)If (loginType = „l“) Then ‚Generic ID #1Print „[/names.nsf?Login&Username=Generic ID1&Password=MySecret&RedirectTo=/portal.nsf/autoLoginForm?openform&]“Elseif (loginType = „2“) Then ‚Generic ID #2Print „[/names.nsf?Login&Username=Generic ID2&Password=MySecret&RedirectTo=/portal.nsf/ autoLoginForm?openform&]“End IfIn dem zuvor gezeigten Beispiel wird die GenericID1 zur Authentifizierung des Benutzers verwendet.
Die Funktionalität lässt sich noch erweitern, damit sie auch für Domino-authentifizierte Benutzer eingesetzt werden kann. In der Portal-Umgebung können sowohl (nicht Domino authentifizierte) externe Benutzer als auch (Domino authentifizierte) Unternehmensmitar- beiter den gleichen Bereich gemeinsam nutzen. Damit die Anwendung generische Logins ebenso abhandeln kann wie Logins von Mitarbeitern, muss der Authenti- fizierungs-Agent geringfügig verändert werden. In dieser Version ist die Rückgabe des ersten Zeichensvon besonderer Wichtigkeit.
Ist dieses erste Zeichen keine Ziffer, enthält die Zeichenkette loginType den inDomino verwendeten Name der Person. Die Abfrage des Benutzerpasswortes aus Domino ist möglich, wird aber hier nicht weiter erörtert. Die URL für dieses Beispiel wäre: portal.nsf/ autoLogin?openAgent&id=John%20Doe&.’DeclarationsDim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim loginType As String Dim intFound As IntegerSet db = session.CurrentDatabase Set doc = session.DocumentContextCall agentLog.LogAction(„Set variables…“)’find where the ID info starts intFound=Instr(doc.Query_String(0),“&id=“) +3’return the first character after the“&id=“loginType=Left(Right(doc.Query_String(0),Len(doc.Query_String(0))-intFound), 1)If Not Isnumeric(loginType) Then’remove spaces (%20) from url coding by using QueryStringDecoded intFound=Instr( doc.Query_String_Decoded(0),“&id=“) +3’get the entire string past id= loginType=Right( doc.Query_String_Decoded(0), Len( doc.Query_String_Decoded(0))-intFound)End IfIf (loginType = „l“) Then _Generic ID #lPrint „[/names.nsf?Login&Username=Generic ID1&Password= MySecret&RedirectTo=/portal.nsf/ autoLoginForm?openform&]“Elseif (loginType = „2“) Then _Generic ID #2Print „[/names.nsf?Login&Username=Generic ID2&Password= MySecret&RedirectTo=/portal.nsf/ autoLoginForm?openform&]“Else’we have a name for an employee whoIT-MANAGEMENT Domino James Lowes (jameslowes@lycos.com) ist Manager für die Internetanwendungen der American Contact Bridge League.
Er arbeitet seit 1997 mit Lotus Notes und hat sich auf die Entwicklung Web-basierter Anwendungen spezialisiert.‘ has an ID on the Domino system Print „[/names.nsf?Login&Username=“ & loginType & „&Password= MySecret&RedirectTo=/portal.nsf/ autoLoginForm?openform&]“End IfPositive ErfahrungenDas Einbringen all dieser Techniken in einen Prozesskann einer Web-basierten Anwendung sehr nützliche Funktionalität verleihen. Dies macht Anwendungen ein- erseits benutzerfreundlicher, während es andererseits Anwendungsentwicklern den Einsatz der leistungsfähi-gen Domino Security Tools gestattet.


