2015-10-30 4 views
2

Im не получая вышеуказанную ошибку при отправке следующего тела в/лексемы операции Box OAuth: grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&client_id=.............&client_secret=..........&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Im81NGFtcGR6In0=.eyJpc3MiOiIyOHRhZmZ0ejhlenhncnI3aTBocmZnMGlteTc2MjRuMyIsInN1YiI6IjU0MjA5MSIsImJveF9zdWJfdHlwZSI6ImVudGVycHJpc2UiLCJhdWQiOiJodHRwczovL2FwaS5ib3guY29tL29hdXRoMi90b2tlbiIsImp0aSI6IjE0NDYyMzA3MTgxMjM0NTYiLCJleHAiOjE0NDYyMzA3NjgsImlhdCI6MTQ0NjIzMDcxOH0=.ANwpzohhFyUmPMw1wh6kM8xzqsUanS3UIdEPN40hvpVDmzI9wS0fTpmxWvudGPPXXmeE0Cr+frbMx+R9V9DvzfJsGv2+mu1bqwsjHwPkOy06IigAvgiJPPFt9CuIdmY/H6pGtDpODfeau77KrT0OJhpQX9He4xy0maS26D7yc/5F3fyxZXHdG/XzTpx88xTpg2HbEJ5ImeZjxkFf6ZH4Un0ZY9TJ3TSEITTcqRxhAUN2qAttnX8H5jmKWyTE5U78+f1LzQz1lPjnQsj/BSRCrF2jkf7N0LfJwq3U1BXNBWiEZRW8wqvaTvZLpiODDsl6VuG/xs1m549wGVwyXCglJQ==OpenSSL не в состоянии проверить данные: ошибка: 0906D06C: PEM подпрограммы: PEM_read_bio: нет линия старта в коробке API

Теперь JWT, параметра утверждения, корректно проверяется в jwt.io, а открытый ключ, определенный для Box, проверяется в пользовательском интерфейсе Box, а также в jwt.io.

Это указывает на то, что то, что я отправляю, является правильным.

Однако у коробки есть проблема ..... любая помощь будет очень получена!

+0

Обновление: не получая никакой помощи ни от какого штатного персонала, я решил использовать privateKey с форматированием .PEM, противоположный открытому ключу, вместо хранилища ключей java, из которого были созданы два. После изменения моего кода, чтобы использовать этот файл, я получаю ту же ошибку: { «ошибка»: «invalid_grant», «error_description»: «OpenSSL не в состоянии проверить данные:» } Было бы хорошо, если какой-то ящик сотрудники указывают, что делает их API и ожидает! –

+0

Я пробовал 4, да ЧЕТВЕРТЫЙ, способы генерации подписи для моего JWT. Все они проверяются в независимом источнике, и ВСЕ из них возвращают ошибку, которая является предметом этого сообщения. Последнее использовало классы BC, но Box все же отклоняет подпись. Я бы предположил, что ящик жестко кодирует что-то в своем SDK, который не находится в какой-либо другой сигнатуре, и почему независимо созданная подпись не проверяется. BOX должен помочь мне, или прийти чистым ... или и то, и другое. –

ответ

1

Право ... это очень раздражает! Несмотря на то, что созданный правильный JWT для других публичных API и имеющий заголовок и тело претензии, а подпись подтверждена jwt.io, ТОЛЬКО ПУТЬ, чтобы получить поле для приема моего JWT, было использование служебных программ JOSE4J, которые Box SDK использует.

Это действительно плохой BOX - поднимите свою игру и поддерживайте JWT, которые являются действительными, а не только фирменные, созданные классами JOSE4J !!!

+0

Досадно, что более подробная информация не предоставляется для устранения неполадок и устранения проблемы. Однако, как автор jose4j и вкладчик в RFC, который он реализует, я хотел бы пояснить, что jose4j вовсе не является запатентованным. Если вы обнаружите определенные дефекты, если они не соответствуют спецификациям, сообщите мне, чтобы я мог их исправить. –

2

Проблема заключается в открытии открытого и закрытого ключей, сгенерированных с помощью openssl в командной строке DOS.

Вы можете следовать инструкциям в этой ссылке: https://box-content.readme.io/docs/app-auth

Прежде всего, вы должны скачать Cygwin инструмент: http://www.cygwin.com/

Затем в консоли Cygwin можно запустить следующие команды:

Для закрытого ключа

openssl genrsa -aes256 -out private_key.pem 2048 

Для открытого ключа

openssl rsa -pubout -in private_key.pem -out public_key.pem 

Не забудьте включить полный заголовок и нижний колонтитул: '----- BEGIN PUBLIC KEY -----' И «----- END PUBLIC KEY ----- '

После того, как вы создали открытый ключ, вам нужно будет добавить его в конфигурацию вашего приложения. По окончании вы получите Открытый ключ ID.

Вы должны иметь возможность подключаться к вашим ключам с помощью API-интерфейса Box.

var privateKey = File.ReadAllText("private_key.pem"); 

var boxConfig = new BoxConfig(CLIENT_ID, CLIENT_SECRET, ENTERPRISE_ID, privateKey, JWT_PRIVATE_KEY_PASSWORD, JWT_PUBLIC_KEY_ID); 
var boxJWT = new BoxJWTAuth(boxConfig); 

var adminToken = boxJWT.AdminToken(); 
Console.WriteLine("Admin Token: " + adminToken); 

Я надеюсь, что это поможет вам

+0

Во-первых, я использую Mac и, во-вторых, как я уже писал несколько раз, эти ключи проверялись независимо несколько раз. В-третьих, я использую ваши команды для письма, разрезая и вставляя их. Но, наконец, вы подтвердили мои подозрения, разместив код, который опирается на ваш SDK, который использует утилиты JOSE4j. Я запускаю свой код в контейнере OSGi, который имеет более старые версии классов BC, поэтому использование SDK невозможно. Если вы протестировали свой API с помощью чего-либо, кроме служебных программ JOSE4j, у вас была бы такая же проблема, как у меня. –

+0

Хорошо, в моем случае это не проблема в SDK (мы говорим о простых обертках звонков в службы обслуживания BOX), но в крахмале для генерации ключей. Не просто вырезать и вставлять ... возможно, вам нужно найти конкретный инструмент для MAC для генерации обоих ключей, я думаю. –

+0

Я имею в виду Unix-подобную среду и интерфейс командной строки в качестве альтернативы Cygwin –

0

JWT в примере в вопросе, который является значением утверждения появляется parameter, что его части кодируется с помощью регулярного кодирования base64, а не кодирование base64url предписанного JWT/JWS. Многие/большинство версий base64 очень либеральны в декодировании и с удовольствием принимают base64 или base64url взаимозаменяемо. Я бы предположил, что именно поэтому, несмотря на то, что JWT технически не придерживается спецификаций, он корректно проверяет, когда используется непосредственно на чем-то вроде jwt.io.Тем не менее, это может вызвать проблемы, если не правильно закодировано при отправке в тело HTTP-запроса, который, как ожидается, будет application/x-www-form-urlencoded. Например, «+» будет декодироваться в пространстве, которое будет игнорироваться многими декодерами base64. Описание ошибки, которую вы видите, похоже, не совпадает с тем, что является проблемой, но это может повредить данные и быть проблемой в какой-то момент (если, возможно, вы не кодируете значения параметров и не показываете их в незашифрованном виде вопрос). Использование base64url, а не base64 будет означать, что значение утверждения parameter не нужно кодировать по URL и не будет запутано во время декодирования URL. И base64url будет совместим с JWT. По крайней мере, это позволит вам исключить некоторые потенциальные проблемы.

+0

Спасибо Брайан, хорошая точка, однако у меня base64URL закодировал их. Все утверждения проверяются в Box, так как вы возвращаете конкретные ошибки в претензии, если это не так. В этом случае они прошли, и это только сигнатура, которая терпит неудачу. –

0

У меня была точно такая же проблема, с тем же сообщением об ошибке из Box и JWT, корректно проверяемым в jwt.io.

Оказывается, проблема была в кодировке Base64 vs Base64Url. Как указал Брайан, jwt.io может использовать кодировку Base64 и Base64Url, но Box требует Base64Url. В используемой структуре я использую Base64 по умолчанию, и это было проблемой, и после принудительного использования Base64Url во всех частях утверждения JWT вход в окно успешно завершился.

 Смежные вопросы

  • Нет связанных вопросов^_^