网站登录 Java + Google App Engine

2022-09-02 01:50:27

我是Web编程的新手,来自视频游戏开发背景(c ++),并且真的开始感到信息过载。有这么多相互竞争的库,它们都选择他们不喜欢的其他库,并建立一种全新的方法来做同样的事情!我相信这是有充分理由的,我不想抱怨,所以我会解释我的问题。

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

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

非常简单的东西。

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

  1. 根据我自己的数据库(而不是 Google 的数据库)对用户进行身份验证。(登录/丢失密码/注销)
  2. 进入/退出(跟踪)会话(已登录/已注销)。
  3. 将用户数据存储在我的 Google 应用的数据库中。

所有非常标准的东西,都已经存在了。好吧,我开始四处寻找Java身份验证库,并且有如此大的单体库,具有巨大的学习曲线,有些是旧的或不再赞成......我感觉自己又像个初学者程序员了!我只想有一个登录页面!:)

因此,我开始阅读有关身份验证管道如何工作的信息,并且有大量内容需要吸收。显然,人们(不安全地)自己滚动是很常见的。我宁愿采取一个存在且可靠的解决方案。

所以问题来了,人们对此该怎么办?Twitter同时支持HTTP和HTTPS,但默认使用HTTP作为其REST API,这是否意味着人们的密码在不受保护的情况下飞来飞去,随时准备被中间人黑客拦截?

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

顺便说一句,有没有人在Google App Engine上使用Spring.Security?

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

干杯,谢恩


答案 1

我不能和Google App Engine一起与Spring Security交谈,但我可以说一些可能有帮助的事情。

首先,它的设置非常简单,并且他们有很好的教程来启动和运行它。就个人而言,我使用宠物诊所教程作为指导,指导如何第一次将弹簧安全性应用于我的项目。我能够在一两个小时内完成设置,并在几个不同的页面上使用我的数据库获得基本的安全性。当然,您的里程可能会有所不同,但最坏的情况是,您有他们完整的教程,您可以戳戳,看看它的反应如何。

其次,该库非常可配置。如果你搜索手册,你会对你可以做的事情有一个很好的了解,而且我在重新设计我需要为我的项目改变的领域时没有问题。我相信你应该能够把Spring Security和Google App Engine放在一起工作。总的来说,我对Spring源代码的远见卓识和与其他库交互的能力感到满意。

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

祝你好运!


答案 2

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

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

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

至于使用Google App Engine - 他们将为您处理所有身份验证。看起来你别无选择,只能使用谷歌帐户,这是一个耻辱。他们坚持要您重定向到他们的登录页面,这也是一种耻辱,因为这会破坏GWT应用程序的工作方式。我目前正在考虑管理自己的帐户,因为我不希望Google拥有它们,我也不希望在我的网站上出现这种脱节的体验。

但是,在没有会话的情况下跟踪用户似乎是不可能的(会话可以在 GAE 中受支持,但强烈建议不要在 GAE 中提高可伸缩性)。如果没有会话,我确实需要发送密码并通过每个RPC请求对用户进行身份验证。Google正在采取一些技巧来使getUserPrincipal()方法在他们的服务器集群中工作 - 似乎只有当你使用Google帐户时,你才能获得这种魔力。

也许我错过了一些东西,但谷歌文档只是略过了这个巨大的漏洞:(


推荐