7

バックエンド Web サービスが別のサーバーに存在し、特定の要求が APIM ゲートウェイの認証および承認メカニズムを通過したことを確認する必要がある場合に、JWT が特定の API Manager インスタンスによって発行されたことを検証するための推奨される方法は何ですか?

JWT のヘッダー フィールドには、テナント キー ストア内の証明書へのエンコードされた参照である「x5t」フィールドが含まれていることがわかっています。詳細は次のとおりです。

https://asankastechtalks.wordpress.com/2013/12/05/obtaining-certificate-used-to-sign-a-jwt/

バックエンド Web サービスは別のサーバー上にあるため、何らかの方法で公開キーを配布する必要がありますか? また、現在はデフォルトを使用しているため、JWT の署名に使用される証明書を更新するにはどうすればよいでしょうか?

4

3 に答える 3

2

x5t のデータは証明書全体ではなく、所有している証明書が同じかどうかを識別するのに役立つハッシュに過ぎません。これは、パブリック証明書を受信側サービスにアップロードする必要があることを意味します。

https を使用すると、パブリック証明書をハンドシェイクで取得できます。クライアントは、この証明書が信頼できる CA によって署名されていることを確認できます。ただし、この検証にはそのようなメカニズムはありません。その結果、各公開証明書を信頼する必要がある CA を信頼することはできません。

パブリック証明書への URL リンクを含む別のオプション ヘッダー 'x5u' がありますが、APIM はその値を設定しません。

于 2015-06-18T19:26:30.833 に答える
1

これは、ルックアップとして WSO2 トークンの x5t ハッシュを使用して、ローカル ストアから証明書を取得する方法です。

// Use JwtSecurityTokenHandler to validate the JWT token
var tokenHandler = new JwtSecurityTokenHandler();

// Read the JWT
var parsedJwt = tokenHandler.ReadToken(token);

// Get X509 public certificate
var signerAlgorithm = ((JwtSecurityToken)parsedJwt).SignatureAlgorithm;
var signerHash = ((JwtSecurityToken)parsedJwt).Header["x5t"];
var thumbprint = Encoding.UTF8.GetString(Convert.FromBase64String(signerHash.ToString()));

X509Store store = new X509Store(StoreName.TrustedPublisher);
store.Open(OpenFlags.ReadOnly);
var cert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false)[0];
于 2015-10-30T14:50:52.077 に答える