bcquality/microsoft/knowledge/security/prefer-oauth2-over-api-keys-for-external-http-calls.bad.al
Jesper Schulz-Wedde bfda67a95a
Promote security knowledge from community to Microsoft layer (#49)
* Promote security knowledge from community to Microsoft layer

Pure git-mv relocation of the SECURITY domain from the community layer to the Microsoft layer. No content changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address review feedback on security knowledge promotion

- do-not-grant-rights-beyond-a-users-entitlement.md: drop the See sample
  reference to a .good.al file that does not exist
- Remove the 'Contributions welcome' boilerplate line from
  compose-permission-sets, prefer-oauth2, and protect-sensitive-data
- protect-sensitive-data-in-temporary-tables: remove the pointless
  DeleteAll on the locally scoped temp buffer in the good sample and
  reword Best Practice to note local buffers are cleaned up automatically
- Drop guard-bulk-operations-with-istemporary from the promotion; it
  stays in the community layer pending a decision on whether it is security

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Remove Contributions welcome boilerplate from do-not-grant article for consistency

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-14 11:23:57 +02:00

29 lines
960 B
AL

codeunit 50100 "Partner API Client"
{
procedure FetchOrders(var Response: Text): Boolean
var
HttpClient: HttpClient;
HttpRequest: HttpRequestMessage;
HttpResponse: HttpResponseMessage;
ApiKey: Text;
begin
// API key stored as plain Text in a setup table - not IsolatedStorage,
// not SecretText. Rotation means the admin editing a Text field;
// a single disclosure exposes every tenant running this extension.
ApiKey := GetApiKeyFromSetupTable();
HttpRequest.SetRequestUri('https://partner.example.com/orders');
HttpRequest.Method('GET');
HttpRequest.GetHeaders().Add('X-API-Key', ApiKey);
if not HttpClient.Send(HttpRequest, HttpResponse) then
exit(false);
HttpResponse.Content.ReadAs(Response);
exit(HttpResponse.IsSuccessStatusCode);
end;
local procedure GetApiKeyFromSetupTable(): Text
begin
end;
}