Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Google客户端登录处理AuthToken_Java_Gwt_Authentication_Oauth_Google Docs Api - Fatal编程技术网

Java Google客户端登录处理AuthToken

Java Google客户端登录处理AuthToken,java,gwt,authentication,oauth,google-docs-api,Java,Gwt,Authentication,Oauth,Google Docs Api,我有一个非gae的gwt应用程序,它有一个模块,允许用户通过google docs api在线创建文档 为此,我首先要求用户输入文档的名称和类型,然后使用给定的参数和onSucces部分通过google docs api创建一个新文档,servlet返回编辑链接,该链接在客户端用于打开一个新页面来编辑创建的文档 问题是,每次我试图打开editLink时,该用户都必须输入登录信息。为了解决这个问题,我尝试使用谷歌客户端登录,但我想我完全迷路了 首先,我有用户名和密码的用户,可以直接使用它们,搜索后

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

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

问题是,每次我试图打开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;
LinkedHashMap hashMap=新建LinkedHashMap();
//登录
文件列表文件列表=新文件列表(“文件”);
docList.login(ServletUtil.googleDocsLoginInfo().get(“用户名”),ServletUtil.googleDocsLoginInfo().get(“密码”);
//创建具有唯一后缀的文档
字符串docName=parameterName+“-Created-”+新日期();
docList.createNew(docName,dosyaTur);
//查找创建的文档并存储editLink
DocumentListFeed=docList.getDocsListFeed(“全部”);
对于(最终文档ListEntry条目:feed.getEntries()){
if(entry.getTitle().getPlainText().equals(docName)){
put(“editlink”,entry.getDocumentLink().getHref());
}
}
返回hashMap;
和客户方

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


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

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

    }
@覆盖
成功时公共无效(LinkedHashMap结果){
字符串editLink=result.get(“editLink”);
打开(编辑链接,“新窗口”,“位置号”);
}

谢谢你的帮助。

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

我知道,试图理解如何通过OAuth访问api是非常令人困惑的,因此我尝试对其进行一些细分:

如果您使用OAuth 2.0,您可能希望使用类似的库,也可以尝试一下(尽管我是为Android编写的,但这可以与其他Java应用程序(包括Web应用程序)一起使用)

这是用户首次使用您的应用程序登录时发生的情况:
  • >你的应用程序发送一个授权请求,其中包含有关你的应用程序的一些信息-例如,你的应用程序需要在谷歌注册,因此有一个特殊的应用程序密钥
  • <服务器向您发送一个url,在新的浏览器窗口中打开它,让用户登录。在那里,他将被要求允许你的应用程序访问他的帐户(或部分帐户)——当他确认后,系统将提示他需要复制一个授权码
  • >用户返回到你的应用程序,你将向他索要授权码。在他给出代码后,你的应用程序再次与服务器连接,并将代码作为用户的某种授权发送出去
  • <服务器使用访问令牌进行应答
  • 您只需在头消息中隐藏的对服务器的所有请求中使用此访问令牌(也称为承载令牌)

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

    感谢您将其简化为简单的步骤,现在更清晰了。实际上这不是gwt,因为我用纯java在服务器包中完成所有这些登录过程。我在示例中使用了“doclist.login”,但我一直试图用oauth或oauth2替换它,所以您可以忽略它。是否可以跳过或透明地执行代码中的用户确认部分?在我的任务中,用户帐户仅用于google文档,当用户想要对文档进行操作时,他/她应该直接查看文档,而不提示任何授权确认。这可能吗?用户只需执行一次此授权过程-在您的应用程序拥有访问令牌并可以保存它以再次使用它之后。因此,一旦完成此操作,用户就可以不再延迟地使用您的google docs功能。如果这还不够好,而且对用户来说太多:使用OAuth2,您还可以通过应用程序传输用户凭据(名称和密码)。但可能是某些服务器(我不知道谷歌)不允许这种方法,因为它不太安全(例如,您可以编写恶意软件应用程序并将用户凭据发送给其他人)。