代码之家  ›  专栏  ›  技术社区  ›  Tim Büthe

如何在没有用户名和密码的情况下验证移动应用程序?

  •  4
  • Tim Büthe  · 技术社区  · 14 年前

    我正在构建一个使用OpenId对用户进行身份验证的Webapp,就像Stackoverlfow一样。也会有一个移动应用程序,比如Android或iPhone。这些应用程序必须以某种方式进行身份验证或登录,才能访问数据并更新属于用户的内容。由于没有用户名和密码可以提供认证的移动设备,我想知道如何实现这一点。

    我想到了两种方法:

    1. 移动应用程序使用浏览器或显示一个集成的Web面板,打开Web应用程序的一个特殊页面。在这个页面上,用户必须登录,然后才能允许移动应用程序读写数据。

    我的问题是:这两种方法都是可能的和安全的吗?你喜欢哪一个?需要注意哪些细节?还有其他方法吗?如果我没问题的话,就不可能在设备上使用OpenId,并以这种方式链接移动设备和webapp,对吧?

    3 回复  |  直到 5 年前
        1
  •  4
  •   Tim Büthe    14 年前

    • 当应用程序第一次启动时,我测试 有一个身份验证令牌和 如果它仍然有效
    • 如果没有,我使用[startActivityForResult][1]打开我的登录活动
    • LoginActivity使用 WebView https://www.yourdomain.com/authapp )从web应用程序。
    • 如果用户点击“grant”,web应用程序将生成一个身份验证令牌,将其写入数据库并重定向到响应页,将生成的身份验证令牌附加到URL(例如。 https://www.yourdomain.com/authresponse?auth_token=dshf84z4388f4h
    • WebLogin活动如下所示:(注意:您必须重写“shouldOverrideUrlLoading”以保持在同一个WebView中。否则,当您收到一些重定向消息时,新浏览器将打开)

      公共类WebLogin扩展活动{

      受保护的void onCreate(Bundle savedInstanceState){ 超级.onCreate(保存状态);

      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);
      

      }

    [1]: http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent ,内景)

        2
  •  0
  •   Nic Strong    14 年前

    当前的OAuth规范(RFC5849)仍然要求用户向保存受保护资源的网站输入凭据。在移动应用程序上,这种用户体验并不是最好的(正如您指出的那样,移动应用程序需要用集成的web视图显示auth页)。 OAuth2.0通过指定不同的访问授权类型来解决这个问题。这个标准还在起草中。在此之前,您最好的选择可能是修改oauth1.0的流程,以适应移动设备,因为许多大型网站已经在这样做了(例如Twitter) xAuth 和他们的 developer API ).

        3
  •  0
  •   Fanis Hatzidakis    14 年前

    我正在做类似于选项(1)的事情。创建一个唯一的链接(甚至只包括会话id),然后通过SMS发送。有许多廉价的批量短信服务提供商提供了简单的api来实现这一点。当用户点击短信中的网址时,就会打开手机浏览器并登录。

    之后,如果手机接受cookies,您可以设置一个。否则,用户将始终必须通过该唯一链接进入。