0

我有一个非 gae、gwt 应用程序,它有一个模块,允许用户通过 google docs api 在线创建文档。

为此,我首先要求用户输入文档的名称和类型,然后使用给定的参数通过 google docs api 创建一个新文档,并且该 servlet 的 onSucces 部分返回编辑链接,该链接用于客户端打开一个新的页面来编辑创建的文档。

问题是,每次我尝试打开该 editLink 用户时都必须输入登录信息。为了解决这个问题,我尝试使用谷歌客户端登录,但我认为我完全迷路了。

首先我有用户的用户名和密码,可以直接使用它们,搜索后我尝试了一些通常返回这样那样的令牌的示例。现在我应该用令牌做什么?它如何用于完成登录过程或应该完全找到另一种登录方式?所有那些 oauth1、oauth2 等文档让我有点困惑。

这是我的步骤;

服务器端;

    LinkedHashMap<String, String> hashMap = new LinkedHashMap<String, String>();

    // Login
    DocumentList docList = new DocumentList("document");
    docList.login(ServletUtil.googleDocsLoginInfo().get("username"), ServletUtil.googleDocsLoginInfo().get("password"));

    //Create document with a unique suffix
    String docName= parameterName+ "-Created-" + new Date();
    docList.createNew(docName, dosyaTur);

    // Find the created document and store editLink
    DocumentListFeed feed = docList.getDocsListFeed("all");

    for (final DocumentListEntry entry : feed.getEntries()) {

        if (entry.getTitle().getPlainText().equals(docName)) {

            hashMap.put("editlink", entry.getDocumentLink().getHref());

        }

    }

    return hashMap;

和客户端;

    @Override
    public void onSuccess(LinkedHashMap<String, String> result) {


        String editLink = result.get("editlink");

        Window.open(editLink,"newwindow","locationno");

    }

感谢您的帮助。

4

1 回答 1

2

如果我可以建议使用 OAuth 而不是客户端登录,它已经过时且不太安全。功能基本相同(对于 OAuth 2.0,有更多处理登录的方法)。

我知道,试图了解如何通过 OAuth 访问 api 非常令人困惑,所以我尝试将其分解一下:

如果您使用 OAuth 2.0,您可能想要使用这样的库,或者您可以尝试我自己的库(虽然我是为 Android 编写的,但这可以与其他 Java 应用程序一起使用,包括 Web 应用程序)

当用户第一次使用您的应用程序登录时会发生这种情况:

  1. > 您的应用程序发送包含有关您的应用程序的一些信息的授权请求- 例如,您的应用程序需要在谷歌注册,因此有一个特殊的应用程序密钥
  2. < 服务器向您发送一个url,在新的浏览器窗口中打开它并让用户登录。在那里,他将被要求允许您的应用访问他的帐户(或其中的某些部分) - 当他确认他将被提示一个他需要复制的授权码时
  3. > 用户返回您的应用程序,您将在其中向他询问授权码。在他给它之后,您的应用程序再次与服务器连接并将代码作为用户的某种授权授予发送。
  4. < 服务器用访问令牌回答
  5. 您需要做的就是在您对隐藏在标头消息中的服务器的所有请求中使用此访问令牌(也称为不记名令牌)。

很抱歉我现在不能给你更准确的答案,因为我从未使用过 GWT。我只能说,尝试使用 OAuth2,它实际上非常简单(在您了解授权流程、承载令牌等所有这些令人困惑的事情之后)并且一旦他完成第一次登录,对您的用户来说真的很舒服。

于 2012-04-23T23:33:32.060 回答