2017-07-21 4 views
0

konnte nicht ausgegeben werden. Unsere Organisation hat kürzlich Box zum Ersetzen von freigegebenen Windows-Ordnern übernommen. Die kleine Entwicklergruppe, der ich angehöre, muss Dateien von mindestens einer Box-Freigabe hochladen und herunterladen, und so beginnen wir gerade mit der API.Fehler bei der Verwendung eines im Kasten erstellten RSA-Schlüssels mit Box C# SDK-Projekt

Unsere Gruppe verwendet derzeit Visual Studio 2013, um in C# mit einem bevorzugten Ziel von .NET 4.0 zu entwickeln. Die aktuelle Version des SDK (2.15.6) ist nicht kompatibel mit unserer Plattform, aber wenn wir frühere Versionen betrachten, sollten wir in der Lage sein, Version 2.12.1 mit unserer bestehenden Plattform zu nutzen. Das SDK enthält eine Lösung mit C# -Methoden für den Zugriff auf die API-Aufrufe und eine Lösung mit Beispielcode.

Derzeit versuche ich, den Beispielcode zu erhalten, meine Anmeldeinformationen zu konsumieren und auf dem Server zu authentifizieren.

Innerhalb der Box-Entwicklerwerkzeuge habe ich eine Anwendung erstellt und die integrierte Box-Konfigurationsoption verwendet, um ein Public/Private-Schlüsselpaar zu generieren, das als JSON-Datei dargestellt wird.

Wo ich auflege ist, wenn ich versuche, das Schlüsselpaar mit dem Box.V2.Samples.JWTAuth Projekt zu verwenden. Ich kopierte den privaten Schlüssel aus der JSON-Datei ersetzt die \ n die mit tatsächlichen Zeilenumbrüchen und klebte es in die private_key.pem Datei:

Private Key

ich die anderen Werte in app.config platziert und begann mit der Konsole App, die ein Unable to cast Fehler erzeugt:

Error message

Wie kann ich von einem BouncyCastle RsaPrivateCrtKeyParamaters zu einem BouncyCastle AsymmetricCipherKeyPair Objekt Objekt erhalten?

bearbeiten

konnte ich den problematischen Codeblock aufzuspüren. Von 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); 

Aus meiner Lektüre scheint es, wie der Code mit Vorwegnahme die privaten Schlüssel von einem öffentlichen/privaten Paar zu extrahieren, die liefert (zumindest derzeit nicht) nicht, was Box ist und was ich Lieferung scheint schon vom RsaPrivateCrtKeyParameters Typ zu sein, so dass diese Besetzung (nicht mehr) notwendig ist.

+0

Klingt wie Sie in boxed sind Vielleicht. Sie können Ihren Code veröffentlichen. –

+0

Ich sehe was du da gemacht hast. Code gefunden und hinzugefügt. –

Antwort

0

Aus Ihrer Frage nicht klar ist, ob Sie den Code zu schreiben versuchen, dies zu tun, oder ein Tool zu konfigurieren versuchen, aber programmatisch, wäre es:

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

Ich versuchte zu klären; Im Moment versuche ich den im SDK bereitgestellten Beispielcode zu verwenden. –

+0

Es scheint dann, dass ReadObject bereits einen RsaPrivateCrtKeyParameters zurückgibt, in diesem Fall, nur zu diesem werfen und ToRSA übergeben, keine Notwendigkeit für die AsymmetricCipherKeyPair. –

Verwandte Themen