我问一个在这里类似的问题而回,但所有的答案都提供OpenID的是好的,但它不要求身份验证的服务,不使用它(如Eventbrite在线上售票)工作。
说我想创建一个应用程序,列出了从事件BRITE您的活动,他们的分析(其中包括Eventbrite在线上售票)。 任何人都可以注册该服务列出他们的活动。 但由于Eventbrite在线上售票不具备的OpenID身份验证,我需要以某种方式获得和Eventbrite用户登录名和密码。
一些可能的解决方案是:
- 在YAML商店凭据这样 。 很容易被破解。
- 具有用户凭据进入我的网站上的形式,我的凭据保存到我的数据库,并利用它们来登录和Eventbrite。 很容易被破解。
- 有用户在输入凭据,我直接通过他们和Eventbrite不保存,我响应报头的Cookie保存到数据库中,当他们到期,让他们重新登录。 这是很容易被破解?
这个假设的服务还希望自动检查事件(通过cron说),所以它不依赖于用户通过浏览器去我的网站。 所以,饼干或credientials需要存储在某个地方。
问题是, 询问的保密性和安全性这类似的问题后,它听起来就像你永远不应该建立一个应用程序,做什么我描述。 我们有了一些办法建设这样的事情是好的。
那是什么呀? 我在想什么? 难道是好去与#3,保存的cookies(但仍然需要用户通过我发送和Eventbrite的表单提交他们的电子邮件/密码)? 什么是问题的一个可接受的解决方案?
没有做到这一点的安全方式。 您可以采用的变通方法,但仅此而已。
- 在YAML存储密码或XML明文肯定是出
- 事实上,即使加密和存储密码是错误的。 您的应用程序将需要一种方式来解密密码,因此攻击者也可以解密密码。
- 存储密码推荐的方法是盐+哈希,而是因为它变得不可恢复的,这是你的情况也没用。
- 由于2和3的,无论你在哪里存储用户凭据,你是脆弱的。
- 存储代替密码饼干是一个更好的主意。 但同样,这涉及到的密码通过您的网站,这是不好的打算。
鉴于您的情况,存储的cookie是一个更好的办法。 使用HTTPS贯穿始终,甚至在您的网站。 虽然它不太理想,你和你的用户应该意识到这一点。
Eventbrite在线上售票最近发布说明新文档如何实现跨站用户身份验证的OAuth2.0 。 我会建议使用我们的基于javascipt的-OAuth2.0的小部件 ,用于存储用户的身份验证令牌在默认浏览器的localStorage的。 由于身份验证令牌存储在用户的浏览器,并从其他领域所访问被阻止,这是不可能会有任何安全漏洞。
需要电子邮件地址和密码连击这个认证方案是完全可以避免的。
大多数网站只支持直接登录,与原来的明文密码,所以你必须获得,储存和提供这一点。 我会永远相信你这一点。 与概念的问题是,你需要将密码提供给第三方。 该解决方案是不涉及第三方,例如我的浏览器是在存储和自动为我填写密码不错(我的硬盘驱动器是保护过的密码)。 他们是许多其他密码钱包的应用程序了。 我不会通过订阅获得任何使用你的服务。
之前进入这样的企业,考虑你将要在1号目标。 Facebook,谷歌是令人难以置信的偏执安全,花费了大量的时间,金钱和精力,以保持登录安全。 你有相同的资源? 那么你是一个更好的目标。 此外,通过黑客攻击你的服务,他们立即得到多个帐户,您的用户密码等,也看到谁总是重复使用密码。
为了与Eventbrite在线上售票API的工作,我建议你确保所有连接均通过SSL和您验证使用user_key而不是用户名和密码。
有关为Eventbrite在线上售票API认证的更多信息是在这里: http://developer.eventbrite.com/doc/auth/
:登录后,用户可以在这里找到自己user_key http://www.eventbrite.com/userkeyapi
这应该防止被拦截过线,或从本地数据存储读取用户名和密码信息。