繁体   English   中英

Web 站点登录 Java + Google App Engine

[英]Web site login in Java + Google App Engine

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

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

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

很简单的东西。

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

  1. 根据我自己的数据库而不是 Google 的数据库对用户进行身份验证。 (登录/忘记密码/注销)
  2. 输入/退出(跟踪)一个 session(登录/注销)。
  3. 将用户数据存储在我的 Google 应用程序的数据库中。

所有非常标准的东西一直存在。 好吧,我开始四处寻找一个 Java 身份验证库,那里有如此庞大的整体库,学习曲线巨大,有些已经过时或不再受欢迎......我觉得自己又是一个初学者程序员:我只是想要有一个登录页面! :)

因此,我开始阅读有关身份验证管道的工作原理的文章,并且有大量内容需要吸收。显然,人们(不安全地)推出自己的东西是很常见的。 我宁愿采用一个存在且可靠的解决方案。

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

我还查看了 OAuth,它看起来很棒,但它没有理由只是一个很好的旧“我不想知道或关心 OpenID 是什么”。 我向 OpenID 展示过的非技术人员就像“哇?我只想输入我的用户名/密码”。

作为旁注,有没有人对 Spring.Security on Google App Engine 感到幸运?

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

干杯,谢恩

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

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

其次,库的可配置性很强。 如果您搜索手册,您将对您可以做的事情有一个很好的了解,并且我可以毫无问题地重新设计我需要为我的项目更改的区域。 我相信您应该能够一起使用这些 Spring 安全和 Google App Engine。 总的来说,我对 Spring 来源的远见和与其他图书馆互动的能力感到满意。

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

祝你好运!

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

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

我同意你的看法,JAAS 框架简直糟透了。 一定是一群没有常识的疯子写的。

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

但是,如果没有 session,似乎不可能跟踪用户(会话可以在 GAE 中得到支持,但强烈建议不要提高 GAE 中的可扩展性)。 如果没有 session,我确实需要发送密码并对每个 RPC 请求的用户进行身份验证。 谷歌正在采取一些技巧使 getUserPrincipal() 方法在他们的服务器集群中工作——而且似乎只有当你使用谷歌账户时 go 才能获得这种魔力。

也许我遗漏了什么,但谷歌文档只是略过这个大洞:(

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

我正在尝试使用 servlet 的security-constraint element做同样的事情。 在我的应用程序中,https 下的基本/摘要身份验证很好。

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

输入/退出(跟踪)一个 session(登录/注销)。

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

作为旁注,有没有人对 Spring.Security on Google App Engine 感到幸运?

spring 安全支持

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM