There are two ways that I use:
- Use GenerateResponse = false
<OAuthV2 name='OAuthV2-GenerateAccessToken'>
<Operation>GenerateAccessToken</Operation>
....
<GenerateResponse enabled='false'/>
</OAuthV2>
This sets context variables, such as:
oauthv2accesstoken.OAuthV2-GenerateAccessToken.access_token
oauthv2accesstoken.OAuthV2-GenerateAccessToken.token_type
oauthv2accesstoken.OAuthV2-GenerateAccessToken.expires_in
oauthv2accesstoken.OAuthV2-GenerateAccessToken.refresh_token
oauthv2accesstoken.OAuthV2-GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.OAuthV2-GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.OAuthV2-GenerateAccessToken.refresh_token_status
âŚand you can then use an AssignMessage policy to build whatever response you like. For example:
<AssignMessage name="AM-ValidToken">
<Set>
<StatusCode>200</StatusCode>
<ReasonPhrase>OK</ReasonPhrase>
<Payload contentType="application/json">{
"success" : true,
"token" : "{oauthv2accesstoken.OAuthV2-GenerateAccessToken.access_token}"
}
</Payload>
</Set>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>
- Use a PostFlow step. This will be a JavaScript that modifies what gets sent back.
<OAuthV2 name='OAuthV2-GenerateAccessToken'>
<Operation>GenerateAccessToken</Operation>
....
<GenerateResponse enabled='true'/>
</OAuthV2>
And then the Javascript step (configure it to run after the GenerateAccessToken) :
<Javascript name='JS-GroomTokenResponse' timeLimit='200' >
<IncludeURL>jsc://dateFormat.js</IncludeURL>
<ResourceURL>jsc://groomTokenResponse.js</ResourceURL>
</Javascript>
And the JS code, which might look like this:
var b1 = JSON.parse(response.content),
propertiesToRemove = ['status', 'refresh_token_status',
'token_type', 'organization_name', 'developer.email',
'scope', 'refresh_count',
'application_name'];
if (b1.access_token) {
propertiesToRemove.forEach(function(item){
delete b1[item];
});
// pretty-print JSON
context.setVariable('response.content', JSON.stringify(b1, null, 2) + '\n');
}