我正在为我的互联网应用实施ASP.Net MVC的OAuthWebSecurity。我可以使用Facebook,Twitter,Google和Yahoo成功进行身份验证。我第一次对这些中的每一个进行身份验证时,都会被发送到他们各自的站点来授权我的应用程序。有道理。
但是,在Facebook,Google和Yahoo的后续身份验证尝试中,我没有收到提供商的授权屏幕。看来Twitter每次都会问我。
这是一个问题吗?如果另一个人使用我的电脑并使用我的应用程序与Facebook身份验证将他们作为我身份验证? oAuth结果是如何缓存的?你如何清除它们?
感谢。
答案 0 :(得分:3)
实际上比你描述的更糟糕。任何后续用户都可以访问提供商处的用户帐户(例如google / facebook等),而不仅仅是您的应用程序。
你找到了解决这个问题的好方法吗?我在下面提供了一些建议,但我希望有更好的选择/正在筹备中。
从我的角度来看,你所描述的是整个系统中的一个真正的问题和一个漏洞。使用asp.net MVC,正如您所指出的那样,WebSecurity.Logout()不会将用户从提供程序中注销。
在我提供一些选项后,我会说明为什么我认为这是一个问题。这两种解决方案的关键在于,如果用户退出其提供商,那么他们将无法再重新进行身份验证而无法登录您的网站,并且不会让其提供商用户帐户处于打开状态。
将它们从提供商处注销。如果他们的提供者是Facebook,那么请关注the instructions at this answer。如果提供商是谷歌,您可以重定向到“https://accounts.google.com/Logout”。不幸的是,这有点笨拙,并且提供商之间会有所不同。
当用户点击您网站上的“退出”时,会显示一条消息,指示他们应该从提供商处注销,然后直接转到提供商网站。例如,如果提供商是谷歌,那么当他们点击注销时,会显示一条消息,例如“请记住从谷歌注销”,然后将其定向到www.google.com。这实际上不会记录它们,但至少会保持一致。这是我使用的方法,直到我找到更好的东西。它并不理想,因为它会将它们带出您的网站,但至少它们不会受到严重安全漏洞的影响。
以下示例说明了我认为让用户登录到提供程序的原因很糟糕的原因: -
我认为应该有一个退出社交提供者的选项。我不确定这是否可以在OAuthWebSecurity中完成,或者需要在open-id / oauth实现中进行更改。我不认为让代码单独注销每个提供程序是一个非常好的选择。我不同意这是oauth的工作方式,我们应该使用它或使用我们自己的身份验证和授权。作为OAuthWebSecurity功能的使用者来简化我的应用程序的登录过程,我现在有更多的工作要做,并削弱了用户的安全性。此外,退出提供程序解决问题的事实表明有一种方法可以解决这个问题。
答案 1 :(得分:0)
令牌撤销意味着您的用户每次都必须授予您的应用以共享数据的权限;他们不应该保持给予许可。
使用Outh,你将登录过程外包给FB等,如果你登录到FB,那么你也登录到你的app(又名单点登录)
...转到您的fb帐户并注销然后再次启动您的应用程序,它现在应该提示并允许您通过另一个FB帐户登录(如果需要)。
如果你想以你的身份继续登录FB,但是以其他人的身份登录你的应用,那么OAuthWebSecurity可能不是你最好的设计选择。
答案 2 :(得分:0)
每个提供商必须包含" SignOutUri"在响应中,即ExtraData ..会有多难?