代码之家  ›  专栏  ›  技术社区  ›  DerDingens

无额外提示的ios钥匙链查询记录

  •  0
  • DerDingens  · 技术社区  · 8 年前

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

     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);                            
                        }
    

    我现在的问题是 Queryas记录 方法每次使用时触发触摸id提示。我觉得如果accesstoken用完了,需要用refreshtoken请求一个新的,那么询问用户两次对用户来说不是很友好。

    1 回复  |  直到 8 年前
        1
  •  0
  •   DerDingens    8 年前

    由于似乎没有办法绕过它,我只是将两个令牌放在同一个条目中。