2009-04-24 6 views
5

übertragen, die Formularauthentifizierung verwendet. Nennen wir diese Anwendung "Foo". Ich erstelle eine andere ASP .NET-Anwendung namens "Bar".sicher Benutzer von einem ASP .NET-App Ich habe eine Web-Anwendung ASP .NET Another

Was will ich passieren haben, ist der Benutzer in Foo, klickt dann einen Link, der sie zu einer Seite in der Bar-Anwendung erfolgt. Die Bar-Anwendung sollte nicht erfordern, dass sich der Foo-Benutzer erneut anmeldet. Die Foo-App sollte das Sicherheits-Ticket an die Bar-App übergeben und dann kann der Benutzer sein Geschäft in der Bar-App erledigen.

Ich möchte auch Zugriff auf die Bar App beschränken. Wenn also ein Benutzer versucht, auf die Bar-App zuzugreifen, ohne sich vorher einzuloggen, werden sie zur Foo-Anmeldeseite weitergeleitet.

Ist das möglich? Wenn ja, wie setze ich das um?

+0

Ausgezeichnete Frage, ich bin froh, es auf Stackoverflow zu sehen! +1! –

Antwort

2

Ich habe einmal dieses und es war zwischen einer PHP-Website und einer ASP.NET-Website (mir die ASP.NET Entwickler zu sein, aber einige Bits über PHP zu wissen).

Wenn App1 der Einstiegspunkt für den/die Benutzer ist, sollte App1 bei der Anmeldung ein Schlüssel/Wert-Paar für diesen Benutzer erstellen, das aus dem Benutzernamen und einem generierten Schlüssel (z. B. einer GUID) besteht. Programmatisch sollte es mit App2 kommunizieren und diesen Schlüssel senden (zB einen Hintergrund-Thread starten). Angenommen, Benutzer JohnDoe meldet sich erfolgreich bei App1 an.

App1 einen Schlüssel erzeugt (3l3kjlk3j4lkj34, JohnDoe) und sendet sie über eine Art von Kommunikation zu App2 (beispielsweise über HTTP ruft eine URL wie www.app2.com/SetTempKey.aspx?userId=JohnDoe & key = 3l3kjlk3j4lkj34 - eine Seite, die aus Sicherheitsgründen nur Anfragen von einer bestimmten IP erlauben würde.

App2 wird die temporäre Zugriffsschlüssel empfangen und speichern. Nehmen wir an, App2 hat die Anmeldeseite unter www.app2.com/login.aspx.

In App1 erzeugen Sie einen Link zu www.app2.com/login.aspx?tempKey=3l3kjlk3j4lkj34 mit einem anständigen Label wie "Go to App2". Wenn der Benutzer auf den Link klickt, wird die Seite login.aspx in app2 aufgerufen. Überprüfen der Querystring auf das Vorhandensein der tempKey Querystring-Parameter und dann die Gültigkeit des Schlüssels in den temporären Schlüssel App2 gespeicherten überprüft, dass diese WIRKLICH JohnDoe ist.

App2 loggt ihn einfach durch Aufruf von FormsAuthentication.RedirectFromLoginPage ("JohnDoe", true) (zuerst der Benutzername und dann, wenn der formsAuth-Cookie persistent/not_session_lived sein sollte).

... und das ist es ziemlich viel.

+0

OK. Ich denke, das könnte funktionieren. Wie würden Sie vorschlagen, den Schlüssel ablaufen zu lassen? Würden Sie das Ablaufdatum in Ihrem temporären Speicher speichern und dann überprüfen, ob App2 die Gültigkeit des Schlüssels überprüft? Was denken Sie? –

+0

Eine einfache Ablaufrichtlinie besteht darin, die Schlüssel im Cache-Objekt zu speichern. Wenn Sie sie einfügen, können Sie den Ablauf entweder auf gleitenden oder absoluten Ablauf setzen. (Das Cache-Objekt ist der HttpRuntime.Cache) –

+0

Wenn Sie zusätzliche Informationen benötigen, können Sie mich kontaktieren. In meinem Profil findest du meine Email Adresse. Viel Glück! –