我有一个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 。
答案 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。