Tag: authentication

5位密码比大多数密码更好吗?

这是多年来一直困扰我的事情:为什么大多数在线服务都高度重视密码的熵 ,将其作为一种安全措施,并在用户select密码时加以执行? 在阅读“强大的Web密码完成任何事情”文章后,我决定提出这个问题。 (当然还有经典的Dilbert卡通 )。 在线网站的典型政策是至less需要6位或8位数字的大写+小写+数字密码。 这个长度与暴力破解的难度有些相关,比如从哈希中恢复密码。 但是猜测发生在网上的典型方式是有人试图login到服务器,经过几次尝试就可以自由拒绝。 让我们想象一下,例如,我们正在使用全数字PIN来保护一些中等规模的服务。 人们立即想到了4位或6位的引脚,但这可能不是一个好主意,因为太多的人会试图进入孩子的生日,这本质上是一个公共知识。 所以,这是我的5位密码build议。 我为每个用户保留一个“可能的攻击”标志。 用户login正确 – >确定 否则,保持https会话,并允许2更多的尝试 用户login – >确定 否则,在他们之前rest5分钟再次尝试2次 用户login – >确定 用户中断会话 – >设置标志 用户打断会话,但稍后正常login:向用户提供对话框并允许清除标志 用户用尽了上面的尝试:用链接发送电子邮件; 允许清除标志 如果月内总共有100多个标志,设置全球“可能攻击”标志,这要求没有cookie的人回答安全问题 在某些情况下自动清除用户标志(例如,用户最终从同一台计算机login) 假设用户名是已知的(请注意大多数站点不会这样)。 对一个用户的暴力攻击是无望的 – 5次尝试后你被locking,所以你有1/200000的机会。 如果您在一个月内尝试猜测密码超过200次,则标志消失,您什么也得不到。 如果您每月尝试<200个用户,一年之后,您有一个用户的几率不足1% networking钓鱼,病毒,社交工程或其他任何事情都会让你感觉好多了。 网站的大小只有在没有得到误报的情况下才有意义,那就是真正忘记密码的用户(假设每月1%),恢复它,但是不要清除标志(比方说1%的那些),当你不能自动清除标志(比如说10%)。 这使得每10 6个用户每月有10个预期的误报标志,这意味着一个中等规模的网站进入“恐慌”模式的可能性相当低,反正也不是那么糟糕。 我相信这个scheme是非常实际的。 这里有一些明显的第一个事实(更新) : 好处 :PIN更容易记住。 我相信这是一个很大的好处,因为现在可以要求用户记住你生成的密码。 我相信大多数人比任何其他types的随机密码记得5个随机数字更好。 折衷 :如果你的攻击者知道散列的PIN和盐,哈希将不会有太大的帮助。 这是有可能的,如果有人闯入你的数据库, 并知道你的腌制过程。 不过,我相信在这种情况下,标准的密码熵也无济于事。 好处 :记住随机5位数字比随机字母数字密码更快乐; […]

在Ember.JS应用程序中强制执行用户/身份validation状态的最佳方法

在我的第一个EmberJS应用程序工作。 整个应用程序需要一个用户login。我试图包围我的头周围的最佳方式来强制用户现在login(当页面最初加载时)和将来(当用户注销并没有刷新)。 我有处理用户身份validation挂钩 – 现在我有一个呃数据模型和相关的存储,连接,处理授权用户和创build用户“会话”(使用sessionStorage)。 我不知道该怎么做的是强制用户在跨路由转换时进行身份validation,包括根路由中的初始转换。 我在哪里把这个逻辑? 如果我有一个身份validation状态pipe理员,我该如何将其绑定到路由? 我应该有根路由之外的auth路由吗? 注意:让我知道这个问题措辞不好,或者我需要更好地解释,我会很乐意这样做。 编辑:我最终做了一些我认为更多的呃,尽pipe可能是一个混乱的实现。 我有一个auth statemanager存储当前用户的身份validation密钥,以及当前的状态。 无论什么时候需要身份validation,只需要向身份validationpipe理员请求身份validation,然后传递callback函数以使用身份validation密钥运行。 如果用户没有login,它会拉起login表单,直到用户login为止。 这是我正在使用的代码的一些select部分。 需要清理,我遗漏了一些东西。 http://gist.github.com/3741751

单页应用程序的用户身份validation?

我开发了一个单一页面的应用程序原型,在前端使用Backbone,并从服务器上的精简RESTful API消耗数据。 来自沉重的服务器端应用程序开发(PHP和Python),我真的很喜欢用厚的客户端MVC新的不同的devise方法,但很困惑如何最好的限制应用程序login身份validation的用户。 我更喜欢将应用程序本身放在login后面,并且还希望除了站点的本地login之外,还最终实现其他types的login(openid,fb connect等)。 我不清楚这是怎么做的,一直在寻找 – 但是找不到信息让我很清楚。 总的来说,当前注册用户的最佳做法是什么,并要求他们login才能使用您的单页面应用程序? 一旦用户login,api请求如何validation? 我可以存储一个会话,但是如何在API调用中检测此会话,还是在每个API调用中都必须传递一个令牌? 任何答案,将不胜感激!

HTTP规范:代理授权和授权标头

所以我试图实现以下scheme: 应用程序受基本身份validation保护。 假设它在app.com上app.com 应用程序前面的HTTP代理也需要身份validation。 它在proxy.com上proxy.com 因此,用户必须为同一请求中的代理和应用程序提供凭证,因此他具有不同的用户名/密码对:一对用于对该应用程序进行身份validation,另一个用户名/密码对以对代理进行身份validation。 在阅读规范后,我不太确定我应该如何实现这一点。 我想要做的是: 用户在没有任何authentication的情况下向代理发出HTTP请求。 代理服务器应答“ 407 Proxy Authentication Required并以"Proxy-Authenticate: Basic realm="proxy.com"的格式返回Proxy-Authenticate标头。 问题 :这个Proxy-Authenticate头是否正确设置? 客户端然后使用Proxy-Authorization标头重试请求,即代理username:password的Base64表示。 这次代理validation请求,但是应用程序回答401 Unauthorized头。 用户由代理进行了身份validation,但不是由应用程序进行身份validation。 该应用程序将WWW-Authenticate头添加到响应中,如WWW-Authenticate: Basic realm="app.com" 。 问题 :这个头值是正确的吗? 客户端再次重试该请求,同时使用Proxy-Authorization标头和Authorization标头,该应用程序的username:password使用Base64表示。 此时,代理成功validation请求,并将请求转发给validation用户的应用程序。 客户终于得到回应。 整个工作stream程是否正确?

Android客户端的AccountManager中的AuthToken不再工作

我很恼怒 我正在尝试使用Java中的Google App Engine作为服务器,为Android构build基于回合的多人在线游戏。 他们似乎是一个完美的合体。 Android需要一个Google帐户,GAE使用Google帐户进行身份validation,同时免费且可扩展。 所以在假期之前,我可以使用Android 2.0中新的AccountManager API从我的Android客户端获取身份validation到我的GAE应用程序。 以下代码允许您访问用户的Google帐户的AuthToken,然后将其用于身份validation,以便用户不必手动input他们的帐户用户名和密码: AccountManager mgr = AccountManager.get(this); Account[] accts = mgr.getAccountsByType("com.google"); Account acct = accts[0]; AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(acct, "ah", null, this, null, null); Bundle authTokenBundle = accountManagerFuture.getResult(); String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString(); 然后,我可以将生成的AuthTokenstring附加到适当的URL并获得一个有效的cookie,然后可以用于所有进一步的请求。 唯一的事情是,上个星期某个时候,它停止了为我工作。 现在,当我尝试从上面的代码中使用AuthToken时,我没有得到一个返回的cookie,我的代码抛出一个NullPointerException的缺less的cookie。 当我回到旧的方式,当用户手动input他们的Google用户名和密码,我从“ https://www.google.com/accounts/ClientLogin ”获得AuthToken,它工作得很好。 请告诉我,有人使用用户手机上的Google帐户中的AuthToken为Google App Engine应用程序构build了一个Android客户端,并告诉我为什么这不再起作用。 我真的想做这个工作。 我的select是要求用户input他们的凭据(这是笨重的,他们不应该这样做),或者与服务器的另一个解决scheme。 提前致谢。

validation用户使用omniauth和Facebook的轨道API?

我构build了一个Rails API,并成功构build了一个用户使用Omniauth Identity进行身份validation的方法。 我们只需从客户端发送auth / identity / callback,传入一个auth_key和密码。 服务器然后返回一个守门员令牌,然后用户从此使用门禁令牌来访问应用程序并识别他们自己。 这张图解释了这一点: 我们现在希望从客户端实现Facebooklogin,但在理论和实践上都难以实现。 在一个带有Omniauth Identity的简单Rails应用程序中,您只需调用auth / facebook,但是如果我们在客户端中放置了一个链接,就会调用服务器,然后服务器就会logging: INFO — omniauth: (facebook) Request phase initiated. 该应用程序在Facebook中设置正确的ID和秘密,所以也许login提示返回到服务器? 虽然链接authentication,我感到困惑。 任何帮助感激地感谢!

基于REST API的HTTP基本身份validation

我是Restful API的概念的新手。 我正在为在线商店devise一个宁静的api。 我没有正确理解ssl基本httpauthentication的概念。 这是否意味着,对于每一个请求,用户将不得不再次input他/她的用户名和密码? 有人可以请详细解释它是如何运作的,以及如何使用它? 提前致谢。

Gmail启用双因素身份validation时,发送电子邮件失败

我在我的Web应用程序中使用我的Gmail帐户和smtp.gmail.com来testing和发送电子邮件。 当我的Gmail帐户的两个身份validation为开启时,它无法发送电子邮件,但是当我closures我的Gmail帐户的双重身份validation时,Web应用程序成功发送电子邮件。 欣赏任何forms的build议。

如何在Apache 2.2中完成“AuthType None”

http://httpd.apache.org/docs/trunk/mod/mod_authn_core.html#authtype谈到“AuthType None”,并且有一个很好的例子,正是我需要做的 – 不幸的是,它似乎是2.3 /2.4。 在2.2中是否有任何等同的function? authenticationtypesNone禁用authentication。 启用身份validation时,通常由每个后续configuration部分inheritance,除非指定了不同的身份validationtypes。 如果authentication部分的子部分不需要authentication,则可以使用authenticationtypesNone; 在以下示例中,客户端可以在不进行身份validation的情况下访问/ www / docs / public目录: <Directory /www/docs> AuthType Basic AuthName Documents AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords Require valid-user </Directory> <Directory /www/docs/public> AuthType None Require all granted </Directory>

何时通过Facebook的新Android SDK 3.0请求权限?

随着Facebook的新的Android SDK 3.0(前几天发布),authentication过程发生了变化。 那么你如何申请阅读许可,如“friends_hometown”? 下面的代码是我如何做到这一点 – 但我很确定这不是你应该这样做的方式: 版本1: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Session.openActiveSession(this, true, new Session.StatusCallback() { // start Facebook login @Override public void call(Session session, SessionState state, Exception exception) { // callback for session state changes if (session.isOpened()) { List<String> permissions = new ArrayList<String>(); permissions.add("friends_hometown"); session.requestNewReadPermissions(new Session.NewPermissionsRequest(FBImport.this, permissions)); Request.executeGraphPathRequestAsync(session, "me/friends/?access_token="+session.getAccessToken()+"&fields=id,name,hometown", new Request.Callback() […]