2017-08-28 22 views
0

タッチIDとKeyChainでの使用方法に関する質問があります。私は現在、ユーザーがキーチェーンからトークンを取得し、そのトークンでログインできるアプリケーションを開発しています(有効なofcの場合)。追加のプロンプトが表示されないiosキーチェーンクエリレコード

現在、私は多少このようにそれをやっている:

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方法は、それが使用されているタッチIDプロンプト毎回triggeresということです。私はaccesstokenがなくなって、新しいものがrefreshtokenで要求される必要がある場合のためにユーザーに二度尋ねるのは非常にユーザーフレンドリーではないように感じます。

これを回避する方法はありませんでしたが、他の人が追加のプロンプトを回避する方法を提案している可能性がありますか?

答えて

0

周りに道があるように見えないので、私はちょうど同じエントリに両方のトークンを配置しました。

関連する問題