Шлюзу APIM не удалось найти сертификат publi c для проверки подписи - PullRequest
0 голосов
/ 23 февраля 2020

мы сталкиваемся с ошибкой блокировки во время проверки токена JWT шлюзом.

Мы тестируем среду интеграции, используя два контейнера docker на двух разных виртуальных машинах. Первый vm содержит APIM 3.0.0, а второй содержит IS 5.9 в качестве диспетчера ключей. IS объединен с Azure AD.

. Мы получаем правильно сформированный токен JWT от IS с пользовательскими данными из Azure, но APIM не смог найти сертификат c publi для проверки подписи. с заданным псевдонимом. Оба компонента wso2 имеют свои собственные client-truststore.jks, обновленные с помощью воссозданного сертификата publi c (мы заменили localhost на publi c IP-адрес vms).

После некоторых полезных деталей:

Это ошибка в журнале контейнера APIM:

[2020-01-30 15:20:00,072]  WARN - SourceHandler I/O error: Received fatal alert: certificate_unknown
[2020-01-30 15:20:00,404] ERROR - GatewayUtils Couldn't find a public certificate to verify signature with alias ZDgzMWM0MTU3NGI3ODkyYTVkN2Q2N2NmYzI5ZWU4ZjcxYTcyYzlkZA_RS256
[2020-01-30 15:20:00,405] ERROR - APIAuthenticationHandler API authentication failure due to Unclassified Authentication Failure
org.wso2.carbon.apimgt.gateway.handlers.security.APISecurityException: Unclassified Authentication Failure
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.isAuthenticate_aroundBody42(APIAuthenticationHandler.java:433) ~[org.wso2.carbon.apimgt.gateway_6.5.349.jar:?]
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.isAuthenticate(APIAuthenticationHandler.java:413) ~[org.wso2.carbon.apimgt.gateway_6.5.349.jar:?]
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.handleRequest_aroundBody36(APIAuthenticationHandler.java:349) [org.wso2.carbon.apimgt.gateway_6.5.349.jar:?]
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.handleRequest(APIAuthenticationHandler.java:320) [org.wso2.carbon.apimgt.gateway_6.5.349.jar:?]
        at org.apache.synapse.rest.API.process(API.java:366) [synapse-core_2.1.7.wso2v131.jar:2.1.7-wso2v131]
        at org.apache.synapse.rest.RESTRequestHandler.apiProcessNonDefaultStrategy(RESTRequestHandler.java:149) [synapse-core_2.1.7.wso2v131.jar:2.1.7-wso2v131]
        at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:95) [synapse-core_2.1.7.wso2v131.jar:2.1.7-wso2v131]
        at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:71) [synapse-core_2.1.7.wso2v131.jar:2.1.7-wso2v131]
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:325) [synapse-core_2.1.7.wso2v131.jar:2.1.7-wso2v131]
        at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:98) [synapse-core_2.1.7.wso2v131.jar:2.1.7-wso2v131]
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) [axis2_1.6.1.wso2v38.jar:?]
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:367) [synapse-nhttp-transport_2.1.7.wso2v131.jar:?]
        at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:412) [synapse-nhttp-transport_2.1.7.wso2v131.jar:?]
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:181) [synapse-nhttp-transport_2.1.7.wso2v131.jar:?]
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) [axis2_1.6.1.wso2v38.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]

Это ключи, предоставленные https://my_is_ip: my_port / oauth2 / jwks :

{
   "keys":[
      {
         "kty":"RSA",
         "e":"AQAB",
         "use":"sig",
         "kid":"ZDgzMWM0MTU3NGI3ODkyYTVkN2Q2N2NmYzI5ZWU4ZjcxYTcyYzlkZA",
         "alg":"RS256",
         "n":"nwcvFrmKaAV3WLgNaronqMHZB5BK7czaRwaKAyM0PTR1KzSa3DJw3CtLtcyz6zvU72JmgFMRyu65H_ly51bCOI6UrpJrKs9bW50fVgjrlqAkCHYIP81s6YgmmLJ-LVZqhAN8g8FH_3b27zbzZ6crspaDmFjSfou4t_A6UTSvQRFbCzp9i5WmQLRHHDy74v9zJWeXCSVA9CknXV4dqpPGMVjJOQzmcaRmZs_rWpdasQUul-D59pY22FrtIziZDLVTerGDGir_dJJboFCzS_DXRch44NJk3cU4lrCcsAP2RXyNhVjJPgmilEnr1aRnxY-WNm_5QKGh37Ez8dLJVVw6LQ"
      },
      {
         "kty":"RSA",
         "e":"AQAB",
         "use":"sig",
         "kid":"ZDgzMWM0MTU3NGI3ODkyYTVkN2Q2N2NmYzI5ZWU4ZjcxYTcyYzlkZA_RS256",
         "alg":"RS256",
         "n":"nwcvFrmKaAV3WLgNaronqMHZB5BK7czaRwaKAyM0PTR1KzSa3DJw3CtLtcyz6zvU72JmgFMRyu65H_ly51bCOI6UrpJrKs9bW50fVgjrlqAkCHYIP81s6YgmmLJ-LVZqhAN8g8FH_3b27zbzZ6crspaDmFjSfou4t_A6UTSvQRFbCzp9i5WmQLRHHDy74v9zJWeXCSVA9CknXV4dqpPGMVjJOQzmcaRmZs_rWpdasQUul-D59pY22FrtIziZDLVTerGDGir_dJJboFCzS_DXRch44NJk3cU4lrCcsAP2RXyNhVjJPgmilEnr1aRnxY-WNm_5QKGh37Ez8dLJVVw6LQ"
      }
   ]
}

Это результат вызова почтальона:

<ams:fault xmlns:ams="http://wso2.org/apimanager/security">
    <ams:code>900900</ams:code>
    <ams:message>Unclassified Authentication Failure</ams:message>
    <ams:description>Unclassified Authentication Failure</ams:description>
</ams:fault>

Это токен JWT:

HEADER

{
  "x5t": "ZDgzMWM0MTU3NGI3ODkyYTVkN2Q2N2NmYzI5ZWU4ZjcxYTcyYzlkZA",
  "kid": "ZDgzMWM0MTU3NGI3ODkyYTVkN2Q2N2NmYzI5ZWU4ZjcxYTcyYzlkZA_RS256",
  "alg": "RS256"
}

PAYLOAD

{
  "at_hash": "hGnuod6ShKRrlkH_P-k4QA",
  "sub": "d6206844-e54b-4ec2-8ace-26b46da24df2",
  "ver": "1.0",
  "richAccettazionePrivacy": "***************",
  "iss": "https://***************:9443/oauth2/token",
  "given_name": "***************",
  "richAttivazioneCarta": "***************",
  "tid": "962b4d1f-a68b-433e-aa78-265ef05d1047",
  "aud": [
    "dSdZgafomIsRXYQr6XyxIZyjp74a",
    "***************"
  ],
  "nbf": 1580399831,
  "azp": "dSdZgafomIsRXYQr6XyxIZyjp74a",
  "extension_codiceFiscale": "***************",
  "scope": "openid",
  "auth_time": "1580399827",
  "name": "***************",
  "exp": 1580403431,
  "iat": 1580399831,
  "personaId": "***************",
  "family_name": "***************",
  "jti": "c3b8c9bf-029c-4e51-8969-07f898e5654f",
  "email": "***************"
}

как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

мы решили добавить публикуемый c сертификат Identity Server в клиент-доверенное хранилище Api Manager с псевдонимом Kid, присутствующим в заголовке токена.

0 голосов
/ 23 февраля 2020

Опубликованный c сертификат закрытого ключа, который используется для подписи токенов, должен быть добавлен в хранилище доверенных сертификатов под псевдонимом gateway_certificate_alias. Дополнительные сведения см. В разделе Импорт сертификата publi c в доверенное хранилище клиента.

Ссылка: https://apim.docs.wso2.com/en/3.0.0/Learn/APISecurity/OAuth2/AccessTokenTypes/jwt-tokens/

...