残念ながら、IdP からアクセス トークンを取得するために、ユーザー データ (情報、ロールなど) を含む有効で信頼できる x509 証明書を生成する方法がわかりません。
証明書を生成するには、この記事を参照してくださいOpenSSL で自己署名証明書を作成する方法
IdP はどのようにこのクライアント証明書をチェックして検証できますか?
Keycloakのドキュメントは出発点として適切です。ユーザー・キーのDN全体が必要な場合は、「Adding X.509 Client Certificate Authentication to a Browser Flow」および「Adding X.509 Client Certificate Authentication to a Direct Grant Flow」を確認してください。構成 X509 でのこの正規表現:
- set "ユーザー ID を抽出する正規表現" : (.*)
- たとえば、「usercertificate」というユーザー属性を追加し、そこに DN をコピーします。
Keycloakのどこかにサーバー証明書の対応物をインストールする必要がありますか?
すべての証明書ではなく、「usercertificate」と呼ばれるユーザー ユーザー属性に DN のみを追加できます。
クライアント証明書をキークロークに渡すための正しい形式 (CURL など) は何ですか?
URL : https://localhost:9445/auth/realms//protocol/openid-connect/token
Keycloak TLS セッションを開くコードの例:
public String openSession(
File p12File,
String passphrase,
String clientId)
throws IOException, GeneralSecurityException {
try (FileInputStream fis = new FileInputStream(p12File);) {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream(p12File), passphrase.toCharArray());
HttpClient httpClient = HttpClients
.custom()
.setSSLContext(new SSLContextBuilder()
.loadTrustMaterial(null, TrustAllStrategy.INSTANCE)
.loadKeyMaterial(keyStore, passphrase.toCharArray())
.build())
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.build();
HttpPost httpPost = new HttpPost(tokenEndpoint);
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
String data = "grant_type=password" + "&client_id="+ clientId;
StringEntity input = new StringEntity(data);
httpPost.setEntity(input);
HttpResponse response = httpClient.execute(httpPost);
return IOUtils.toString(response.getEntity().getContent(), "UTF-8");
}
}
秘密鍵も渡す必要がありますか?その理由は?
番号