3

我有一个 ASP.NET 解决方案,它充当我客户的主要客户门户。在这个网站上,用户可以登录访问他们的重要财务信息等等。Users该网站使用自定义身份验证方案,根据本地数据库中的表检查用户的用户名(他们的电子邮件)和密码(salt-hashed) 。

我正在构建一个新的 MVC.NET 解决方案,它更像是一个 Web 应用工具,供这些相同的客户用于订购。我想重新使用 ASP.NET 门户的登录机制来对用户进行身份验证。目标是避免用户记住两次登录,甚至不必提供两次相同的登录。

我有哪些选项可以让登录到 ASP.NET 解决方案的用户自动通过 MVC.NET 解决方案进行身份验证?我在下面列出了一些想法,但这些想法是“坏的”还是有更优雅的解决方案?我喜欢你的意见。

  • 通用 Cookie 我可以创建 ASP.NET 站点创建和 MVC.NET 站点查找的通用 cookie。但这是否足够安全?
  • 查询字符串中 的令牌我可以在存储在本地数据库中的 ASP.NET 站点上创建一个令牌 id,然后在链接的查询字符串中传递到 MVC.NET 站点,该站点采用令牌 id 并根据同一个数据库。
  • 混合 两者兼而有之?
  • 其他? 有更好的主意吗?
4

4 回答 4

3

我最近使用OpenId做了一些非常相似的事情(主要区别在于它是公司内部的而不是外部客户) 。

.NET 的 OpenId 实现称为DotNetOpenAuth,它应该适合您的目的。

我确实花了一些时间来实施;但它工作得很好,非常灵活,而且非常安全。

有关 openid 的更多信息(来自Wikipedia):

OpenID 是一种开放标准,允许用户通过使用第三方服务的某些合作网站(称为依赖方或 RP)进行身份验证,从而无需网站管理员提供自己的临时系统并允许用户整合他们的数字身份。

用户可以使用他们首选的 OpenID 身份提供者创建帐户,然后使用这些帐户作为登录任何接受 OpenID 身份验证的网站的基础。OpenID 标准为身份提供者和 OpenID 接受者(“依赖方”)之间必须进行的通信提供了一个框架。2标准的扩展(OpenID 属性交换)促进了用户属性(例如姓名和性别)从 OpenID 身份提供者到依赖方的传输(每个依赖方可以根据其要求请求不同的属性集)。

OpenID 协议不依赖中央机构来验证用户的身份。此外,无论是服务还是 OpenID 标准都不会强制要求使用特定的方法来验证用户身份,从而允许使用从常见(例如密码)到新颖(例如智能卡或生物识别)的各种方法。

哦,如果您想要进一步的鼓励,Stack Exchange 会使用它!

@Jmrnet:回应您的最后评论:

也许我不清楚。OpenId 本身只是用于验证从一个位置到另一个位置的凭据(或多或少)。完全有可能实现为 SSO 模型,其中用户没有任何不同 - 他们不必选择提供商,或注册,或类似的东西。例如,在我的设置中,用户在门户网站中输入用户名和密码,然后单击按钮启动另一个由 OpenId 自动登录的站点。对用户来说没有什么不同!OpenId 可以与您能想到的任何初始身份验证模型一起使用(注意维基百科片段中的粗体部分)。

于 2013-03-15T15:32:49.507 回答
2

看看 SAML:

http://en.wikipedia.org/wiki/Security_Assertion_Markup_Language

它使用 XML 工作并支持加密。

于 2013-03-15T15:47:00.793 回答
0

您可以使用许多方法,Mansfied 描述的 OpenID 和 RandomUs1r 描述的 SAML。此外,您可以将相关信息存储在 localStorage 或会话中。我相信您应该将相关信息与会话一起存储。

将它放在查询字符串中是不安全的,因为如果我注册并登录,我会在 URL 中看到类似 UserID=1234 的内容。如果我将其更改为 UserID=1235 并且 ID 存在,那么我可以以其他用户的名义做一些事情。这称为身份盗用,应通过任何可能的方式加以防止。所以你永远不应该在你的 URL 中包含这种信息。此外,如果您存储用户的 id,您应该以某种方式对其进行混淆。例如,如果您将值存储在本地存储中,而不是 1234 存储 encrypt(1234, salt),则将保持用户操作的一致性。

于 2013-03-15T16:38:02.400 回答
0

我目前正在为同一个项目实施两个 SSO 解决方案。

一方面,我们正在与外部合作伙伴进行交互并使用 SAML。

另一方面,我们允许登录用户访问我们的 Sharepoint 并使用“查询字符串中的令牌”方法,因为我们相信 Sharepoint 可以访问我们的会员表。这种方法比处理 SAML 令牌要容易得多。

于 2013-03-15T15:38:40.767 回答