2012-03-15 64 views
0

我已經用C#編寫了一個需要用戶登錄的應用程序。在應用程序之間共享密碼

該應用程序包含三個子應用程序,並且如果用戶已經在一個應用程序中標識了自己,他們不應該登錄到其他應用程序。

用戶可以從主應用程序或單獨啓動子應用程序。目前我正在通過從主應用程序傳遞用戶名和密碼來解決它的命令行參數,但我相信必須有更好的方式來共享應用程序之間的信息。

每個應用程序是一個單獨的程序集。任何人?

+1

你如何驗證密碼? – 2012-03-15 07:59:25

+0

你在哪裏存儲這些密碼,以及如何驗證它?數據庫或配置文件? – 2012-03-15 08:00:07

+0

密碼存儲在一個加密的XML文件中,並通過共享服務進行驗證 – klashagelqvist 2012-03-15 08:02:04

回答

0

不知道這是否是你想要什麼,但我會把它保存到由啓動時的每個應用程序

0

我是新來這個東西檢查的(加密)文件,但我認爲這是一個簡單的答案爲此 - 製作一個由所有應用程序使用的標誌。區別在於你傳遞了一個標誌而不是登錄名/用戶名。 如果登錄成功,則標誌爲true,並且其他應用程序可以在未登錄的情況下啓動。一旦用戶註銷,標誌將立即變爲false。

2

您可能希望在應用程序之間擁有某種共享的身份驗證API,或者獨立於應用程序和所有應用程序的身份驗證服務。你還沒有寫過你如何實現登錄過程 - 所以它很難給出具體的建議

+0

感謝您的回答,基本上這就是我已經在做的事情,我會盡管像其他應用程序可以使用像Properties.Settings一樣的共享設置,但其他應用程序不能讀取主應用程序設置,我認爲 – klashagelqvist 2012-03-15 08:09:47

+0

在這種情況下,我可能會做一些像共享設置提供程序 - 就像這篇文章中描述的那樣:http://www.codeproject.com/Articles/136152/Create -a - 自定義 - 設置 - 提供對共享設定 – Michael 2012-03-15 08:13:06

0

我假設你將只需要在每個子應用程序中驗證1次,即你不驗證每次用戶選擇一個子應用程序中的不同功能。

1. Main App Loaded 
1a. Main App Authenticated 
1b. Set db.userSessionExpiry = DateAdd(Now + 10 minutes) (for the user inquestion) 
2a. User opens the sub app 
(you pass the username to subapp) or (sub app gets the winlogin user) or other 
2b. Sub app checks for the session expiry for this user 
2c. If the expiry time (from 1b) has gone past now, re-authenticate. 
2d. Set db.userSessionExpiry = DateAdd(Now + 10 minutes) (for the user inquestion) 

這種方式你不會傳遞密碼,並將身份驗證留給用戶。

想象一下,如果你的用戶已經開始了主要的應用程序和左(他的屏幕解鎖),你已經離開了一個開放的認證托克的其餘用戶訪問和工作的子應用

可以配置會話超時時間超過10分鐘(例如20分鐘作爲默認websession超時)

現在,如果您需要在功能級別(與啓動時相反)驗證用戶,則每次使用函數時都需要調用1b執行。

我希望這是有道理的,它有幫助

相關問題