Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net的OpendID安全提示_C#_.net_Openid - Fatal编程技术网

C# Asp.net的OpendID安全提示

C# Asp.net的OpendID安全提示,c#,.net,openid,C#,.net,Openid,我刚开始在Asp.NETMVC应用程序中使用OpenID,我想知道在使用OpenID时有哪些陷阱。我之所以问这个问题,是因为我在使用一些OpenID实现时读到了很多警告。大多数情况下,它就像“不要使用那个库!你只需要更改url中的一个单词,你的网站就可以向任何人开放!!!!” 我很可能最终会使用DotNetOpenAuth,但作为初学者,使用的一些therm似乎有点陌生。这也是我提出这个问题的原因之一,因为无知不会使我的应用程序非常安全 既然没有一个正确的答案,我希望把这个问题称为“社区维基”是

我刚开始在Asp.NETMVC应用程序中使用OpenID,我想知道在使用OpenID时有哪些陷阱。我之所以问这个问题,是因为我在使用一些OpenID实现时读到了很多警告。大多数情况下,它就像“不要使用那个库!你只需要更改url中的一个单词,你的网站就可以向任何人开放!!!!”

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

既然没有一个正确的答案,我希望把这个问题称为“社区维基”是正确的做法。如果这类问题不被允许,我会立即删除它

提前感谢,


Pickels

DotNetOpenAuth不是那种“改变一个单词,它就坏了”的库。这是一个很好的使用

就术语而言:

  • ClaimedIdentifier是新用户名。将其视为区分大小写,并确保在基于它查找用户记录时数据库进行区分大小写的匹配。不要将HTTP和HTTPS URL视为与同一用户相同的东西——它们必须被视为完全不同。
  • 用户提供的标识符是用户在OpenID框中键入的文字字符串(如果有)。永远不要将这里的任何东西视为权威,也不要根据它做出安全决策。等待,直到您从响应中获得ClaimedIdentifier,并根据它和ProviderEndpoint做出决定
  • OP Endpoint(又名Provider Endpoint)是OpenID提供程序的OpenID端点的URL,如果您只想信任某些提供程序,则可以就此做出决定
  • 如果您请求这些属性,则诸如电子邮件地址和用户全名等声明可能来自提供商。但是,除非声明来自您信任的OP端点,否则千万不要相信它是正确的
我不能谈论现有的.NET项目,但我可以为初学者提供基本的解释。尽管存在一些边缘情况和可选功能,但基本流程并不难理解。启用OpenID的服务提供商(“依赖方”或RP)有效地将身份验证的密码检查功能卸载到第三方网站(“身份提供商”或IdP)。最终用户指定指向此类IdP的(最终用户特定)URL,并且(从RP的角度来看)该URL是最终用户的“标识符”。RP对标识符URL进行服务器端调用以获取活动令牌,然后将浏览器反弹到标识符URL。现在,最终用户正在与IdP交互,当IdP满意时,它会将浏览器返回到RP,并在查询字符串上添加一些信息以指示成功。瞧

因为用户可以决定谁来验证他们的身份,所以他们甚至可以选择使用完全不同的身份验证机制的服务,比如打电话给他们,甚至通过连接的设备要求指纹。或者,如果他们不信任世界上的任何其他人,他们可以编写自己的IdP并完全控制自己的身份

很多时候(这里不是这样),RP实际上会在整个服务中公开标识符,例如作为最终用户的用户名。因此,使用虚荣URL或博客URL,或其他更有意义的URL是一种时尚。因此,存在IdP委托的概念,通过IdP委托,在其主页/博客上包含适当链接标签的最终用户可以使用其主页/博客URL作为其标识符。RPs必须了解此功能并采取适当的措施

高级概念

大概是从。这些比安德鲁的答案更具概念性

  • 最终用户希望向服务提供商声明其身份的人
  • 标识与单个最终用户相关的服务提供商特定信息。也就是说,最终用户认同并想要保护的所有东西
  • 标识符最终用户提供的特定于最终用户的URL,可以使用该URL启动OpenID身份验证
  • 依赖方(RP)使用OpenID确定最终用户身份声明准确性的服务提供商
  • 身份提供商(IdP)可以响应依赖方的OpenID身份验证请求的网站,通常涉及通过web表单和cookie与最终用户进行基于密码的质询/响应。IDP通常支持多个用户,因此允许最终用户通过站点注册和管理标识符。但是,个人可以托管自己的IdP,该IdP只能对自己进行身份验证