Java Google客户端登录处理AuthToken
我有一个非gae的gwt应用程序,它有一个模块,允许用户通过google docs api在线创建文档 为此,我首先要求用户输入文档的名称和类型,然后使用给定的参数和onSucces部分通过google docs api创建一个新文档,servlet返回编辑链接,该链接在客户端用于打开一个新页面来编辑创建的文档 问题是,每次我试图打开editLink时,该用户都必须输入登录信息。为了解决这个问题,我尝试使用谷歌客户端登录,但我想我完全迷路了 首先,我有用户名和密码的用户,可以直接使用它们,搜索后,我尝试了一些例子,通常返回一个令牌像和。现在我该怎么处理代币呢?如何使用它来完成登录过程,或者应该完全找到另一种登录方式?所有那些oauth1、oauth2等文档都让我有点困惑 这是我的脚步 服务器端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时,该用户都必须输入登录信息。为了解决这个问题,我尝试使用谷歌客户端登录,但我想我完全迷路了 首先,我有用户名和密码的用户,可以直接使用它们,搜索后
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应用程序)一起使用) 这是用户首次使用您的应用程序登录时发生的情况:
很抱歉,我现在不能给你一个更准确的答案,因为我从未使用过GWT。我所能说的是,尝试使用OAuth2,它实际上非常简单(在您了解了授权流、承载令牌等所有这些令人困惑的事情之后),并且在用户完成第一次登录后,对您的用户来说非常舒适。感谢您将其简化为简单的步骤,现在更清晰了。实际上这不是gwt,因为我用纯java在服务器包中完成所有这些登录过程。我在示例中使用了“doclist.login”,但我一直试图用oauth或oauth2替换它,所以您可以忽略它。是否可以跳过或透明地执行代码中的用户确认部分?在我的任务中,用户帐户仅用于google文档,当用户想要对文档进行操作时,他/她应该直接查看文档,而不提示任何授权确认。这可能吗?用户只需执行一次此授权过程-在您的应用程序拥有访问令牌并可以保存它以再次使用它之后。因此,一旦完成此操作,用户就可以不再延迟地使用您的google docs功能。如果这还不够好,而且对用户来说太多:使用OAuth2,您还可以通过应用程序传输用户凭据(名称和密码)。但可能是某些服务器(我不知道谷歌)不允许这种方法,因为它不太安全(例如,您可以编写恶意软件应用程序并将用户凭据发送给其他人)。