iOS应用可以与Google身份验证器进行通信吗?

时间:2014-03-12 14:34:47

标签: ios security cordova ios7 google-authenticator

我有一个API需要先注册一次HOTP / TOTP代码才能获得更长期的会话令牌。

有什么方法(理论上)iOS应用可以“调用”经过修改的Google身份验证器版本,允许一次性交换HOTP / TOTP代码吗?

我假设Google身份验证器的修改版本会发出类似

的提示
  

“您确定要将XXX的代码发送给YYY吗?”

这种情况有可能实现吗?由于缺乏这一点,我将不得不指导用户在应用程序之间进行多任务处理,这是我的消费者不知道如何在iOS上执行的功能。 (双击手机底部的按钮或iPad会将它们排除在外)

有些想法让我觉得这是可能的:

  • 我在Safari中看到网页链接在设备上打开应用程序,或打开应用程序的网站,而不是安装时的.mobile版本(Foursquare,Facebook等)

  • 应用可以在Safari或Chrome中打开网站

将这些想法放在一起,我可以添加一个包含HOTP代码的URL参数,并通过HTTPS“反弹”,但我想要一个更本地化的解决方案


注意更接近:我在Security.SE上问这个问题,因为我认为这里的人可能最了解iOS沙盒,因为这里所需的概念和技能可能在概念上类似于ASLR and DEP which have 74+ questions on the site

1 个答案:

答案 0 :(得分:2)

是的,只需使用共享的UIApplication对象和openURL方法即可。该方案详见Google身份验证器维基的KeyUriFormat page

代码看起来像这样:

NSString *issuer = @"Example";
NSString *accountname = @"alice@google.com";
NSString *label = [NSString stringWithFormat:@"%@:%@",issuer,accountname];
NSString *secret = @"JBSWY3DPEHPK3PXP";
NSString *algorithm = @"SHA1";
NSString *digits = @"6";
NSString *period = @"30";

NSString *urlPath = [NSString stringWithFormat:@"otpauth://totp/%@?secret=%@&issuer=%@&algorithm=%@&digits=%@&period=%@",label,secret,issuer,algorithm,digits,period];
NSURL *url = [NSURL URLWithString:urlPath];
[[UIApplication sharedApplication] openURL:url];

但是,目前似乎this bug崩溃了当前版本的iOS应用程序(我已经测试过了)。

:(

或者,您可以在自己的应用中加入自己的TOTP实现。这不是太复杂,我实际上已经组合了一个简单的例子here