のための既存の公開鍵を使用してJavaで署名を作成します。そうするために、私はアサーションを作成する必要があります。
「すべてのJWTアサーションは、3つのコンポーネント、ヘッダ、特許請求の範囲、および署名で構成されている
- ヘッダは、JWTの署名に使用するアルゴリズムを指定します
。クレームには正しいトークンを認証して提供するのに必要な情報が含まれています
- 署名はアプリケーションの識別情報を検証するために使用され、公開鍵を使用して検証されます
コード化され連結されると、JWTアサーションが表示されますこのように: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9eyJpc3MiOiJ2Z3。 B2bWFvaDJjZ2ZjNGRuMzFnMWx0cmlhbmdlZCIsInN1YiI。 6IjE2ODczOTQzIiwiZXhwIjoxNDI5MDM3ODYwLCJqdGkiOiJ」だからは、私はボックスのAPIにアクセスし、JWT(JSONウェブトークン)を使用して許可する...</p> <p>を私は再びあなたの助けが必要JWT
、RSA鍵ペアは、私が前に作成する必要がありましたし、ボックスdevolperアプリケーションで公開鍵を堆積する必要がありました。
ここで、署名の作成方法はわかりません。 鍵ペアを作成して解決策を見つけましたが、既にこれを持っているので、コードを修正する方法はわかりません。
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import sun.misc.BASE64Encoder;
public class MainClass {
public static void main(String[] args) throws Exception {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.genKeyPair();
byte[] data = "test".getBytes("UTF8");
Signature sig = Signature.getInstance("MD5WithRSA");
sig.initSign(keyPair.getPrivate());
sig.update(data);
byte[] signatureBytes = sig.sign();
System.out.println("Singature:" + new
BASE64Encoder().encode(signatureBytes));
sig.initVerify(keyPair.getPublic());
sig.update(data);
System.out.println(sig.verify(signatureBytes));
}
}
[Java SDK for Box](https://github.com/box/box-java-sdk)を使用したことはありますか? JWTの認証フローを処理します。自分で書きたい場合は、[JWT実装](https://github.com/box/box-java-sdk/blob/master/src/main/java/com/box/sdk/)をチェックしてください。 BoxDeveloperEditionAPIConnection.java)からインスピレーションを受けています。 –
鍵ペアを生成したら、何らかの形で鍵ペアを保存する必要があります。公開鍵用の1つのPEMファイルと秘密鍵用の1つのPEMファイルは、それを格納するための一般的な方法です。しかし、数週間前にあなたと同様のコードをセットアップしようとしたとき、PAMファイルをJava KeyPariに読み込むプロセスが非常に面倒で、非常に多くのライブラリが含まれていたため、MD5をRSAからHMAC-SHA256に切り替えることになりました。 –