Asp.net的OpendID安全提示

时间:2010-02-26 18:46:47

标签: c# .net openid

我刚刚在Asp.net MVC应用程序中使用OpenID,并想知道使用OpenID时存在哪些缺陷。我问的原因是因为我在使用一些OpenID实现时读了很多警告。大多数情况下,它是“不要使用该库!您只需要在网址中更改一个单词,并且您的网站对所有人开放!!!!”

我很可能最终会使用DotNetOpenAuth,但作为初学者,使用的一些热量似乎有点异国情调。这也是我提出这个问题的原因之一,因为无知不会使我的应用程序非常安全。

由于没有一个正确的答案,我希望提出这个问题'社区维基'是正确的做法。如果不允许这类问题,我会立即将其删除。

提前致谢,

Pickels

2 个答案:

答案 0 :(得分:1)

DotNetOpenAuth不是那些“改变一个词而且它已经坏了”的库之一。这是一个很好用的。

就术语而言:

  • ClaimedIdentifier 是新用户名。将其视为区分大小写,并确保在您基于它查找用户记录时,数据库会进行区分大小写的匹配。不要将http和https URL视为与同一用户完全相同 - 它们必须被视为完全不同。
  • 用户提供的标识符是用户在OpenID框中输入的文字字符串(如果有的话)。永远不要把这里的任何东西当作权威对待,也不要在此基础上做出安全决定。等到你从响应中得到一个ClaimedIdentifier,并根据它和ProviderEndpoint做出决定。
  • OP端点(也称为提供商端点)是OpenID提供商的OpenID端点的URL,如果您只想信任某些提供商,则可以对此做出决定。
  • 如果您请求这些属性,
  • 声明,例如电子邮件地址和用户的全名可能来自提供商。但除非声明来自您信任的OP端点,否则永远不要相信这是正确的。

答案 1 :(得分:1)

我不能谈论现有的.NET项目,但我可以为初学者提供基础知识的解释。虽然有一些边缘情况和可选功能,但基本流程并不难理解。支持OpenID的服务提供商(“依赖方”或RP)有效地将身份验证的密码检查功能卸载到第三方网站(“身份提供商”或IdP)。这种IdP的(最终用户特定的)URL由最终用户指定,并且(从RP的角度来看)该URL是最终用户的“标识符”。 RP对标识符URL进行服务器端调用以获取活动令牌,然后将浏览器退回到标识符URL。现在最终用户正在与IdP进行交互,当IdP满意时,它会将浏览器反弹回RP,并在查询字符串上添加一些信息以指示成功。瞧。

由于用户可以决定谁验证他们的身份,他们甚至可以选择使用一些完全不同的身份验证机制的服务,例如在手机上调用它们,甚至通过连接的设备需要指纹。或者,如果他们不信任世界上任何其他人,他们可以编制自己的IdP并完全控制他们的身份。

很多时候(不是在SO上),RP实际上会在整个服务中公开标识符,例如:作为最终用户的用户名。因此,使用虚荣URL或博客URL或比http://superopenidprovider.com/adjad9va8ivasdlkjnq8t7更有意义的东西是时髦的。因此存在IdP委派的概念,通过该委托,在其主页/博客上包括适当的LINK标签http://superopenidprovider.com/adjad9va8ivasdlkjnq8t7的最终用户可以使用其主页/博客URL作为其标识符。 RP必须了解此功能并采取适当的措施。

高级概念

大致来自Wikipedia。这些比安德鲁的答案更具概念性。

  • 最终用户希望向服务提供商声明其身份的人。
  • 身份与单个最终用户相关的特定于服务提供商的信息。即最终用户识别并希望保护的所有内容。
  • 标识符最终用户提供的最终用户特定URL,可以使用该URL启动OpenID身份验证。
  • 依赖方(RP)使用OpenID确定最终用户身份声明真实性的服务提供商。
  • 身份提供商(IdP)网站,可以响应来自依赖方的OpenID身份验证请求,通常通过网络表单和Cookie与最终用户进行基于密码的质询/响应。 IdP通常支持多个用户,因此允许最终用户通过站点注册和管理标识符。但是,个人可以托管他们自己的IdP,只能自我验证。