Frank
Frank

Reputation: 298

How to send end user name of api invoker to the backend in wso2 apim

I am testing the custom mediation feature of wso2 apim 4.0.0 publisher portal to send end user name of api invoker to the backend. I followed this reference and created the following custom sequence:

<sequence name="test" xmlns="http://ws.apache.org/ns/synapse"> 
<header name="user" expression="substring-before(get-property('api.ut.userId'), '@')" scope="transport"/>
</sequence> 

Added this sequence as a custom request mediation of my test api. The api itself nothing but simple rest api that returns static string, besides it prints all headers to console:

@RestController
@RequestMapping("greet")
public class GreetApi {

    @GetMapping
    public String greet(@RequestHeader Map<String,String> headers) {
        System.out.println(headers);
        return "Greetings";
    }
}

But it's not printing the end user name as a custom header in console:

{activityid=3221a82e-0679-4f6e-9a36-bd9abdefb6a4, accept=*/*, host=localhost:8080, user=, connection=Keep-Alive, user-agent=Synapse-PT-HttpComponents-NIO}

Any navigation to address this issue is highly appreciated

Upvotes: 0

Views: 76

Answers (1)

ycr
ycr

Reputation: 14604

Another approach is to pass the JWT token coming from the client to the back and decode it and get the username. For this add the following to the deployment.toml

[apim.oauth_config]
enable_outbound_auth_header = true

Upvotes: 0

Related Questions