2015-10-25 3 views
0

Я пытаюсь интегрировать GIT на свой сайт. Я успешно реализовал инструментарий и хочу проверить JWT, отправленный из Google API, с сертификатом * .p12, предоставленным во время установки.Исключить проверку подлинности проверки токена идентификатора инструмента Google с помощью обработчика токена .NET JSON

Сведения об исключении: System.IdentityModel.SignatureVerificationFailedException: IDX10501: Ошибка подтверждения подписи. Ключ пытался: «System.IdentityModel.Tokens.X509SecurityKey».

JSON Web Токен Поступило: фишку: «{ "ALG": "RS256", "ребенок": "qwYevA"}. { "ИСС": "https://identitytoolkit.google.com/", "ауд":" 238895676270-i8o5fe2poogs83nki8jl5tgtfm7h9n5l.apps .googleusercontent.com " "IAT": 1445739256, "ехр": 1446948856, "user_id": "", "электронная почта": "", "provider_id": "google.com", "проверено": правда," display_name «:» "}»

var signingToken = new X509SecurityToken(new X509Certificate2(fileName, "notasecret")); 
     TokenValidationParameters validationParameters = 

           new TokenValidationParameters() 

           { 

            IssuerSigningKey = new X509SecurityKey(new X509Certificate2(fileName, "notasecret")), 
            ValidAudience = "238895676270-i8o5fe2poogs83nki8jl5tgtfm7h9n5l.apps.googleusercontent.com", 
            ValidIssuer = "https://identitytoolkit.google.com/", 
            IssuerSigningKeyResolver = (token, a, ski, tvp) => { return new X509SecurityKey(new X509Certificate2(fileName, "notasecret")); }, 
            IssuerSigningToken = signingToken, 

    }; 
     SecurityToken st; 

     var result = tokenHandler.ValidateToken((Request.Cookies["gtoken"]).Value, validationParameters, out st); 

ответ

0

JWT, порожденное идентичности Toolkit подписывается собственной RSA закрытого ключа Идентификационный инструментария, а не .p12 загруженный во время установки.

Вам необходимо загрузить текущие активные сертификаты Identity Toolkit X509 от https://www.googleapis.com/identitytoolkit/v3/relyingparty/publicKeys?key={YOUR_SERVER_API_KEY}, выбрать сертификат для «ребенка» в полученном вами JWT и создать сертификат X509Certificate2 с использованием этого сертификата.

SERVER_API_KEY может быть сгенерирован в Google Developers Console, где вы создали клиентов OAuth2.

+0

Спасибо Цзинь. Можете ли вы подробнее рассказать о том, как я могу создать сертификат с использованием publicKeys в .NET? Какая польза от * .p12, упомянутого в документах? Кажется, что каждый пример в документах использует * .p12. – user3220309

+0

Я не специалист по .NET, но, вероятно, вы можете использовать что-то вроде нового X509Certificate2 (Convert.FromBase64String (certString)) , где certString можно загрузить, как описано выше. Файл .p12 содержит ваш собственный секретный ключ, который вы можете использовать для подтверждения своей учетной записи разработчика при вызове API в Google. Кто-либо еще не знает ваш секретный ключ, поэтому они не могут получить доступ к вашим данным проекта в Google. Открытый сертификат Google Identity Toolkit используется для другого направления - вашему серверу необходимо проверить, что IdToken действительно выдан Google Identity Toolkit. –

+0

Получил! Для любого в/из будущего, путь, который сертификат передается из запроса GET по методу publicKeys, необходимо преобразовать в действительный текст для метода FromBase64String (поскольку он отправлен raw). В моем случае я сбивал с толку \ n как допустимые символы в сертификате. Спасибо Джин. – user3220309