OAuth 2.0 JWT Bearer -kulku palvelimien integroimiseksi
Joissakin tapauksissa haluat valtuuttaa palvelimia käyttämään tietoja kirjautumatta sisään joka kerta, kun palvelimet vaihtavat tietoja keskenään. Tällöin voit käyttää OAuth 2.0 JSON Web Token (JWT) -haltijan kulkua. Tämä kulku käyttää sertifikaattia JWT-pyynnön allekirjoittamiseen eikä vaadi käyttäjiltä suoria toimenpiteitä. Tämä kulku vaatii kuitenkin, että asiakassovellus on hyväksytty aiemmin.
Vaaditut versiot
| Käytettävissä: Salesforce Classicissa ja Lightning Experiencessa |
| Käytettävissä: kaikissa versioissa |
Käyttämällä OAuth 2.0 JWT -haltijan tunnuksen kulkua, asiakassovellus lähettää JWT-valtuuden Salesforcen OAuth-valtuuden päätepisteeseen Salesforce käsittelee JWT-valtuuden, joka sisältää digitaalisen allekirjoituksen, ja luovuttaa käyttöoikeusvaltuuden sovelluksen aiemman hyväksymisen perusteella.
Tämä esimerkki esittelee kulun eri vaiheet.
- Raporttipalvelu aloittaa öisen eräraporttinsa.
- Yhdistetty sovellus lähettää JWT-valtuuden Salesforce-valtuuksien päätepisteeseen. JWT sallii identiteetti- ja suojaustietojen jakamisen eri suojaustoimialueiden välillä.
- Salesforce vahvistaa JWT-valtuuden allekirjoituksen perusteella käyttämällä aiemmin määritettyä sertifikaattia ja lisäparametrejä.
- Mikäli JWT on voimassa ja käyttäjä tai yhdistetty sovellus on hyväksytty aiemmin, Salesforce myöntää käyttöoikeusvaltuuden. Aiempi hyväksyntä tapahtuu jollakin seuraavista tavoista:
- Jos yhdistetyn sovelluksesi käytännöksi on valittu Pääkäyttäjän hyväksymät käyttäjät esivaltuutetaan, voit käyttää profiileja ja käyttöoikeusjoukkoja.
- Jos yhdistetyn sovelluksesi käytännöksi on valittu Kaikki käyttäjät voivat valtuuttaa itsensä, voit käyttää loppukäyttäjien hyväksymistä ja päivitysvaltuuden tarjoamista. Asiakassovellus ei kuitenkaan tarvitse tämänhetkistä tai tallennettua päivitysvaltuutta. Asiakassovelluksen ei myöskään tarvitse välittää asiakassalaisuutta valtuuden päätepisteeseen.
Huomautus Salesforce myöntää molemmille vaihtoehdoille uuden käyttöoikeusvaltuuden vain, jos alkuperäinen käyttöoikeusvaltuus sisältää vähintään yhden vakiomuotoisen vaikutusalueen, joka ei olerefresh_token-vaikutusalue. - Yhdistetty sovellus käyttää käyttöoikeusvaltuutta käyttääkseen Salesforce-palvelimella sijaitsevaa suojattua dataa.
- Raporttipalvelu noutaa valtuutetun datan sen öiseen raporttiinsa.
Nyt käymme tämän valtuutuskulun läpi vaiheittain.
Luo JWT
Salesforce vaatii, että JWT on allekirjoitettu RSA SHA256 -algoritmilla, joka käyttää allekirjoituksen salaisuutena palvelimelle ladattua sertifikaattia. Varmista ennen tämän valtuutuskulun käyttämistä, että suoritat nämä vaiheet.
- Lataa X509-sertifikaatti Java Key Store (JKS) -säiliöön. Sertifikaatin enimmäiskoko on 4 kt. Jos koko ylittyy, kokeile käyttää DER-koodattua tiedoston koon pienentämiseen.
- Rekisteröi X509-sertifikaatti yhdistetylle sovellukselle. Sertifikaatti vastaa sovelluksen yksityistä avainta. Kun yhdistetty sovellus tallennetaan, sen
client_idjaclient_secretluodaan ja kohdistetaan sovellukselle. - Laadi sovellus, joka luo JWT-valtuuden, joka allekirjoitetaan X509-sertifikaatin yksityisellä avaimella. Yhdistetty sovellus käyttää sertifikaattia allekirjoituksen vahvistamiseen. JWT-tunnuksen täytyy noudattaa yleisiä muotoilusääntöjä, jotka on määritetty osoitteessa https://tools.ietf.org/html/rfc7519.
Huomautus Salesforce ei vaadi, että JWT-haltijatunnuksesi sisältäisi JWT ID (JTI) -väitteitä. Jos JWT-haltijatunnuksesi kuitenkin sisältää JTI-väitteen, Salesforce vahvistaa, että JTI-väitettä ei ole lähetetty ennen. Tämä vahvistus estää JWT-toistohyökkäykset.
Noudata seuraavia ohjeita luodaksesi kelvollisen JWT-valtuuden.
- Laadi JWT-otsake seuraavassa muodossa:
{"alg":"RS256"}. - Base64url-koodaa JWT-otsake osoitteessa http://tools.ietf.org/html/rfc4648#page-7 kuvatulla tavalla. Lopputulos muistuttaa
eyJhbGciOiJSUzI1NiJ9-arvoa. - Laadi JWT-lausekkeiden JSON-lausekkeiden joukko käyttämällä seuraavia parametrejä.
Alla on esimerkki JWT-valtuuden JSON-lausekkeiden joukosta.Parametri Kuvaus issMyöntäjän täytyy sisältää sen yhdistetyn sovelluksen OAuth- client_id, jolle rekisteröit sertifikaatin.audKohdeyleisö tunnistaa valtuutuspalvelimen tarkoitettuna kohdeyleisönä. Valtuutuspalvelimen täytyy vahvistaa, että kyseessä on valtuudelle tarkoitettu kohdeyleisö.
Käytä kohdeyleisön arvon valtuutuspalvelimen URL-osoitetta: https://login.salesforce.com, https://test.salesforce.com tai https://site.force.com/customers, jos toteutetaan Experience Cloud -sivustolle.
subJos olet toteuttamassa tätä kulkua Experience Cloud -sivustolle, aiheen täytyy sisältää käyttäjän käyttäjänimi.
Voit käyttää aiheen (
sub) sijaan päätietuetta (prn) myöhempää yhteensopivuutta varten. Jos molemmat on määritetty, käytetäänprn-arvoa.expPäivämäärä ja aika, jolloin valtuus vanhenee, ilmaistuna sekuntien määränä 1970-01-01T0:0:0Z UTC-aikavyöhykkeellä. Salesforce sallii 3 minuutin puskurin kellonaikojen vääristymille. Jos vanhenemisajaksi on esimerkiksi määritetty 1 735 743 600 sekuntia tai 1. tammikuuta 2025 klo 15:00:00 UTC, valtuus on edelleen voimassa tähän päivämäärään 15:03:00 UTC. {"iss": "3MVG99OxTyEMCQ3gNp2PjkqeZKxnmAiG1xV4oHh9AKL_rSK.BoSVPGZHQ ukXnVjzRgSuQqGn75NL7yfkQcyy7", "sub": "my@email.com", "aud": "https://login.salesforce.com", "exp": "1333685628"} - Suojaa JWT Claims Set Base64url:illa ilman rivinvaihtoja. Esimerkki:
eyJpc3MiOiAiM01WRzk5T3hUeUVNQ1EzZ05wMlBqa3FlWkt4bm1BaUcxeFY0b0hoOUFLTF9yU0su Qm9TVlBHWkhRdWtYblZqelJnU3VRcUduNzVOTDd5ZmtRY3l5NyIsICJwcm4iOiAibXlAZW1haWwu Y29tIiwgImF1ZCI6ICJodHRwczovL2xvZ2luLnNhbGVzZm9yY2UuY29tIiwgImV4cCI6ICIxMzMz Njg1NjI4In0= - Luo merkkijono salatulle JWT Headerille ja salaa JWT-lausekkeiden joukko tässä muodossa.
Tässä esimerkissä salattu JWT Header on korostettu.encoded_JWT_Header + "." + encoded_JWT_Claims_SeteyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiAiM01WRzk5T3hUeUVNQ1EzZ05wMlBqa3FlWkt4bm1BaUcxeFY0b0hoOUFLTF9yU0su Qm9TVlBHWkhRdWtYblZqelJnU3VRcUduNzVOTDd5ZmtRY3l5NyIsICJwcm4iOiAibXlAZW1haWwu Y29tIiwgImF1ZCI6ICJodHRwczovL2xvZ2luLnNhbGVzZm9yY2UuY29tIiwgImV4cCI6ICIxMzMz Njg1NjI4In0= - Lataa X509-sertifikaatti JKS-säiliöstä.
- Allekirjoita tuloksena oleva merkkijono RSA SHA256 -algoritmilla.
- Luo merkkijono merkkijonosta tästä vaiheesta tässä muodossa.
Tässä esimerkissä base64-salattu allekirjoitus on korostettu.existing_string + "." + base64_encoded_signatureeyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiAiM01WRzk5T3hUeUVNQ1EzZ05wMlBqa3FlWkt4bm1BaUcxeFY0b0hoOUFLTF9yU0su Qm9TVlBHWkhRdWtYblZqelJnU3VRcUduNzVOTDd5ZmtRY3l5NyIsICJwcm4iOiAibXlAZW1haWwu Y29tIiwgImF1ZCI6ICJodHRwczovL2xvZ2luLnNhbGVzZm9yY2UuY29tIiwgImV4cCI6ICIxMzMz Njg1NjI4In0=.iYCthqWCQucwi35yFs-nWNgpF5NA_a46fXDTNIY8ACko6BaEtQ9E6h4Hn1l_pcwcK I_GlmfUO2dJDg1A610t09TeoPagJsZDm_H83bsoZUoI8LpAA1s-2aj_Wbysqb1j4uDToz 480WtEbkwIv09sIeS_-QuWak2RXOl1Krnf72mpVGS4WWSULodgNzlKHHyjAMAHiBHIDNt 36y2L2Bh7M8TNWiKa_BNM6s1FNKDAwHEWQrNtAeReXgRy0MZgQY2rZtqT2FcDyjY3JVQb En_CSjH2WV7ZlUwsKHqGfI7hzeEvVdfOjH9NuaJozxvhPF489IgW6cntPuT2V647JWi7ng
Tämä Java-koodi on yksinkertainen esimerkki JWT-haltijatunnuksen laatimisesta.
import org.apache.commons.codec.binary.Base64;
import java.io.*;
import java.security.*;
import java.text.MessageFormat;
public class JWTExample {
public static void main(String[] args) {
String header = "{\"alg\":\"RS256\"}";
String claimTemplate = "'{'\"iss\": \"{0}\", \"sub\": \"{1}\", \"aud\": \"{2}\", \"exp\": \"{3}\", \"jti\": \"{4}\"'}'";
try {
StringBuffer token = new StringBuffer();
//Encode the JWT Header and add it to our string to sign
token.append(Base64.encodeBase64URLSafeString(header.getBytes("UTF-8")));
//Separate with a period
token.append(".");
//Create the JWT Claims Object
String[] claimArray = new String[5];
claimArray[0] = "3MVG99OxTyEMCQ3gNp2PjkqeZKxnmAiG1xV4oHh9AKL_rSK.BoSVPGZHQukXnVjzRgSuQqGn75NL7yfkQcyy7";
claimArray[1] = "my@email.com";
claimArray[2] = "https://login.salesforce.com";
claimArray[3] = Long.toString( ( System.currentTimeMillis()/1000 ) + 300);
claimArray[4]=<JTI>
MessageFormat claims;
claims = new MessageFormat(claimTemplate);
String payload = claims.format(claimArray);
//Add the encoded claims object
token.append(Base64.encodeBase64URLSafeString(payload.getBytes("UTF-8")));
//Load the private key from a keystore
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(new FileInputStream("./path/to/keystore.jks"), "keystorepassword".toCharArray());
PrivateKey privateKey = (PrivateKey) keystore.getKey("certalias", "privatekeypassword".toCharArray());
//Sign the JWT Header + "." + JWT Claims Object
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(token.toString().getBytes("UTF-8"));
String signedPayload = Base64.encodeBase64URLSafeString(signature.sign());
//Separate with a period
token.append(".");
//Add the encoded signature
token.append(signedPayload);
System.out.println(token.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}Pyydä käyttöoikeusvaltuutta
Yhdistetty sovellus lähettää pyynnön Salesforce-instanssin valtuuksien päätepisteeseen pyytääkseen käyttöoikeusvaltuutta. Sen viesti sisältää JWT-valtuuden.
Tämä esimerkki näyttää esimerkin valtuuden pyynnöstä.
POST /services/oauth2/token HTTP/1.1
Host: login.example.com
Content-Type: application/x-www-form-urlencoded
grant_type= urn:ietf:params:oauth:grant-type:jwt-bearer&
assertion=eyJpc3MiOiAiM01WRz...[omitted for brevity]...ZTLisää viestiin nämä parametrit.
| Parametri | Kuvaus |
|---|---|
grant_type
|
Käytä näitä arvoja apurahatyypille: urn:ietf:params:oauth:grant-type:jwt-bearer. |
assertion
|
Vahvistus on koko JWT-arvo. |
format
|
(Valinnainen) Käytä määrittääksesi odotetun palautuksen muoto. Tämä parametri korvaa pyynnön otsakkeen. Näitä muotoja tuetaan.
|
Vaikutusalue-parametri
Et voi määrittää vaikutusalueita JWT-haltijan valtuuden kulussa. Vaikutusalueet myönnetään yhdistetyn sovelluksen Sallitut käyttäjät -käytännön tai organisaatiosi API-käyttöoikeuksien hallinta-asetusten perusteella, kuten alla olevassa taulukossa esitetään.
| Asetus | Tulos |
|---|---|
| Sallitut käyttäjät -käytäntö: Kaikki käyttäjät voivat valtuuttaa itsensä | Kun valtuutus on suoritettu onnistuneesti, käyttöoikeusvaltuuden palauttamat vaikutusalueet saadaan aiemmin hyväksytyistä vaikutusalueista. |
| Sallitut käyttäjät -käytäntö: Pääkäyttäjän hyväksymät käyttäjät esivaltuutetaan | Yhdistetylle sovellukselle kohdistetut vakiomuotoiset ja mukautetut vaikutusalueet palautetaan käyttöoikeusvaltuudella. |
| API-käyttöoikeuden hallinta: Yhdistettyjen sovellusten salliminen organisaatiossasi | Yhdistetylle sovellukselle kohdistetut vakiomuotoiset ja mukautetut vaikutusalueet palautetaan käyttöoikeusvaltuudella. Jos sallit yhdistetyt sovellukset organisaatiossasi etkä saa odotettuja vaikutusalueita, noudata seuraavia ohjeita.
|
Salesforce myöntää käyttöoikeusvaltuuden
OAuth 2.0 JWT -haltijan ja SAML-vahvistuksen haltijan kulkujen pyynnöt tutkivat käyttäjän puolesta kaikki aikaisemmat hyväksymiset, jotka sisältävät päivitysvaltuuden. Jos Salesforce löytää vastaavia hyväksyntöjä, se yhdistää hyväksyttyjen vaikutusalueiden arvot. Sen jälkeen Salesforce tarjoaa käyttöoikeusvaltuuden. Jos Salesforce ei löydä aiempia hyväksyntöjä, joka sisälsivät päivitysvaltuuden tai minkä tahansa käytettävissä olevista vaikutusalueista, pyyntö epäonnistuu valtuuttamattomana.
Salesforce-instanssi lähettää vastauksen yhdistetylle sovellukselle onnistuneen vahvistuksen jälkeen. OAuth 2.0 JWT -haltijan valtuuden kulun valtuuden vastaus noudattaa samaa formaattia kuin valtuutuskoodin kulku, vaikka päivitysvaltuutta ei koskaan myönnetä.
Tämä esimerkki näyttää Salesforcelta saadun vastauksen.
{"access_token":"00Dxx0000001gPL!AR8AQJXg5oj8jXSgxJfA0lBog.
39AsX.LVpxezPwuX5VAIrrbbHMuol7GQxnMeYMN7cj8EoWr78nt1u44zU31
IbYNNJguseu",
"scope":"web openid api id","instance_url":"
https://yourInstance.salesforce.com","id":"
https://yourInstance.salesforce.com
/id/00Dxx0000001gPLEAY/005xx000001SwiUAAS","token_type":"Bearer"}Vastauksen runko sisältää seuraavat parametrit:
| Parametri | Kuvaus |
|---|---|
access_token |
OAuth-valtuus, jota yhdistetty sovellus käyttää pyytääkseen pääsyä suojattuun resurssiin asiakassovelluksen puolesta. Käyttöoikeusvaltuus voi sisältää muita käyttöoikeuksia vaikutusalueiden muodossa. |
token_type |
Bearer-valtuuden tyyppi, jota käytetään kaikille vastauksille, jotka sisältävät käyttöoikeusvaltuuden. |
scope |
Vaikutusalueet määräytyvät yhdistetyn sovelluksen Sallitut käyttäjät -käytännön tai organisaatiosi API-käyttöoikeuksien hallinta -asetusten mukaan. Lisätietoja on kohdassa Vaikutusalue-parametri. |
instance_url |
URL-osoite, joka osoittaa käyttäjän organisaation instanssin. Esimerkki: https://yourInstance.salesforce.com/. |
id |
Identiteetti-URL-osoite, jota voidaan käyttää käyttäjän tunnistamiseen ja käyttäjän lisätietojen noutamiseen. Lisätietoja on kohdassa Tunnus-URL-osoitteet. |
sfdc_site_url |
Jos käyttäjä on Experience Cloud -sivuston jäsen, yhteisön URL-osoite tarjotaan. |
sfdc_site_id |
Jos käyttäjä on Experience Cloud -sivuston jäsen, käyttäjän sivuston tunnus tarjotaan. Experience Cloud -sivustoilla tämä kulku sisältää "sfdc_site_id"-arvon valtuuksien päätepisteessä. Tämä sivuston tunnus saatetaan vaatia Connect REST API -pyynnöissä. |
Käytä suojattua dataa
Kun yhdistetty sovellus on vastaanottanut access_token, se voi välittää sen haltijatunnuksena Valtuutus-header-pyynnössä. Tämä esimerkki näyttää Experience Cloud -sivuille lähetetyn REST API -kutsun:
https://site.force.com/customers/services/data/v32.0/ -H
"Authorization: Bearer 00D50000000IehZ\!AQcAQH0dMHZfz972Szmpkb58urFRkgeBGsxL_QJWwYMfAbUeeG7c1E6 LYUfiDUkWe6H34r1AAwOR8B8fLEz6n04NPGRrq0FM"

