ios 钥匙串查询记录无附加提示
ios keychain query record without additional prompt
我有一个关于 touch-id 以及如何将它与 KeyChain 一起使用的问题。我目前正在开发一个应用程序,用户可以在其中从钥匙串中检索令牌并使用所述令牌登录(如果它是有效的 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);
}
我现在的问题是 QueryAsRecord 方法每次使用时都会触发 touch-id 提示。我觉得如果 accesstoken 运行 出来并且需要使用 refreshtoken 请求一个新的,那么询问用户两次并不是很友好。
我没有找到任何解决方法,其他人是否可以建议如何避免额外的提示?
因为似乎没有办法绕过它,我只是将两个令牌放在同一个条目中。
我有一个关于 touch-id 以及如何将它与 KeyChain 一起使用的问题。我目前正在开发一个应用程序,用户可以在其中从钥匙串中检索令牌并使用所述令牌登录(如果它是有效的 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);
}
我现在的问题是 QueryAsRecord 方法每次使用时都会触发 touch-id 提示。我觉得如果 accesstoken 运行 出来并且需要使用 refreshtoken 请求一个新的,那么询问用户两次并不是很友好。
我没有找到任何解决方法,其他人是否可以建议如何避免额外的提示?
因为似乎没有办法绕过它,我只是将两个令牌放在同一个条目中。