HttpRequest and Named Credential 的介紹與說明 from ChatGPT

最近在把 JWT 的 authorization 換成 Named Credential 的方式,自覺對於一些基本的知識點還不夠紮實,所以就請教了 ChatGPT,我覺得它真的講解得蠻好的。




以下節錄他的說明:


解釋範例程式

問:

請幫我解釋這段 Salesforce apex code: HttpRequest req = new HttpRequest(); req.setMethod('POST'); req.setHeader('Content-Type', 'application/json; charset=utf-8'); req.setHeader('Content-Length', String.valueOf(payLoad.length())); req.setHeader('Authorization', 'Bearer ' + jwtToken); req.setEndpoint(requestUrl); req.setBody(payLoad);


答:


這段 Apex 代碼主要在建立一個 HTTP 請求,並且設置請求的方法、標頭、終結點和請求正文。

具體來說:

  • HttpRequest req = new HttpRequest(); 建立了一個 HttpRequest 對象,用於表示一個 HTTP 請求。

  • req.setMethod('POST'); 設置了請求的方法為 POST。

  • req.setHeader('Content-Type', 'application/json; charset=utf-8'); 設置了請求的 "Content-Type" 標頭為 "application/json; charset=utf-8"。

  • req.setHeader('Content-Length', String.valueOf(payLoad.length())); 設置了請求的 "Content-Length" 標頭為請求正文的長度。

  • req.setHeader('Authorization', 'Bearer ' + jwtToken); 設置了請求的 "Authorization" 標頭為 "Bearer " 加上某個變量 jwtToken 的值。

  • req.setEndpoint(requestUrl); 設置了請求的終結點(即請求傳送到哪個 URL)為某個變量 requestUrl 的值。

  • req.setBody(payLoad); 設置了請求的正文(即請求所帶的數據)為某個變量 payLoad 的值。

之後,你可以使用 Http 類中的某個方法來發送這個 HTTP 請求,例如:

Http http = new Http(); HttpResponse res = http.send(req);

這樣就會發送一個 HTTP 請求,並且返回一個 HttpResponse 對象,表示請求的回應。



Authorization 的方式

問:
請問 Header 中的 Authorization,通常有哪些方法?


答:


"Authorization" 標頭是 HTTP 協議中的一個標頭,用於表示客戶端的權限。

通常,"Authorization" 標頭會使用以下兩種方法之一:

  • 基本授權:使用用戶名和密碼的組合來授予權限。

示例:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

其中,"QWxhZGRpbjpvcGVuIHNlc2FtZQ==" 是用戶名 "Aladdin" 和密碼 "open sesame" 進行 Base64 編碼後得到的字符串。

  • JWT 授權:使用 JSON Web Token(JWT)來授予權限。

示例:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

其中,"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" 是一個 JWT。

此外,還有其他一些較不常見的授權方法,例如:

  • 過期授權:使用過期的用戶名和密碼的組合來授予權限。
  • 加密授權:使用加密過的用戶名和密碼的組合來授予權限。


Named Credential 的說明

問:

setEndpoint裡的"callout",是否跟 Salesforce 的 named credential 有關?

答:

是的,"callout" 前綴是一種 Salesforce 中的特殊終結點,用於指定請求的終結點為命名凭據中的一個。

命名凭據是 Salesforce 中的一种特殊資源,用於表示外部系統的登錄信息和基本訪問路徑。它可以用於简化對外部系統的訪問,並且可以隐藏真實的登錄信息,以提高安全性。

例如,假設你在 Salesforce 中建立了一個命名凭據 "iDa_PWD",其中包含了外部系統的登錄信息和基本訪問路徑。那麼,你可以使用 "callout:iDa_PWD" 作為終結點來訪問該外部系統。

例如:

HttpRequest req = new HttpRequest(); req.setEndpoint('callout:iDa_PWD' + ath);

在這段代碼中,"callout:iDa_PWD" 是命名凭據的名稱,而 path 是外部系統的具體訪問路徑。






留言

這個網誌中的熱門文章

ISC2 CC (Certified in Cybersecurity Certification) 考試心得

Salesforce證照考試心得 (Administrator and Advanced Administrator)