从cognito获取令牌并在wso2 Enterprise Intigrator中缓存



我需要从Cognito获得令牌,但我不知道如何通过企业集成商获得它。我有client_idclient_secet以及端点。但我无法获得令牌,似乎我没有用正确的参数正确调用端点。

在获得令牌后,我需要缓存它,直到令牌过期,这样我就不必一次又一次地调用

这是我正在尝试的代码

<cache id="cache-sample" scope="per-host" collector="false" hashGenerator="org.wso2.carbon.mediator.cache.digest.DOMHASHGenerator" timeout="5000">
<implementation type="memory" maxSize="1000"/>
</cache>
<header name="client_id" scope="transport" value="XXXXXXXXXXXXXXXXX"/>
<header name="client_secret" scope="transport" value="XXXXXXXXXXXXXXXXXXX"/>
<header name="Content-Type" scope="transport" value="application/json"/>
<property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
<call>
<endpoint>
<address uri="https://xcxxxxxxxxxx.auth.us-east-1.amazoncognito.com/oauth2/token"/>
</endpoint>
</call>
<property name="RESPONSE" value="true" scope="default" type="STRING"/>
<cache scope="per-host" collector="true"/>
<respond/>
<?xml version="1.0" encoding="UTF-8"?>
<api context="/api/myService" name="myService-api" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST" uri-template="/getToken">
<inSequence>
<script language="js"><![CDATA[var payload = mc.getPayloadXML();
var log = mc.getServiceLog();
var client_id = payload..*::client_id.toString();
var client_secret = payload..*::client_secret.toString();
mc.setProperty("client_id", client_id);
mc.setProperty("client_secret", client_secret);]]>
</script>
<payloadFactory media-type="json">
<format/>
<args/>
</payloadFactory>
<property name="ContentType" scope="axis2" type="STRING" value="application/x-www-form-urlencoded"/>
<property expression="fn:concat($ctx:client_id,':',$ctx:client_secret)" name="credentials" scope="default" type="STRING"/>
<property expression="fn:concat('Basic ', base64Encode($ctx:credentials))" name="Authorization" scope="transport" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
<property name="FORCE_POST_PUT_NOBODY" scope="axis2" type="BOOLEAN" value="true"/>
<property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
<cache 
collector="false" 
hashGenerator="org.wso2.carbon.mediator.cache.digest.DOMHASHGenerator" 
id="cognito-token" 
scope="per-host" 
timeout="3600">
<onCacheHit>
<log level="custom">
<property expression="/" name="[usage-service-api]:: CHACHE HIT"/>
</log>
<respond/>
</onCacheHit>
<implementation maxSize="50" type="memory"/>
</cache>
<call>
<endpoint>
<http method="post" uri-template="https://xxxxxxxxxxx.amazoncognito.com/oauth2/token?grant_type=client_credentials"/>
</endpoint>
</call>
<property name="RESPONSE" scope="default" type="STRING" value="true"/>
<cache collector="true" id="cognito-token" scope="per-host"/>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>

对于第一次调用,在这种情况下将发生缓存未命中,它将调用端点并将其存储在缓存中对于第二个调用,直到同一个调用的时间到期,它将命中缓存,即缓存命中,然后它将从onCacheHit中介响应

<onCacheHit>
<respond/>
</onCacheHit>

但在缓存命中后,它将跳过在cacheMediator之后编写的任何语句的执行。所以如果你在某个序列中写作,请将其保留在其他序列中API中可以有多个resources

如果您想知道如何调用此API,请参阅使用wso2 esb 获取cognito acces_token

<log level="custom">
<property expression="/" name="[usage-service-api]:: CHACHE HIT"/>
</log>

上面的代码块记录了CACHE HIT上缓存的内容

最新更新