OAuth 2.0 oppdateringstokenflyt for hybridapp
Bruk OAuth 2.0 oppdateringstokenflyt for hybridapp til å gi hybridapper direkte administrasjon av nettøkter når en første økt utløper. Når godkjenningserveren gir et nytt tilgangstoken med tildelingstypen hybrid_refresh, inkluderes økt-ID-ene (SID) for de forespurte domenene i svaret. Hybridappen kan fastsette informasjonskapsler for Lightning-, Visualforce- og innholdsdomener og bruke frontdoor.jsp til å bygge bro for tilgangstokenet til en nettøkt og slik gi uavbrutt tjeneste. Oppdateringstokenflyten for hybridapp fornyer tilgangstokener som er utstedt av OAuth 2.0-nettserver-, brukeragent- og hybridapp-tokenflyten.
Nødvendige utgaver
| Tilgjengelig i både Salesforce Classic (ikke tilgjengelig i alle organisasjoner) og Lightning Experience |
| Tilgjengelig i alle versjoner |
Når en hybridapp – via en ekstern klientapp – har mottatt et tilgangstoken, kan den bruke et oppdateringstoken til å få en ny økt når den gjeldende økten utløper. Den eksterne klientappens verdi for tidsavbrudd av økt bestemmer når et tilgangstoken ikke er gyldig lenger, og når det skal søkes om et nytt med et oppdateringstoken.
For å få bedre sikkerhet aktiverer du oppdateringstokenrotasjon i den eksterne klientappen når du konfigurerer dens OAuth-innstillinger. Når denne innstillingen er aktivert, utsteder den eksterne klientappen et nytt oppdateringstoken sammen med tilgangstokenet hver gang flyten kalles opp. Det forrige oppdateringstokenet blir automatisk ugyldiggjort. Oppdateringstokenrotasjon sikrer at hvert oppdateringstoken brukes bare én gang per bruker, slik at oppdateringstokener ikke kan brukes til å få nye tilgangstokener. Hvis noen prøver å bruke et oppdateringstoken som har blitt rotert ut, gjør Salesforce det gjeldende oppdateringstokenet og eventuelle tilknyttede tilgangstokener ugyldige. For å få et nytt oppdateringstoken må klienten fullføre en ny flyt.
invalid_grant-feil når du prøver å be om et token.Oppdateringstokenflyten for hybridappen involverer følgende trinn.
- Appen bruker det eksisterende oppdateringstokenet til å be om et nytt tilgangstoken.
- Etter at forespørselen er bekreftet, vil Salesforce utstede et nytt tilgangstoken til appen.
- Appen fastsetter SID-ene i domenenes øktinformasjonskapsler direkte og bygger bro til en nettøkt.
Be om et nytt tilgangstoken
Appen kan bruke oppdateringstokenet til å få et nytt tilgangstoken ved å sende en POST-forespørsel om oppdateringstoken til Salesforce-sluttpunktet.
Den eksterne klientappen kan sende client_id og client_secret i hoveddelen av oppdateringstokenforespørselen POST, som vist her.
POST /services/oauth2/token HTTP/1.1
Host: login.salesforce.com/
grant_type=hybrid_refresh&
client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&
client_secret=1955279925675241571&
refresh_token=your token here
I stedet for å sende klientlegitimasjon som parametere i hoveddelen i POST-forespørselen om oppdateringstokenet, kan du bruke gjennom HTTP Basic-godkjenningsskjemaet. Dette skjemaets format krever client_id og client_secret i godkjenningshodet til innlegget: Authorization: Basic64Encode(client_id:secret).
client_id og client_secret skilles med et kolon (:). Du finner mer informasjon i Rammeverk for OAuth 2.0-godkjenning.
Dette eksemplet viser en POST-forespørsel om oppdateringstoken for hybridapp som bruker HTTP Basic-godkjenningsskjemaet i stedet for å sende klientlegitimasjon i POST-forespørselens hoveddel.
POST /services/oauth2/token HTTP/1.1
Host: login.salesforce.com
Authorization: Basic
client_id=3MVG9lKcPoNINVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCscA9GE&
client_secret=1955279925675241571
grant_type=hybrid_refresh&
refresh_token=your token here
client_id og client_secret sendes i POST-teksten, ignoreres godkjenningshodet.Inkluder følgende parametere i begge formatene for POST-forespørsel om oppdateringstoken.
| Parameter | Beskrivelse |
|---|---|
client_id
|
Forbrukernøkkelen til den eksterne klientappen. For å få tilgang til forbrukernøkkelen finner du den eksterne klientappen i Appbehandling for ekstern klient og velger Rediger innstillinger fra rullegardinlisten. Utvid deretter delen OAuth-innstillinger og klikk på Forbrukernøkkel og Hemmelighet. Du blir noen ganger bedt om å bekrefte identiteten din før du kan vise forbrukernøkkelen. |
client_secret
|
Forbrukerhemmeligheten for den eksterne klientappen. For å få tilgang til forbrukerhemmeligheten finner du den eksterne klientappen fra rullegardinlisten External Client App Manager og velger Rediger innstillinger. Utvid deretter delen OAuth-innstillinger og klikk på Forbrukernøkkel og Hemmelighet. Du blir noen ganger bedt om å bekrefte identiteten din før du kan vise forbrukerhemmeligheten. |
grant_type
|
OAuth 2.0-utstedelsestypen som den eksterne klientappen ber om. Verdien må være hybrid_refresh for denne flyten. |
refresh_token
|
Token hentet fra webserver, brukeragent eller hybridapp-tokenflyt. Denne verdien er en hemmelighet. Iverksett nødvendige tiltak for å beskytte den. Denne parameteren returneres bare hvis den eksterne klientappen er konfigurert med et refresh_token-omfang. |
client_assertion
|
I stedet for å sende en client_secret, kan du gi en client_assertion og client_assertion_type. Hvis det ikke oppgis noen client_secret-parameter, ser Salesforce etter client_assertion og client_assertion_type. Se Bruk client_assertion i stedet for client_secret. |
client_assertion_type
|
Oppgi denne verdien når du bruker Verdien av |
format
|
Hvis det ikke er inkludert i forespørselens hode, kan du spesifisere det forventede returformatet.
|
Salesforce utsteder et nytt tilgangstoken
Når forespørselen er bekreftet, sender Salesforce et nytt tilgangstoken til appen. Her er et eksempel på et JSON-svar fra Salesforce.
{ "id":"https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P",
"issued_at":"1278448384422",
"instance_url":"https://yourInstance.salesforce.com/",
"signature":"SSSbLO/gBhmmyNUvN18ODBDFYHzakxOMgqYtu+hDPsc=",
"access_token":"00Dx0000000BV7z!AR8AQP0jITN80ESEsj5EbaZTFG0RNBaT1cyWk7TrqoDjoNIWQ2ME_sTZzBjfmOE6zMHq6y8PIW4eWze9JksNEkWUl.Cju7m4",
"token_type":"Bearer",
"scope":"web visualforce refresh_token lightning content",
"cookie-clientSrc":"10.xxx.xx.xx",
"sidCookieName":"sid",
"cookie-sid_Client":"0000000...",
"content_domain":"MyDomainName.file.force.com",
"content_sid":"00Dxx0000006Gb…",
"lightning_domain":"MyDomainName.lightning.force.com",
"lightning_sid”:”00Dxx000000…",
"csrf_token":"ABCD…",
"visualforce_domain":"MyDomainName.vf.force.com",
"visualforce_sid":"00Dxx000000…"}
Og her er et eksempel på et XML-svar.
<Oauth>
<access_token>00Dx0000000BV7z!AR8AQP0jITN80ESEsj5EbaZTFG0RNB...</access_token>
<token_type>Bearer</token_type>
<scope>web visualforce refresh_token lightning content</scope>
<cookie-clientSrc>10.xxx.xx.xx</cookie-clientSrc>
<sidCookieName>sid</sidCookieName>
<cookie-sid_Client>0000000...</cookie-sid_Client>
<content_domain>MyDomainName.file.force.com</content_domain>
<content_sid>00Dxx0000006Gb…</content_sid>
<lightning_domain>MyDomainName.lightning.force.com</lightning_domain>
<lightning_sid>00Dxx000000…</lighning_sid>
<csrf_token>ABCD…</csrf_token>
<visualforce_domain>MyDomainName.vf.force.com</visualforce_domain>
<visualforce_sid>00Dxx000000…</visualforce_sid>
<instance_url>https://yourInstance.salesforce.com/</instance_url>
<id>https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P</id>
<issued_at>1278448101416</issued_at>
<signature>CMJ4l+CCaPQiKjoOEwEig9H4wqhpuLSk4J2urAe+fVg=</signature>
</Oauth>
Dette eksempelet viser et URL-kodet svar.
access_token=00Dx0000000BV7z%21AR8AQP0jITN80ESEsj5E...&
token_type=Bearer&
instance_url=https%3A%2F%2FyourInstance.salesforce.com&
id=https://login.salesforce.com%2Fid%2F00Dx0000000BV7z%2F005x00000012Q9P&
issued_at=1278448101416&
signature=CMJ4l%2BCCaPQiKjoOEwEig9H4wqhpuLSk4J2...
cookie-clientSrc=10.xxx.xx.xx&
content_domain=MyDomainName.file.force.com&
content_sid=00Dxx0000006Gb...&
lightning_domain=MyDomainName.lightning.force.com&
lightning_sid=00Dxx000000...&
csrf_token=ABCD...&
visualforce_domain=MyDomainName.vf.force.com&
visualforce_sid=00Dxx000000...&
scope=web+visualforce+refresh_token+lightning+content&
sidCookieName=sid&
cookie-sid_Client=0000000...&
Følgende parametere kan inkluderes i hovedinnholdet i svaret.
| Parameter | Beskrivelse |
|---|---|
access_token
|
OAuth-token som en ekstern klientapp bruker til å be om tilgang til en beskyttet ressurs på vegne av klientprogrammet. Andre tillatelser i form av omfang kan følge med tilgangstokenet. |
token_type
|
En Bearer-tokentype, som brukes til alle svar som inkluderer et tilgangstoken. |
instance_url
|
En URL-adresse som indikerer forekomsten av brukerens organisasjon. Eksempel: https://yourInstance.salesforce.com/. |
id
|
URL-adresse for identitet som kan brukes til å identifisere brukeren og til å be om mer informasjon om brukeren. Se URL-adresser for identitet. |
issued_at
|
Tidsstempel for når signaturen ble opprettet, i millisekunder. |
signature
|
Base64-kodet HMAC-SHA256-signatur signert med client_secret. Signaturen kan inkludere den sammenkjedede IDen og issued_at value, som du kan bruke til å bekrefte at URL-adressen for identitet ikke har blitt endret siden serveren sendte den. |
sfdc_site_url
|
Hvis brukeren er medlem av et Experience Cloud-nettsted, oppgis URL-adressen til nettstedet. |
sfdc_site_id
|
Hvis brukeren er medlem av et Experience Cloud-nettsted, oppgis brukerens nettsteds-ID. |
content_domain
|
Domenet for innholdsøkten, som tilordnes til innholds-SID: Du mottar denne verdien bare hvis du tildeler |
content_sid
|
SID-en som er knyttet til domenet for innholdsøkten. Salesforce returnerer en unik SID som hybridappen fastsetter direkte i domenets øktinformasjonskapsel. Du mottar denne verdien bare hvis du tildeler |
lightning_domain
|
Domenet for Lightning-økten, som tilordnes til Lightning SID: Du mottar denne verdien bare hvis du tildeler |
lightning_sid
|
SID-en som er knyttet til domenet for Lightning-økten. Salesforce returnerer en unik SID som hybridappen fastsetter direkte i domenets øktinformasjonskapsel. Du mottar denne verdien bare hvis du tildeler |
visualforce_domain
|
Domenet for Visualforce-økten, som tilordnes til Visualforce SID: Du mottar denne verdien bare hvis du tildeler |
visualforce_sid
|
SID-en som er knyttet til domenet for Visualforce-økten. Salesforce returnerer en unik SID som hybridappen fastsetter direkte i domenets øktinformasjonskapsel. Du mottar denne verdien bare hvis du tildeler |
csrf_token
|
CSRF (Cross-Site Request Forgery)-tokenet som skal hindre angrep under underordnede økter. Du mottar denne verdien bare hvis du tildeler |
scope
|
Omfangene som er knyttet til tilgangstokenet. Omfang definerer ytterligere hvilke typer beskyttede ressurser denne klienten kan få tilgang til. Du tildeler omfang til en ekstern klientapp når du bygger den, og de inkluderes i OAuth-tokenene i godkjenningsflyten. Du finner gyldige parametere i OAuth-omfang. |
sidCookieName
|
Navnet på øktinformasjonskapselen som hybridappen bruker som direkte tilknytning til en nettøkt. Standardverdien er sid. |
cookie-sid_Client
|
En øktinformasjonskapsel som oppdager og hindrer tukling med en økt. Denne øktinformasjonskapselen gjør det mulig for hybridappen å knytte seg direkte til en nettøkt. |
cookie-clientSrc
|
En øktinformasjonskapsel som brukes som sikkerhetsbeskyttelse. Denne øktinformasjonskapselen gjør det mulig for hybridappen å knytte seg direkte til en nettøkt. |
parent_sid
|
En SID som er knyttet til brukerens overordnede brukergrensesnittøkt. |
App fastsetter domene-SID-er og bygger bro til en nettøkt
Hybridappen angir domenenes tilknyttede SID-er i øktinformasjonskapslene for direkte tilknytning til en nettøkt. Se Behandle informasjonskapslinger i OAuth 2.0-hybridappflyt for å se eksempler på informasjonskapsler som angis for hvert domene.
For implementeringer som tilbakestiller brukerdivisjon av objekter for innstillingen Tilbakestill til standarddivisjon ved pålogging, må hybridappen forene en nettøkt ved bruk av frontdoor.jsp. Hvis du vil ha mer informasjon, kan du se Bruk Frontdoor.jsp til å bygge bro mellom økter i Salesforce. Hvis du vil vite mer om brukerdivisjoner, kan du se Organisere data med divisjoner.
