2017-07-21 1 views
0

Notre organisation a récemment adopté Box pour remplacer les dossiers partagés Windows. Le petit groupe de développement dont je fais partie aura besoin de télécharger et de télécharger des fichiers à partir d'au moins un partage Box et donc nous commençons tout juste avec l'API.Impossible de diffuser l'erreur à l'aide de la clé RSA créée par la boîte avec le projet Boîte SDK C#

Notre groupe utilise actuellement Visual Studio 2013 pour développer en C# avec une cible préférée de .NET 4.0. La version actuelle du SDK (2.15.6) n'est pas compatible avec notre plate-forme, mais en regardant les versions précédentes, il semble que nous devrions pouvoir utiliser la version 2.12.1 avec notre plate-forme existante. Le SDK inclut une solution avec des méthodes C# pour accéder aux appels d'API et une solution avec un exemple de code. Actuellement, j'essaie d'obtenir l'exemple de code pour consommer mes informations d'identification et m'authentifier auprès du serveur.

Dans les outils de développement Box, j'ai créé une application et utilisé l'option de configuration Box intégrée pour générer une paire de clés publique/privée qui est présentée sous la forme d'un fichier JSON.

Où je me suis accroché est quand j'essaie d'utiliser la paire de clés avec le projet Box.V2.Samples.JWTAuth. Je copiais la clé privée hors du fichier JSON, remplacé le \ n est avec des retours chariot réels et collé dans le fichier private_key.pem:

Private Key

J'ai placé les autres valeurs dans app.config et a commencé à la console application, qui produit une erreur Unable to cast:

Error message

Comment puis-je obtenir d'un BouncyCastle objet RsaPrivateCrtKeyParamaters à un objet AsymmetricCipherKeyPair BouncyCastle?

Modifier

j'ai pu retrouver le bloc de code problématique. De SDK\Box.V2.JWTAuth\BoxJWTAuth.cs:

 var pwf = new PEMPasswordFinder(this.boxConfig.JWTPrivateKeyPassword); 
     AsymmetricCipherKeyPair key; 
     using (var reader = new StringReader(this.boxConfig.JWTPrivateKey)) 
     { 
      key = (AsymmetricCipherKeyPair)new PemReader(reader, pwf).ReadObject(); 
     } 
     var rsa = DotNetUtilities.ToRSA((RsaPrivateCrtKeyParameters)key.Private); 
     this.credentials = new SigningCredentials(new RsaSecurityKey(rsa), SecurityAlgorithms.RsaSha256Signature, SecurityAlgorithms.Sha256Digest); 

De ma lecture, il semble que le code anticipe devoir extraire la clé privée d'une paire publique/privée qui n'est pas ce que Box fournit (, pas au moins) et ce que je 'm fournisseur semble déjà être du type RsaPrivateCrtKeyParameters donc cette distribution peut (ne plus être) nécessaire.

+0

On dirait que vous êtes coincé dans Peut-être. vous pouvez poster votre code. –

+0

Je vois ce que tu as fait là. Code situé et ajouté. –

Répondre

0

On ne sait pas de votre question de savoir si vous essayez d'écrire du code pour ce faire, ou d'essayer de configurer un outil, mais un programme, il serait:

RSAPrivateCrtKeyParameters priv = ...; 
RSAKeyParameters pub = new RSAKeyParameters(false, priv.getModulus(), priv.getPublicExponent()); 
AsymmetricCipherKeyPair kp = new AsymmetricCipherKeyPair(pub, priv); 
+0

J'ai essayé de clarifier; en ce moment j'essaye d'utiliser l'exemple de code fourni dans le SDK. –

+0

Il semble alors que ReadObject retourne déjà un RsaPrivateCrtKeyParameters, dans ce cas, transtypage juste à cela et passez à ToRSA, pas besoin de AsymmetricCipherKeyPair. –