Tag: authentication

使用passport.js在node.js中进行身份validation后,redirect到上一页

我试图build立一个使用node.js,express和passport.js的login机制。 login本身工作得相当不错,会话也很好地存储在redis中,但是在提示用户进行身份validation之前,将用户redirect到他所在的位置时遇到了一些麻烦。 例如,用户链接http://localhost:3000/hidden然后被redirect到http://localhost:3000/login但是我希望他再次被redirect到http://localhost:3000/hidden 。 这样做的目的是,如果用户随机访问一个页面,他需要首先login,他应该被redirect到/ login站点提供他的凭据,然后被redirect到他以前试图访问的网站。 这是我的login信息 app.post('/login', function (req, res, next) { passport.authenticate('local', function (err, user, info) { if (err) { return next(err) } else if (!user) { console.log('message: ' + info.message); return res.redirect('/login') } else { req.logIn(user, function (err) { if (err) { return next(err); } return next(); // <-? Is this line […]

devise的token_authenticatable安全吗?

我正在用Rails API构build一个简单的api,并且要确保我在这里的正确轨道上。 我使用devise来处理login,并决定去devise的token_authenticatable选项,它会生成一个API密钥,你需要发送每个请求。 我正在将API与骨干/木偶前端配对,并且通常想知道我应该如何处理会话。 我的第一个想法是将api密钥存储在本地存储或cookie中,并在页面加载时检索它,但是从安全angular度来看,存储api密钥的方式困扰了我。 通过查看本地存储/ cookie或嗅探任何经过的请求,并使用它无限地模拟该用户,将不容易抓住api密钥? 我目前正在重新设置每个login的api密钥,但即使这似乎很频繁 – 任何时候你login任何设备,这意味着你会登出每隔一个,这是一种痛苦。 如果我可以放弃这个重置,我觉得从可用性的angular度来看会有所改进。 我可能在这里完全错了(也希望是我),任何人都可以解释这种方式是否可靠地进行validation,如果不是一个好的select会是什么? 总体而言,我正在寻找一种方法,可以安全地保持用户loginAPI访问权限,而无需频繁强制重新授权。

使用AngularJS进行身份validation,使用REST API WS进行会话pipe理和安全问题

我开始用angularJS开发一个web应用程序,我不确定所有的东西都是正确的(客户端和服务器端)。 安全性基于单一login页面,如果凭证已选中,我的服务器将发回具有自定义时间有效性的唯一标记。 所有其他REST API都可以通过这个令牌访问。 应用程序(客户端)浏览我的入口点,例如: https : //www.example.com/home.html用户插入凭证并接收一个唯一标记。 这个唯一标记使用AES或其他安全技术存储在服务器数据库中,而不是以清晰的格式存储。 从现在开始,我的AngluarJS应用程序将使用此令牌对所有暴露的REST API进行身份validation。 我正在考虑在一个自定义的http cookie中临时存储令牌; 基本上,当服务器validation凭证时,它会发回一个新的Cookie Ex。 app-token : AIXOLQRYIlWTXOLQRYI3XOLQXOLQRYIRYIFD0T 该cookie具有设置的安全和HTTP Only标志。 Http协议直接pipe理新的cookie并存储它。 连续的请求将呈现cookie的新参数,而不需要pipe理和存储它的JavaScript; 在每一个请求,服务器使令牌失效,并产生一个新的,并将其发送回客户端 – >防止单一令牌的重放攻击。 当客户端收到来自任何REST API的HTTP状态401未经授权的响应时,angular度控制器清除所有cookie并将用户redirect到login页面。 我应该考虑其他方面吗? 将令牌存储在新的cookie或localStorage中更好吗? 任何提示如何生成一个独特的强大的令牌? 编辑(改进): 我决定使用HMAC-SHA256作为会话令牌生成器,20分钟有效。 我生成一个随机的32字节的GUID,附加一个时间戳,并通过提供一个40字节的密钥来计算HASH-SHA256。 由于令牌有效性非常小,因此获得冲突是不可能的。 Cookie将具有域和path属性以增加安全性。 不允许多login。

Git http – 安全地记住凭据

当通过HTTP(S)连接到远程存储库时,有没有办法让git记住我的凭证? 我已经尝试了在git-config详细描述的core.askpass方法来让外部脚本提供我的凭据。 虽然它的效果很好,但用户名和密码仍然以纯文本的forms存储在小shell脚本中。

nodejs护照authentication令牌

我正在编写一个nodejs应用程序,我想用它作为一个web应用程序以及一个API提供程序。 一旦用户通过身份validation,我想为该用户分配一个令牌用于后续请求。 这对Web应用程序的护照很有效,因为我只是用会话中的令牌序列化和反序列化用户。 但是,在响应API请求时,不存在用于存储会话信息的Cookie。 理想情况下,护照会在会话和请求主体中查找令牌。 有什么办法来configuration护照来完成这个?

HttpWebRequest使用基本身份validation

我试图通过一个身份validation请求,模拟了“基本身份validation请求”,我们习惯看到为此行为设置IIS时看到。 url是: https : //telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC = 22&SC = 1&ST = 2 (警告:https!) 该服务器在UNIX和Java下作为应用程序服务器运行。 这是我用来连接到这个服务器的代码: CookieContainer myContainer = new CookieContainer(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://telematicoprova.agenziadogane.it/TelematicoServiziDiUtilitaWeb/ServiziDiUtilitaAutServlet?UC=22&SC=1&ST=2"); request.Credentials = new NetworkCredential(xxx,xxx); request.CookieContainer = myContainer; request.PreAuthenticate = true; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); (我从这个网站上的另一篇文章中复制了这个)。 但是我从服务器收到这个答案: 底层连接已closures:发送时发生意外错误。 我想我尝试了一切可能的任务,我在C#上的知识必须提供给我,但是没有…

使用电子邮件地址作为用户ID有什么优点和缺点?

我正在创build一个需要注册/身份validation的Web应用程序,我正在考虑使用电子邮件地址作为唯一的用户ID。 以下是我所看到的优点和缺点(更新回复): PROS 在注册期间只需填写一个字段(它只是电子邮件地址,密码和validation密码)。 我是简约注册的忠实粉丝。 一个电子邮件地址更容易记住。 (感谢米奇 , 杰里米 ) 您不必担心自己喜欢的用户名已被占用 – 您是唯一使用您的电子邮件地址的人。 (感谢TStamper ) 缺点 用户每次login时都要input更多内容。 如果用户需要多个帐户呢? 他们需要另一个电子邮件地址。 (我甚至希望用户能够创build多个帐户?) 易于潜在的攻击者猜测(如果他们知道目标的电子邮件地址,他们知道loginID)。 (感谢Vasil ) 用户可能试图使用他们用于他们的电子邮件帐户的相同密码,这是不安全的。 (谢谢托马斯 ) 如果您经常更改电子邮件地址,则可能很难记住您经过长时间的间隔后用于注册网站的地址。 (感谢软件猴子 ) 黑客可能会将registry格发送垃圾邮件,并使用“已发送电子邮件”的回复来生成有效的电子邮件列表。 (感谢David ) 不是每个人都有电子邮件地址。 ( 谢谢尼古拉斯 ) 如果我使用电子邮件作为ID,我会提供一个机制,以便在用户更改地址时更改它。 在这种情况下,用户不会将内容发布到公共站点,因此不需要单独的用户名来保护电子邮件地址(但是这是其他站点要考虑的事情)。 另一个select是实施OpenID(这是另外一个辩论)。 这似乎适用于Google,但他们的服务是紧密集成的。 我在分析中错过了什么? 你有什么build议? 有没有人有经验分享? 最终编辑 谢谢大家的回应。 我已决定使用电子邮件作为ID,但是允许在注册后创build一个用于login的用户名。 这允许一点点的灵活性,同时保持登记尽可能短。 它还可以防止用户更改电子邮件地址时的问题(他们只需使用用户名login并更新即可)。 我也将实施一些方法来防止电子邮件地址被注册和login系统(主要是多次尝试后的冷静期)暴力破解。

如何成为SAML服务提供商

大家早上好, 我公司目前正在开发一个Java Web应用程序。 我们的几个客户有内部的SAML服务器(身份提供者?),并要求我们与他们进行整合。 所以最近我一直在读它,并与OpenAM玩耍。 大约三天之后,我对此有了一个大概的了解,但是我的知识还有一些差距。 我希望有人能为我解决这个问题。 所以这里是我如何想象用户login的工作stream程。让我们将我们的客户SAML服务器定义为https://their.samlserver.com 。 因此,用户来到我们的Web应用程序的受保护的资源。 假设这个URL是http://my.app.com/something 。 所以如果我是正确的,“my.app.com”就是SAML定义的“服务提供者”。 我们的应用程序意识到这个用户需要login。然后,我们向用户展示这样一个页面… <script>JQuery Script to auto submit this form on ready</script> <form method="post" action="https://their.samlserver.com/Post/Servlet"> <input type="hidden" name="SAMLRequest" value="someBase64Data" /> <input type="submit" value="Submit" /> </form> 那someBase64Data应该是base64编码的版本… <samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="identifier_1" Version="2.0" IssueInstant="2004-12-05T09:21:59Z" AssertionConsumerServiceIndex="0"> <saml:Issuer>http://my.app.com</saml:Issuer> <samlp:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/> </samlp:AuthnRequest> 所以我的第一个问题。 假设“ID”值是多less? 为什么我可以宣布自己是“发行人”? 身份提供者知道我吗? 也许这就是我在OpenAM上看到的“信任圈”。 如果它知道我的话,它是如何知道我的,它需要知道什么? […]

REST和身份validation变体

我目前正在为.net创build一个REST库,并且我想听到一些关于我有一个开放点的意见:REST和身份validation。 以下是与库一起使用的RESTful接口的示例: [RestRoot("/user")] public interface IUserInterface { [RestPut("/")] void Add(User user); [RestGet("/")] int[] List(); [RestGet("/get/{id}")] User Get(int id); [RestDelete("/delete/{id}")] void Delete(int id); } 然后,服务器代码只是实现接口,客户端可以通过工厂获得相同的接口。 或者,如果客户端不使用该库,则标准HTTP请求也可以使用。 我知道使用HTTP Basic Auth或向需要authentication用户的请求发送令牌的主要方式。 第一种方法(HTTP Basic Auth)具有以下问题(部分是Web浏览器特定的): 每次请求都会传输密码 – 即使使用SSL,也会有某种“不好的感觉”。 由于密码是通过请求头传输的,因此本地攻击者很容易查看传输的头文件来获取密码。 密码在浏览器内存中可用。 没有标准的方法来过期用户“会话”。 用浏览器login会中断页面​​的外观。 第二种方法的问题更侧重于实现和图书馆使用: 每个需要authentication的请求URI都必须有一个令牌参数,这只是非常重复的。 如果每个方法实现需要检查一个标记是否有效,那么有更多的代码需要写入。 接口将变得不那么具体,例如[RestGet("/get/{id}")]与[RestGet("/get/{id}/{token}")] 。 在哪里放置令牌:在URI的末尾? 之后的根? 别的地方? 我的想法是将标记作为parameter passing给URL,如http:/server/user/get/1234?token=token_id 。 另一种可能性是将参数作为HTTP头发送,但是这会使我们猜测普通HTTP客户端的使用复杂化。 令牌将作为每个请求上的自定义HTTP头(“X-Session-Id”)传递回客户端。 这可以从界面完全抽象出来,任何需要authentication的实现都可以只是询问哪个用户(如果给定的话)属于哪个用户。 你是否认为这样做会违反REST,或者你有什么更好的想法?

在浏览器中存储JWT的位置? 如何防止CSRF?

我知道基于cookie的authentication。 可以应用SSL和HttpOnly标志来保护来自MITM和XSS的基于cookie的身份validation。 但是,为了保护CSRF,需要采取更多的特殊措施。 他们只是有点复杂。 ( 参考 ) 最近,我发现JSON Web Token(JWT)作为authentication的解决scheme非常热门。 我知道关于编码,解码和validationJWT的东西。 但是,我不明白为什么一些网站/教程告诉我们如果使用JWT就不需要CSRF保护。 我读了很多,试图总结下面的问题。 我只希望有人能够提供智威汤逊的全貌,并澄清我误解智威汤逊的概念。 如果JWT存储在cookie中,我认为它与基于cookie的authentication相同,除了服务器不需要有会话来validationcookie /令牌。 如果没有采取特殊措施,CSRF仍然存在风险。 JWT是不是存储在cookie中? 如果JWT存储在localStorage / sessionStorage中,那么没有cookie就不需要防止CRSF。 问题是如何将JWT发送到服务器。 我在这里发现build议使用jQuery通过Ajax请求的HTTP头发送JWT。 那么,只有ajax请求可以进行身份​​validation? 另外,我还发现有更多的博客使用“Authorization header”和“Bearer”来发送JWT。 我不明白博客谈论的方法。 请问有人可以解释更多关于“授权标题”和“承载者”吗? 这是否使JWT通过所有请求的HTTP头传输? 如果是的话,CSRF呢?