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请求新用户,那么询问用户两次并不是非常方便用户。
我没有找到任何解决方法,其他人可能会有一个建议如何避免额外的提示?
答
由于似乎没有办法解决这个问题,所以我只将两个标记放在同一个条目中。