Tim*_*the 4 iphone authentication mobile android web-applications
我正在构建一个使用 OpenId 来验证用户身份的 Web 应用程序,就像 Stackoverlfow 所做的那样。也会有一个移动应用程序,例如 Android 或 iPhone。这些应用程序必须以某种方式进行身份验证或登录,才能访问数据并更新属于用户的内容。由于无法提供用户名和密码来验证移动设备,我想知道如何实现这一点。
我想到了两种方法:
在服务器上生成一些必须在设备上输入的密钥。当移动设备发送或请求数据时,该密钥将作为身份验证密钥发送,并且可以通过这种方式链接用户。使用此选项时,密钥应以某种方式传输给用户,这样他就不必输入密钥。可能通过电子邮件、短信或扫描条形码。
移动应用程序使用浏览器或显示一个集成的 Web 面板,该面板可打开 Web 应用程序的特殊页面。在此页面上,用户必须登录,然后才能允许移动应用程序读取和写入数据。
我的问题是:这两种方法都可行且安全吗?您更喜欢哪一个?有哪些细节需要注意?还有其他方法可以做到这一点吗?如果我没问题的话,就不可能在设备上使用 OpenId,并以这种方式链接移动设备和 web 应用程序,对吧?
为了实现这一目标,我做了以下工作:
移动应用程序从 URL 中提取令牌,并在与服务器通信时使用它进行身份验证。
WebLogin Activity 如下所示:(注意:您必须覆盖“shouldOverrideUrlLoading”才能保留在同一个 WebView 中。否则,当您收到某些重定向时,会打开一个新浏览器)
公共类 WebLogin 扩展 Activity {
@Override protected void onCreate(Bundle savingInstanceState) { super.onCreate(savedInstanceState);
WebView webview = new WebView(this);
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
if(StringUtils.contains(url, "?auth_token=")){
// extract and save token here
setResult(RESULT_OK);
finish();
}
}
});
webview.loadUrl("https://www.yourdomain.com/authapp");
webview.getSettings().setJavaScriptEnabled(true);
setContentView(webview);
Run Code Online (Sandbox Code Playgroud)
} }
请注意,我使用 https 进行保存。如果您使用纯 http,则可以读取并窃取用户的令牌。
[1]:http://developer.android.com/reference/android/app/Activity.html#startActivityForResult (android.content.Intent,int)