программно читать расшифрованное значение из server.xml - PullRequest
2 голосов
/ 03 октября 2019

У меня есть сервер Websphere Liberty со следующим server.xml:

<managedThreadFactory jndiName="concurrent/threadFactory" maxPriority="5" />

<openidConnectClient id="AppID"
  inboundPropagation="required"
  clientId="${APPID_CLIENT_ID}"
  clientSecret="${APPID_CLIENT_SECRET}"
  authorizationEndpointUrl="https://${APPID_HOST}/oauth/v4/${APPID_TENANT_ID}/authorization"
  tokenEndpointUrl="https://${APPID_HOST}/oauth/v4/${APPID_TENANT_ID}/token"
  jwkEndpointUrl="https://${APPID_HOST}/oauth/v4/${APPID_TENANT_ID}/publickeys"
  issuerIdentifier="https://${APPID_HOST}/oauth/v4/${APPID_TENANT_ID}"
  tokenEndpointAuthMethod="basic"
  signatureAlgorithm="none"
  trustAliasName="${APPID_HOST}"
  trustStoreRef="appidtruststore"
  audiences="${APPID_CLIENT_ID}" />

Можно ли программно прочитать расшифрованное значение для clientSecret="${APPID_CLIENT_SECRET}" из кода приложения Java?

1 Ответ

3 голосов
/ 03 октября 2019

Зависит от того, как закодировано значение. Если он зашифрован, по определению нет способа легко расшифровать его (в противном случае это нарушит цель шифрования).

Если вы просто делаете обратимое кодирование (например, XOR или AES), вы можете расшифровать егоиспользуя функцию Liberty.

Сначала убедитесь, что в server.xml включена следующая функция:

<feature>passwordUtilities-1.0</feature>

Затем вы можете использовать API com.ibm.websphere.crypto.PasswordUtil для декодирования значениякак это:

String rawValue = // get from System properties or env var
String decodedValue = PasswordUtil.decode(rawValue);
...