ios keychain查询记录无需额外提示

问题描述:

我有一个关于touch-id的问题,以及如何在KeyChain中使用它。我目前正在开发一个应用程序,用户可以从钥匙链中获取一个标记并使用所述标记进行登录(如果它是有效的ofc)。ios 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方法triggeres使用它的触摸ID提示每次。我觉得如果访问用户用完了,并且需要使用refreshtoken请求新用户,那么询问用户两次并不是非常方便用户。

我没有找到任何解决方法,其他人可能会有一个建议如何避免额外的提示?

由于似乎没有办法解决这个问题,所以我只将两个标记放在同一个条目中。