
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;