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;