我正在iPad上开发一个企业应用程序以满足特定的业务需求。 此应用程序适用于管理员预定义的特定数量的设备。
但我还要求应用程序拒绝任何登录请求,即使它是来自授权用户,当他或她正在使用未由管理员定义的设备时。
编辑:
假设我有2台设备,并且我有我的凭据登录到应用程序,我的需要是,限制从不是我的设备登录。 为此,我必须确定登录请求是否来自我的设备。
以前我们可以使用设备UDID来执行此操作,但现在不推荐使用它。
任何人都可以建议一种方法来实现这个吗?
答案 0 :(得分:1)
试试这个。有关详情,请查看UIDevice
// IOS 6+
NSString *uniqueIdentifier = [[NSString alloc] initWithString:[[[UIDevice currentDevice] identifierForVendor] UUIDString]];
答案 1 :(得分:1)
你可以在这里使用iCloud ,因为UUID已被弃用,且vendorId是unqe,但如果您卸载应用程序并安装它,则可能会更改,
所以我建议iCloud会更安全,你做的是在应用程序启动时你可以生成一个唯一的令牌,并将其与用户凭据一起保存到你的iCloud数据存储中,
因此,从下次开始,当用户尝试登录时,您可以使用iCloud进行检查。
答案 2 :(得分:0)
如何使用Apple的企业分销系统?这将允许您将应用程序部署到公司,并具有严格的访问控制。
答案 3 :(得分:0)
Just Trick:
您可以将APNS代码实施到您的项目并获取设备令牌。
设备令牌是唯一的。但用户必须允许APNS。
注意:APNS设备令牌已更改为以下原因。
答案 4 :(得分:0)
我已经为您的问题实施了一个解决方案,最佳解决方案(以及Apples建议的路线)是为您的应用创建一个独特的UUID,如下所示:
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(NULL, uuid));
CFRelease(uuid);
}
然后,这是关键,您可以将其存储到iOS钥匙串(此处为Handy classes:https://github.com/lukef/IXKeychain),并且在用户卸载App时不会删除iOS钥匙串中的值,因此您可以保留您自己的UUID通过App安装,这是根据用户帐户管理特定数量的设备的关键部分。
答案 5 :(得分:0)
此方法将为每个设备返回一个字符串。因为它每次都会改变单个设备 所以我们将它存储在钥匙串中,并且可以在需要时随时引用它。
+ (NSString *) uniqueDeviceIdentifier
{
NSString *deviceUUID = [[SGKeyChain defaultKeyChain] stringForKey:@"uniqueId"];
if (!deviceUUID) {
if (!deviceUUID.length) {
NSString *deviceUUID = @"";
CFUUIDRef uuidRef = CFUUIDCreate(NULL);
CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
CFRelease(uuidRef);
deviceUUID = [NSString stringWithFormat:@"%@",[NSString stringWithString:(__bridge_transfer NSString *)uuidStringRef]];
[[SGKeyChain defaultKeyChain] setObject:deviceUUID forKey:@"uniqueId" accessibleAttribute:kSecAttrAccessibleAlways];
}
}
return deviceUUID;
}
你可以参考这个存储库...... https://github.com/sgup77/SGKeyChainWrapper用于SGKeyChain实现
答案 6 :(得分:0)
好的,我将分享我们为B2B企业应用程序所遵循的方法。
每位用户都有登录ID和密码。
1。因此,用户使用deviceReg API向服务器注册他的设备,该API将clientDeviceId作为param(客户端生成的uuid)以及用户名并传递。
2. 服务器返回服务器生成的唯一标识符,供该特定设备上的应用程序使用。
结论 - 以这种方式您可以使用特定设备限制用户。
您可以使用以下方法生成deviceSpecific客户端UUID
- (NSString *)getUuid
{
CFUUIDRef uuidRef = CFUUIDCreate(NULL);
CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
CFRelease(uuidRef);
NSString *uuid = [NSString stringWithString:(__bridge NSString *)uuidStringRef];
CFRelease(uuidStringRef);
return uuid;
}
请注意: 我删除了有关使用AuthKey,AccessToken和其他我们用于安全目的的解释,因为您不使用任何auth服务器。
我希望它有所帮助。
更新1。
由于您正在使用企业应用程序,因此我确信您将至少拥有用户电子邮件ID。
因此,客户经理应该首先向所有活动帐户发送包含一次性令牌的电子邮件。
应用程序在注册设备并发送到服务器进行验证时可以请求此令牌。
一旦用于避免误操作,服务器也会使令牌无效。
如果用户迁移设备,应该有一个使用服务器生成的设备ID和迁移令牌的migrAtion api。