我有一个简单的应用程序,可以让用户绘制图片。有Android,IOS和基于Web的版本。我还允许用户将他们的图片存储在我们的App引擎服务器上,我希望他们能够与其他用户协作。我想使用Google帐户进行身份验证以及某些权限方案的基础。
我不知道如何在Android(或IOS)上验证/验证用户的Google帐户。我希望有人可以帮助或指出我正确的方向。这是我到目前为止所理解的:
在基于Web的客户端上,我只使用Google-web工具包UserService。但是对于我的app-engine servlets,我不确定应该使用什么。目前servlet的代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
OAuthService oauth = null;
oauth = OAuthServiceFactory.getOAuthService();
User user = oauth.getCurrentUser();
// Do stuff
}
在我的Android应用程序中,我认为我应该做类似的事情:
1)从AccountManager获取帐户
2)致电:
accountManager.getAuthToken
(account, // Account
"oauth2:https://www.googleapis.com/auth/userinfo.profile",//AUTH Token Type
null, // Options
this, // Activity
new MyAccountsManagerCallBack(), // call-back
null); // Handler
这会给我授权令牌。
3)??利润??
这是我迷失的地方。我是否将此授权令牌作为明文查询参数发送到我的app-engine服务器,然后从Web服务器向userinfo / profile api发出请求?这似乎不安全。
有没有办法让OAuthService的先前代码工作?
OAuth 2的示例使用Google任务API,但我想使用我的app-engine API。我已经使用Cookie,网页浏览量,标题等找到了OAuth 1的信息,但OAuth 2上没有任何信息,而且没有一个真正告诉我如何验证服务器端。
我真的不知道我应该在这做什么。我将不胜感激。
答案 0 :(得分:0)
为了澄清,这是我在app引擎上提供的java servlet的一个例子:
public class ServletSecureData extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
UserService usersrvc = null;
usersrvc = UserServiceFactory.getUserService();
User user = usersrvc.getCurrentUser();
if(user == null)
throw new IOException();
Random r = new Random(System.currentTimeMillis());
int num = r.nextInt(10);
PrintWriter out = response.getWriter();
out.printf("Security !! %s radioactive man! %d", user.getEmail(), num);
out.close();
}
}
此servlet受web.xml文件中定义的安全性约束的保护。我希望能够使用Android客户端访问此servlet。我以为我必须使用Oauth但事实证明我需要使用较旧的弃用服务ClientLogin
我的实施基于此网站的代码:http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app