Действительный делегат для IssuerSigningKeyResolver - PullRequest
0 голосов
/ 04 октября 2018

У меня проблемы с настройкой параметров 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» имеет идентификатор, но не подходитгде-нибудь еще.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 05 октября 2018

Похоже, что это правильный и более логичный / читабельный подход: -

IssuerSigningKeyResolver = (token, securityToken, kid, validationParameters) =>
{
    return certificates
    .Where(x => x.Key.ToUpper() == kid.ToUpper())
    .Select(x => new X509SecurityKey(x.Value));
}, 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...