我开发了一个asp.net Web应用程序,用户可以通过提供用户名密码来访问和登录。现在我必须开发一个Windows窗体应用程序,用户也可以使用与我的Web应用程序相同的凭据登录。通过单击应用程序中的按钮,我希望它打开浏览器并将用户导航到Web应用程序并使用相同的凭据自动登录到我的Web应用程序。但我的问题是如何将凭据传递给我的网络应用程序?
我正在使用Process.Start(" http://localhost:8080/myAppLogin.aspx")来打开浏览器并加载我的登录页面。我可以使用加密格式传递查询字符串中的凭据,但这听起来并不像是一种安全的方法。我想用更安全的方法将凭据传递到我的网页。
有什么建议吗?
此问题编辑错误,并在其中丢失了一些有意义的信息。我已经重新编辑了下面的问题
修改
我开发了一个asp.net Web应用程序,用户可以通过提供用户名密码来访问和登录。现在我必须开发一个Windows窗体应用程序.Win Form应用程序在我的Win窗体应用程序的File.There&sa按钮中包含用户的Web应用程序凭据,我希望用户登录我的Web应用程序单击此按钮例如,通过单击Win Form应用程序中的按钮,我希望它打开浏览器并将用户导航到Web应用程序并自动登录到我的Web应用程序。但我的问题是如何将凭据传递给我的网络应用程序?
我正在使用Process.Start("http://localhost:8080/myAppLogin.aspx")
打开浏览器并加载我的登录页面。我可以使用加密格式传递查询字符串中的凭据,但这听起来并不像是一种安全的方法。我想用一些更安全的方法将凭据传递给我的网页。
有什么建议吗?
注意:我的Win表单应用程序无法访问我的Web App数据库。
答案 0 :(得分:1)
解决方案1:假设你想推出自己的
好的,所以我假设WinForms应用程序和ASP.NET应用程序都可以访问您提到的可以从其中任何一个登录的相同数据库。
因此,在这种情况下创建一个包含以下字段的表AuthTokens:
的authToken 用户名
创建WinForms和ASP.NET应用程序都知道的预共享密钥。
在Winforms应用中,照常对用户进行身份验证。验证成功后:
将记录添加到AuthTokens表:
INSERT INTO AuthTokens(AuthToken,UserName)VALUES(authToken,userEncrypted)
然后使用authToken作为标题或正文(您的选择)的一部分调用POST“http://localhost:8080/autoLogin”,并使用PostRedirectGet pattern将请求发送到WebForms应用程序。
然后在WebForms应用程序中:
注意:
无论你做什么,都要确保在实施过程中要小心,因为很容易弄错。
扩展:
解决方案2 - 使用OAuth专为您描述的方案设计。
解决方案2.1 - 实施您自己的身份验证服务
例如https://github.com/IdentityServer/IdentityServer3,但还有其他人。
解决方案3 - 查找将为您进行单点登录和用户管理的SaaS解决方案
Google将成为您的朋友,因为我不会在不违反SO政策的情况下推荐任何内容。
答案 1 :(得分:-1)
TheEdge解决方案适合我。我在我的场景中实现了如下解决方案
Step1 我在Web App数据库的Users表中添加了两列,(i)AuthToken(ii)AuthDateTime。
Step2:我在我的网络应用程序中托管了一个可以接受并返回字符串的Web服务
第3步:我的Windows窗体应用程序将用户名密码字符串加密为字符串,并发送到我的Web应用程序中托管的Web服务。
Step4:我的网络服务收到字符串并将其解密为UserName和Password字符串并验证用户。
步骤5:成功验证后,我创建一个哈希码值(Auth Token)和一个当前的DateTime对象,并将其插入到该用户的用户表中。并将此AuthToken HashCode返回到我的Windows窗体应用程序。
Step6:我的表单应用程序收到AuthToken,并将此Token + UserName发送到我的Web应用程序的查询字符串中。
Step7:我的Web应用程序在查询字符串中收到用户名和令牌,并根据令牌值验证用户名,并在Auth Datetime的范围内,成功验证后,让用户登录到应用程序,并通过将AuthToken和AuthDateTime值设置为对该用户为null来更新用户表。