我是网络编程的新手,来自视频游戏开发背景(c ++),我真的开始觉得信息过载了。有这么多竞争的图书馆都选择了一些他们不喜欢的东西,并建立了一种全新的方式来做同样的事情!我相信这有充分的理由,我不想抱怨,所以我会解释我的问题。

为了简化我的旅程,我决定开始学习Google App Engine + GWT + Java。我喜欢它,因为它是一个开箱即用的分布式服务器架构,因为我的C ++背景,我选择了Java。

首先,我编写了一些类似Twitter的应用程序,因为它测试了Web开发的各个方面,即:REST,JSON解析/创建,AJAX通信和HTML生成。创建一个允许用户在浏览器页面中输入他们的名字和密码,将数据发送到我的应用程序,代表他们登录,抓住他们的朋友列表,然后发出的小网站并不需要太长时间。它以JSON的形式返回给客户端,在那里我解析并显示它。

非常简单的东西。

所以,下一步是我不喜欢发送用户通过网络输入的密码作为纯文本(显然)。这让我想到了我需要的所有管道:

  1. 根据我自己的数据库验证用户,而不是Google的。 (登录/忘记密码/退出)
  2. 进入/退出(跟踪)会话(登录/注销)。
  3. 将用户数据存储在我的Google应用数据库中。
  4. 所有非常标准的东西都是永远存在的。好吧,我开始四处寻找一个Java认证库,那里有如此庞大的单片库,有很多学习曲线,有些已经老了或者不再受欢迎了...我觉得我又像一个初学者程序员了!我只想要一个登录页面! :)

    然后我开始阅读认证的管道如何工作,并且有大量的内容可供使用。显然,人们(不安全地)推出自己的认证是很常见的。我宁愿采取一种存在且稳固的解决方案。

    所以问题就变成了,人们对此做了什么? Twitter支持HTTP和HTTPS,但默认为其REST API的HTTP,这是否意味着人们的密码在不受保护的情况下飞来飞去,准备被中间人攻击拦截?

    我也看过OAuth,看起来很棒,但它没有一个只有一个好老的案例“我不想知道或关心OpenID是什么”。非技术人员我已经展示了OpenID,就像“wha?我只想将我的用户名/密码放在“。

    作为旁注,有没有人在Google App Engine上运行Spring.Security?

    无论如何,我在咆哮。我只是想知道人们做了什么(不是在Python,Rails等,而是在古老的Java中)。我希望有一个像Digg这样的登录页面,甚至有一天可以选择OpenID:)

    干杯, 沙恩

有帮助吗?

解决方案

我无法与Google App Engine一起使用Spring Security,但我可以说一些可能有用的内容。

首先,它的设置非常简单,而且它们有很好的教程可以帮助它完成。就个人而言,我使用宠物诊所教程作为指南第一次如何将spring security应用到我的项目中。我能够在一两个小时内完成设置,并在几个不同的页面上使用我的数据库进行基本安全保护。你的里程可能会有所不同,但最糟糕的情况是你有完整的教程,你可以戳戳并刺激它看看它是如何反应的。

其次,该库非常易于配置。如果您搜索手册,我会很好地了解你可以做的事情,并且我在为项目改变我需要改变的区域时没有任何问题。我相信您应该能够将这些Spring Security和Google App Engine一起工作。总的来说,我对Spring源的远见和与其他库交互的能力感到满意。

最后,Spring Security支持OpenID,如果这是您决定要进行分层的话。我还没有玩过这部分,但是从教程中看起来也非常直观。这里的好处是,如果事实证明你毕竟应该支持OpenID,那么你应该能够添加它。

祝你好运!

其他提示

我只是偶然发现了你的帖子。您似乎(过去时态,因为已经很长时间)对HTTP / HTTPS使用和身份验证感到困惑。如果您使用的是HTTP,则密码不会以纯文本形式退回。通常,登录信息通过HTTPS进行POST。此时,已建立会话,该会话通过cookie中的大型随机生成的标识符进行跟踪。用户在服务器上进行身份验证,并将其ID存储在会话中(存储在服务器上)以标记他们已登录。

从那时起,通过会话跟踪用户。是的,中间人可能会劫持cookie并假设你的身份。对于100%通过HTTP工作的网站来说就是这种情况,但显然这不是问题,或者您会听到更多关于它的信息。对于HTTPS,会话cookie可以标记为安全,这意味着它只会通过HTTPS从浏览器发送。在过去,我发现浏览器的行为方式不同,有时为安全且不安全的同名cookie共享相同的值(这是一个愚蠢的想法)。您最好的选择是使用单独命名的安全cookie,以确保用户登录您的网站上的安全功能。

我同意你的看法,JAAS框架非常糟糕。它一定是由一群没有常识的疯狂疯子写的。

至于使用Google App Engine,他们会为您处理所有身份验证。您似乎别无选择,只能使用Google帐户,这是一种耻辱。同样令人遗憾的是,他们坚持要求您重定向到他们的登录页面,因为这会打破GWT应用程序的工作方式。我目前正在考虑管理自己的帐户,因为我不希望谷歌拥有它们,我不希望在我的网站上有这种脱节的体验。

但是,似乎无法在没有会话的情况下跟踪用户(GAE可以支持会话,但强烈建议不要在GAE中提升可扩展性)。如果没有会话,我确实需要发送密码并使用每个RPC请求对用户进行身份验证。 Google正在采取一些措施让getUserPrincipal()方法在他们的服务器集群中运行 - 而且如果你使用Google帐户,你似乎只会获得魔力。

也许我错过了什么,但Google文档只是略过了这个漏洞:(

嘿那里,如果你想使用java,你可能想看看 WICKET ...这是一个非常巧妙的java框架,提供了很多。它是面向组件的,并且通过示例非常容易理解(请参阅扩展示例页面上的登录示例...我运行得非常快)。它也适用于其他js框架,但也提供自己的ajax实现。它还有一个很棒的邮件列表!

我正在尝试使用servlet的 security-constraint element 。在我的应用程序中,https下的basic / digest auth很好。

在第二天,我还将尝试使用restlet和/或JAX-RS实现另一个应用程序。两个框架都提供了安全钩子。

  

进入/退出(跟踪)会话(登录/注销)。

这可以使用servlet过滤器轻松实现(同样,GAE完全支持)

  

作为旁注,有没有人在Google App Engine上运行Spring.Security?

支持spring security

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top