2012-03-15 65 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执行。

我希望这是有道理的,它有帮助

相关问题