Pre-request script to automate authorization code grant type

Hey @lunar-module-cosmo13 !

So automating this workflow can be a bit tricky because it typically requires user interaction to provide consent, however if your OAuth provider has a way to bypass the user consent for trusted applications, you can attempt to automate this within the pre-request script section.

Here’s a rough outline of steps:

  1. Generate an auth code
pm.sendRequest({
    url: '{{AuthURL}}?client_id={{ClientId}}&redirect_uri={{redirect URL}}&scope={{Scope}}&response_type=code',
    method: 'GET'
}, function (err, res) {
    var authCode = /* Parse the auth code from the response or the redirect URL. This part depends on your OAuth2.0 provider's implementation. */;
    pm.globals.set('authCode', authCode);
});
  1. Use the auth code to get an access token
pm.sendRequest({
    url: '{{AccessTokenURL}}',
    method: 'POST',
    header: 'Content-Type: application/x-www-form-urlencoded',
    body: {
        mode: 'urlencoded',
        urlencoded: [
            { key: "client_id", value: "{{ClientId}}", disabled: false },
            { key: "client_secret", value: "{{ClientSecret}}", disabled: false },
            { key: "grant_type", value: "authorization_code", disabled: false },
            { key: "redirect_uri", value: "{{redirect URL}}", disabled: false },
            { key: "code", value: pm.globals.get('authCode'), disabled: false }
        ]
    }
}, function (err, res) {
    var jsonData = res.json();
    if(jsonData.access_token) {
        pm.globals.set('accessToken', jsonData.access_token);
    }
});
  1. Then include the access token in your request headers as a variable
Authorization: Bearer {{accessToken}}

Remember:

  • This approach assumes that user consent can be bypassed. If the user has to provide consent, it can’t be fully automated within Postman.
  • Always ensure that ClientSecret is kept secure. Ideally, it shouldn’t be stored or transmitted unless it’s absolutely necessary.
  • This script might need tweaks depending on your OAuth2.0 provider’s specific implementation.