Skip to main content

Notifications

Announcements

No record found.

Business Central forum
Suggested answer

System.InvalidOperationException: Misused header name when adding Authorization

Posted on by 18

I am trying to write AL code in a CodeUnit to get an OAuth token from my Auth0 service.  I can see the failed attempts in the Auth0 logs.  I realized I need to add the Base64 encrypted credentials to the request header to make it work.  So I added that code in and am getting the following error:

System.InvalidOperationException: Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.

The error happens when I add this code:

RequestHeader.Remove('Authorization');
RequestHeader.Add('Authorization', AuthString);

And here is the relevant portion of my CodeUnit:

procedure getAuthToken(ClientSecret: Text; ClientId: Text; RedirectURL: Text; AuthURL: Text)
    var
        AuthPayload: Text;
        AuthString: Text;
        ResponseText: Text;
        TokenResponseText: Text;
        JObjectResult: JsonObject;
        JObjectRequest:  JsonObject;
        WebClient: HttpClient;
        RequestHeader: HttpHeaders;
        ResponseMessage: HttpResponseMessage;
        RequestMessage: HttpRequestMessage;
        RequestContent: HttpContent;
        TokenOutStream: OutStream;
        TokenExpiry: DateTime;
        Base64Convert: Codeunit "Base64 Convert";
        
    begin
    //Create webservice call
    RequestMessage.Method := 'POST';
    RequestMessage.SetRequestUri(AuthURL);

    //Create webservice header
    AuthString := STRSUBSTNO('%1:%2', ClientId, ClientSecret);
    AuthString := Base64Convert.ToBase64(AuthString);
    AuthString := STRSUBSTNO('Basic %1', AuthString);

    //Payload needed? This might as well be a different implementation!
    //It's just an example where the credentials are stored as a json payload

    //Create json payload
    JObjectRequest.Add('grant_type', 'client_credentials');
    // JObjectRequest.Add('client_id', ClientId);
    // JObjectRequest.Add('client_secret', ClientSecret);
    JObjectRequest.Add('audience', 'https://xxxx/');
    JObjectRequest.Add('scope', 'xxxx');
    JObjectRequest.WriteTo(AuthPayload);

    //Get Request Content
    RequestContent.WriteFrom(AuthPayload);

    //RequestHeader.Clear();
    RequestContent.GetHeaders(RequestHeader);
    RequestHeader.Remove('Content-Type');
    RequestHeader.Add('Content-Type', 'application/x-www-form-urlencoded');
    RequestHeader.Remove('Authorization');
    RequestHeader.Add('Authorization', AuthString);

    RequestMessage.Content := RequestContent;

Categories:
  • Suggested answer
    Nitin Verma Profile Picture
    Nitin Verma 21,023 Moderator on at
    RE: System.InvalidOperationException: Misused header name when adding Authorization

    Hi,

    Please refer the below link

    www.navwithnav.com/.../

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Anton Venter – Community Spotlight

Kudos to our October Community Star of the month!

Announcing Our 2024 Season 2 Super Users!

A new season of Super Users has arrived, and we are so grateful for the daily…

Dynamics 365 Community Newsletter - September 2024

Check out the latest community news

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 290,554 Super User 2024 Season 2

#2
Martin Dráb Profile Picture

Martin Dráb 228,588 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,148

Leaderboard

Featured topics

Product updates

Dynamics 365 release plans