Sie befinden sich hier:
PKCE-Erweiterung (Proof Key for Code Exchange)
Verwenden Sie die Erweiterung "Proof Key for Code Exchange (PKCE)" von OAuth 2.0, um die Sicherheit Ihrer OAuth- und Authentifizierungsanbieterimplementierungen zu erhöhen. Sie können PKCE auf organisationsweiter Ebene erforderlich machen, es für eine bestimmte verbundene Anwendung erforderlich machen und es automatisch für unterstützte Authentifizierungsanbieter aktivieren.
Erforderliche Editionen
| Verfügbarkeit: alle Editionen |
Während des OAuth-Autorisierungscode-Flows und seiner Ableitungen stellt die PKCE-Erweiterung sicher, dass der Client, der den Flow initiiert, derselben Client ist, der den Flow abschließt. Während dieser Flows fordert eine Anwendung einen Autorisierungscode von Salesforce an, der dann gegen ein Zugriffstoken ausgetauscht wird. In der Regel kann die Anwendung die Tokenanforderung durch Einbeziehung des Verbrauchergeheimnisses der verbundenen Anwendung schützen. Da es sich bei dem Verbrauchergeheimnis um Informationen handelt, die nur der Anwendung und Salesforce bekannt sind, fungiert es als Kennwort für den Zugriff auf den Salesforce-Token-Endpunkt. Selbst wenn ein Angreifer irgendwie Zugriff auf einen Autorisierungscode erhält, kann er ihn nicht zum Abrufen eines Zugriffstokens verwenden, sofern er nicht über das Verbrauchergeheimnis verfügt.
Öffentliche Clients wie mobile Anwendungen und Einzelseitenanwendungen können das Verbrauchergeheimnis jedoch nicht vertraulich halten. Im Gegensatz zu privaten Client-Anwendungen mit einer traditionellen Client-Server-Architektur verfügen öffentliche Clients nicht über ein privates Backend, in dem sie das Verbrauchergeheimnis speichern können. Wenn ein öffentlicher Client das Verbrauchergeheimnis in der Tokenanforderung sendet, besteht das Risiko, dass es nach außen dringt. Daher wird empfohlen, das Verbrauchergeheimnis niemals in Tokenanforderungen für einen öffentlichen Client einzuschließen.
Wenn kein Verbrauchergeheimnis vorliegt, ist die Anwendung anfällig, wenn ein Angreifer den Autorisierungscode abfängt und versucht, ihn gegen ein Zugriffstoken auszutauschen. PKCE hilft Ihnen dabei, die Lücken der Verbrauchergeheimnisse durch einen Satz mit gehashten Parametern zu füllen, die nur Ihre Anwendung und Salesforce nachvollziehen können. Während eines Flows, der PKCE implementiert, erstellt die Anwendung eine zufällige Zeichenfolge, die als Parameter code_verifier bezeichnet wird. Anschließend wird dieser Wert mit einem SHA-256-Algorithmus gehasht. Dieser Hashwert entspricht dem Parameter code_challenge. Ein wichtiges Konzept der SHA-256-Hashing-Funktion besteht darin, dass sie nur in eine Richtung funktioniert. Sie können den Parameter code_challenge über den Parameter code_verifier abrufen, indem Sie den SHA-256-Algorithmus ausführen. Sie können ihn jedoch nicht rückwärts ausführen, um den Parameter code_verifier aus dem Parameter code_challenge abzurufen.
Das Konzept der unidirektionalen Funktion spielt eine wichtige Rolle bei der Funktionsweise von PKCE. Wenn die Anwendung ihre erste Anforderung für einen Autorisierungscode sendet, enthält sie den gehashten Parameter code_challenge. Wenn sie dann ein Zugriffstoken anfordert, wird der Parameter code_verifier eingeschlossen. Salesforce verfügt nun über beide Parameter und kann den SHA-256-Algorithmus für den Wert von code_verifier ausführen, um ihn mit code_challenge zu vergleichen. Wenn die Werte übereinstimmen, kann Salesforce überprüfen, ob von derselben Anwendung sowohl die Autorisierungsanforderung als auch die Tokenanforderung gesendet wurden. Selbst wenn ein Angreifer den Autorisierungscode hat, kann er ihn nicht gegen ein Zugriffstoken austauschen, da er nicht über die PKCE-Parameter verfügt, die nur Ihre Anwendung und Salesforce kennen.
Sie sollten PKCE für öffentliche Clients immer implementieren. Für private Clients wird empfohlen, PKCE zu implementieren und das Verbrauchergeheimnis in Tokenanforderungen mit aufzunehmen.
Sie können PKCE optional implementieren, indem Sie beim Erstellen von Varianten des Autorisierungscode-Flows mit Salesforce die Parameter code_challenge und code_verifier einschließen. PKCE wird von den folgenden Flows unterstützt.
- Webserver-Flow
- Hybrider Webserver-Flow
- Alle Variationen des Flows für Autorisierungscode und Anmeldeinformationen, einschließlich der Headless-Registrierung, der Headless-Anmeldung ohne Kennwort und der Headless-Gast-Flows. Entsprechende Informationen finden Sie unter Headless-Identitäts-Flows.
Damit PKCE erzwungen wird, sollten Sie die folgenden Sicherheitsmaßnahmen ergreifen.
- Machen Sie PKCE auf organisationsweiter Ebene erforderlich – und zwar auf der Seite "Einstellungen für OAuth und OpenID Connect". Wenn diese Einstellung aktiviert ist, werden alle Autorisierungscode-Flow-Variationen, die nicht PKCE verwenden, automatisch blockiert.
- Machen Sie PKCE für bestimmte verbundene Anwendungen erforderlich. Wenn Sie als Entwickler einer verbundenen Anwendung diese Einstellung aktivieren, müssen Sie PKCE implementieren, wenn Sie Autorisierungs-Flows mit dieser Anwendung erstellen.
- Verwenden Sie PKCE für einen Authentifizierungsanbieter. Für unterstützte Authentifizierungsanbieter können Sie automatisch PKCE verwenden, indem Sie eine einzelne Einstellung auswählen. Die folgenden Authentifizierungsanbieter unterstützen PKCE.
- Generieren der PKCE-Parameter
Verwenden Sie den PKCE-Generator-Endpunkt, um schnell die Parametercode_challengeundcode_verifierzu generieren, die Sie in Variationen des Autorisierungscode-Flows implementieren können.
Generieren der PKCE-Parameter
Verwenden Sie den PKCE-Generator-Endpunkt, um schnell die Parameter code_challenge und code_verifier zu generieren, die Sie in Variationen des Autorisierungscode-Flows implementieren können.
- Aktivieren Sie "Cross-Origin Resource Sharing (CORS)" für OAuth-Endpunkte, wodurch CORS automatisch für den Endpunkt
/services/oauth2/pkce/generatoraktiviert wird. - Senden Sie zum Generieren der Parameter
code_challengeundcode_verifiereine HTTP-GET-Anforderung an den Endpunkt/services/oauth2/pkce/generatorin Ihrem Anmelde-URL für "Meine Domäne" oder dem Experience Cloud-Site-URL. Schließen Sie in diese Anforderung keine Kopfzeilen oder Textparameter ein.Im Folgenden finden Sie eine Beispielanforderung, die einen Anmelde-URL für "Meine Domäne" verwendet.GET /services/oauth2/pkce/generator? HTTP 1.1 Host: MyDomainName.my.site.salesforce.comIm Folgenden finden Sie eine Beispielanforderung, die einen Experience Cloud-Site-URL verwendet.GET /services/oauth2/pkce/generator? HTTP 1.1 Host: MyDomainName.my.site.comSalesforce antwortet mit diesen PKCE-Parametern.
Hier eine Beispielantwort.Parameter Beschreibung code_challenge_methodDie zum Berechnen des Parameters code_challengeaus dem Parametercode_verifierverwendete Methode. Salesforce verwendet dieS256-Methode, die den Parametercode_challengeaus dem Parametercode_verifiermithilfe eines SHA256-Algorithmus berechnet. Weitere Informationen finden Sie in Abschnitt 4.2 in RFC 7636: Proof Key for Code Exchange by OAuth Public Clients.code_challengeGibt den SHA256-Hash-Wert des
code_verifier-Werts in der Token-Anforderung an. Der Wert ist Base-64 URL-codiert, wie in Abschnitt 5 von RFC 4648: The Base16, Base32, and Base64 Data Encodings definiert.Fügen Sie beim Konfigurieren Ihres Autorisierungs-Flows diesen Wert in die Autorisierungsanforderung ein.
code_verifierGibt 128 Bytes zufälliger Daten mit ausreichend Entropie an, sodass das Ableiten des Codewerts erschwert wird. Legen Sie diesen Parameter fest, um Lauschangriffe auf den Autorisierungscode zu verhindern. Der Wert ist Base-64 URL-codiert, wie in Abschnitt 5 von RFC 4648: The Base16, Base32, and Base64 Data Encodings definiert.
Fügen Sie beim Konfigurieren Ihres Autorisierungs-Flows diesen Wert in die Token-Anforderung ein.
{ “code_challenge_method”:“S256” “code_challenge”:“JB7nT*************” “code_verifier”:“GkLvw**************” }
Wenn Sie den Webserver-Flow, den hybriden Webserver-Flow und Variationen des Flows für Autorisierungscode und Anmeldeinformationen konfigurieren, fügen Sie die Parameter code_challenge und code_verifier entsprechend den Anweisungen in Ihre Anforderungen ein.

