У меня проблемы с настройкой параметров TokenValidation.VS говорит мне, что в делегате для IssuerSigningKeyResolver в «x.Id», что «char» не содержит определения для «Id».
В этом случае «сертификаты» объявляются и загружаются с помощью сертификатов Google таким образом: -
Byte[][] certBytes = getCertBytes(GOOGLE_CERTS);
Dictionary<String, X509Certificate2> certificates = new Dictionary<String, X509Certificate2>();
for (int i = 0; i < certBytes.Length; i++)
{
X509Certificate2 certificate = new X509Certificate2(certBytes[i]);
certificates.Add(certificate.Thumbprint, certificate);
}
TokenValidationParameters JWTparams = new TokenValidationParameters()
{
ValidateActor = false,
ValidateAudience = true,
ValidAudience = CLIENT_ID,
ValidateIssuer = true,
ValidIssuers = VALID_ISSUERS,
ValidateIssuerSigningKey = true,
RequireSignedTokens = true,
IssuerSigningKeyResolver = (tokenString, securityToken, identifier, parameters) =>
{
return identifier.Select(x =>
{
if (certificates.ContainsKey(x.Id.ToUpper()))
{
return new X509SecurityKey(certificates[x.Id.ToUpper()]);
}
return null;
}).First(x => x != null);
},
ValidateLifetime = true
};
Я ни в коем случае не гуру в C #, поэтому был бы признателен за помощь с некоторым кодом, который я скопировал.Мое "понимание" заключается в том, что делегат получает "идентификатор" в виде строки, поэтому, почему используется Linq.Select, я не уверен, потому что, полагаю, он будет просто проходить строку по одному символу за раз?
В документах говорится, что «идентификатор» может быть нулевым, но это «.First (x => x! = Null)», предполагается, что он обрабатывает последовательные вызовы?
«securityToken» имеет идентификатор, но не подходитгде-нибудь еще.
Пожалуйста, помогите.