没有附加提示的ios钥匙串查询记录

时间:2017-08-28 06:26:45

标签: ios xamarin keychain touch-id

我有一个关于touch-id以及如何将其与KeyChain一起使用的问题。我目前正在开发一个应用程序,用户可以从钥匙串中检索令牌并使用所述令牌登录(如果它是有效的)。

目前,我的做法有点像这样:

 var accessTokenRecord = new SecRecord(SecKind.GenericPassword)
                    {
                        Account = username,
                        Service = AccessTokenIdentifier,
                    };
                    var matchingAccessTokenRecord =
                    SecKeyChain.QueryAsRecord(accessTokenRecord, out SecStatusCode accessTokenStatusCode);
                    if (accessTokenStatusCode == SecStatusCode.Success)
                    {
                        var accessToken = new JwtSecurityToken(matchingAccessTokenRecord.ValueData.ToString());
                        var tokenString = matchingAccessTokenRecord.ValueData.ToString();
                        if (accessToken.ValidTo.CompareTo(DateTime.Now) < 0)
                        {
                            // accesstoken ran out/expired, neet to refresh
                            var refreshTokenRecord = new SecRecord(SecKind.GenericPassword)
                            {
                                Account = username,
                                Service = RefreshTokenIdentifier,
                            };
                            var matchingRefreshTokenRecord =
                                SecKeyChain.QueryAsRecord(refreshTokenRecord, out var refreshTokenStatusCodes);
                            if (refreshTokenStatusCodes == SecStatusCode.Success)
                            {
                                var newTokenInformation =
                                    await LoginWithRefreshToken(matchingAccessTokenRecord.ValueData.ToString(),
                                        matchingRefreshTokenRecord.ValueData.ToString());
                                var result =
                                    StoreAccessAndRefreshTokenForUser(newTokenInformation, username,
                                        ShowFailureInfo);
                                if (result)
                                {
                                    tokenString = newTokenInformation.TokenString;
                                }
                            }

                        }
                        // login with token
                        LoginWithToken(tokenString);                            
                    }

我现在的问题是 QueryAsRecord 方法每次使用时触发touch-id提示。我觉得,如果accessstoken用完了需要用户两次并且需要使用refreshtoken请求新的用户,那么用户不是很友好。

我没有找到任何方法,其他人是否可以建议如何避免额外的提示?

1 个答案:

答案 0 :(得分:0)

由于似乎没有解决方法,我只是将两个令牌放在同一个条目中。