breadcrumbDescription
OAuth 2.0-aktivtokenforløb til sikring af tilsluttede enheder
Hvis du vil integrere IoT-enheder i Salesforce-API'en, skal du bruge OAuth 2.0-aktivtokenforløbet. Aktivtokener er et JWT-godkendelsestoken baseret på åbne standarder til bekræftelse og sikringsanmodninger fra tilsluttede enheder. Aktivtokener identificerer enheden til en backendtjeneste, der behandler strømmen af data og begivenheder fra enheden. Disse tokener tillader registrering af enhedsdata med Salesforce-platformen og linkning af enheden til Salesforce CRM-data om kunder, konto eller kontakt.
EditionsHeading
| Tilgængelig i: både Salesforce Classic og Lightning Experience |
| Tilgængelig i: Alle versioner |
Se Nye tilsluttede apps kan ikke længere oprettes i Spring ’26 for at få flere oplysninger.
Enheder – via tilsluttede apps – bruger OAuth 2.0-aktivtokenforløb til at anmode om et aktivtoken fra Salesforce. I dette forløb udveksles et OAuth-adgangstoken og et aktørtoken for et aktivtoken. Dette forløb kombinerer udstedelse af aktivtoken og aktivregistrering for effektiv tokenudveksling og automatisk linkning til enheder til Service Cloud-aktivdata.
Dine kunder køber f.eks. en tilsluttet enhed og registrerer en konto på din supportlokalitet. Dit firma tilbyder mobilapp, der agerer som en agent for enhedsregistrering. En tilsluttet app gør det muligt for brugeren at oprette forbindelse til enheden, logge ind på din supportlokalitet og registrere enheden. Din lokalitet udsteder et aktivtoken, der identificerer enheden for din Cloud-backendservice til gengæld for et adgangstoken og et aktørtoken.
Efter registreringen kan enheden fungere uafhængigt af af den tilsluttede app, regelmæssigt sende data om dens tilstand og handlinger til din backendtjeneste. Hvis backend proaktivt registrerer en unormal adfærd eller tilstand, opretter den automatisk en sag. Sagen er knyttet til aktivet, hvilket er knyttet direkte til kundens kontaktregistrering og dit firmas supportproces. Enheden kan også signalere, at der mangler forbrugsvarer, f.eks. blæk og identificerer potentielt en ny markedsmulighed.
OAuth 2.0-aktivtokenforløbet involverer følgende generelle trin.
- Konfigurer en tilsluttet app til at udstede aktivtokener for tilsluttede enheder. Se Aktiver Oauth-indstillinger for API-integration..
- Den tilsluttede app anmoder om et adgangstoken fra Salesforce-tokenslutpunktet.
- Når Salesforce har tildelt et adgangstoken, anmoder den tilsluttede app om et adgangstoken ved brug af OAuth 2.0-tokenudvekslingsprotokollen.
- Hvis aktivtoken-JWT er gyldigt, vil tildeler Salesforce et aktivtoken og registrerer enheden.
- Salesforce udgiver en aktivtokenbegivenhed.
Anmod om et adgangstoken
Når en tilsluttet app skal udstede et aktivtoken for den tilsluttede enhed, kalder den først et OAuth 2.0-forløb til at anmode om et adgangstoken. Efter at have modtaget adgangstokenet, udveksler den tilsluttede app det for et aktivtoken, som er krævet til enhedsregistrering.
Almindelige metoder til at hente adgangstokener indeholder OAuth 2.0-webserverforløbet og OAuth 2.0 JWT Bearer-forløbet. Med en browser og et hjælpeprogram som f.eks. cURL, kan du hente og udveksle en godkendelseskode på følgende måde.
- I en browser skal du gå til denne URL, når du har erstattet pladsholderværdierne. https://your_site_url/services/oauth2/authorize?response_type=code&client_id=your_client_id& redirect_uri=your_url_encoded_redirect_uri
- Log ind og godkend din app.
- Når du modtager et tilbagekald, skal du hente godkendelseskoden. Erstat den sammen med andre pladsholderværdier til gengæld for et adgangstoken.
curl -s -k -d "grant_type=authorization_code&code=authorization_code&redirect_uri= your_url_encoded_redirect_uri&client_id=your_client_id&client_secret=your_client_secret" https://your_site_url/services/oauth2/token
Anmod om et AssetToken
Efter modtagelse af et adgangstoken sender den tilsluttede app en anmodning om adgangstoken til Salesforce-tokenets slutpunkt ved brug af OAuth 2.0-tokenudvekslingsprotokollen.
Her er der en eksempelanmodning, der er sendt til Salesforce-tokenslutpunktet ved brug af et usigneret aktørtoken.
POST /services/oauth2/token HTTP/1.1
Host: customersite.my.site.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:token-exchange&
subject_token_type=urn:ietf:params:oauth:token-type:access_token&
subject_token=0DB00001iSr!AR0AQDhXv4xNCYPUwRa3_KyiZxNgNmrJU7QPJUrvBRM9x
3MLnlEbOOsuldLL.3mb.nML1h8G8zAc2zkUU_q.HEM6bY0kOJjDL&
actor_token_type=urn:ietf:params:oauth:token-type:jwt&
actor_token=eyJhbGciOiJub25lIiwidHlwIjoiSldU In0.eyJkaWQiOiI4NTc4OTliOS02OTk4LTQzZD
QtODQ4My0xOTRlODBkNzE4Y2MiLCJBc3NldFRva2VuQ3VzdG9tQXR0cmlidXRlX19jIjoiTXkgVmFsdWUiLC
JBc3NldCI6eyJOYW1lIjoiRGlzaHdhc2hlciIsIlNlcmlhbE51bWJlciI6IjEyMzQ1Njc4In19.
Anmodningen inkluderer disse parametre:
| Parameter | Beskrivelse |
|---|---|
grant_type
|
Brug disse værdier til bevillingstypen: urn:ietf:params:oauth:grant-type:token-exchange. |
subject_token_type
|
Påkrævet. Værdien skal være urn:ietf:params:oauth:token-type:access_token. |
subject_token
|
Påkrævet. Emnetokenet er et sikkerhedstoken, der repræsenterer brugerens identitet på vegne af dem, som anmodningen fremsættes af. For aktivtokener er værdien adgangstokenet. |
actor_token_type
|
Valgfrit, medmindre actor_token er angivet. Værdien skal være urn:ietf:params:oauth:token-type:jwt. |
actor_token
|
Valgfri. Aktørtokenet, som er et sikkerhedstoken, repræsenterer identiteten af den bruger, der er autoriseret til at bruge det ønskede sikkerhedstoken og agere på vegne af emnet. For aktivtokener er værdien et JWT, der indeholder metadata om dit nye eller eksisterende aktiv. Hvis dit anvendelseseksempel kræver bevis på ejerskab, kan du inkludere en bekræftelsesnøgle og signere aktørtokenet. Ellers kan det være usigneret. |
Aktørtokendata er et JWT, der indeholder et sæt krav til den enhed, som du registrerer. Alle krav er valgfri. Hvis du ikke overfører nogen af disse metadata, kan Salesforce stadig udstede dit aktivtoken, men det kan ikke registrere enheden på samme tid.
I dette eksempel inkluderer disse aktørtokendata et aktivkrav.
{
"did": "2c4c73e7-edc5-77dd-011d-43562d21cb7e",
"Name": "My Asset Token",
"cnf": {
"jwk": {
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"alg": "RS256",
"n": "AJNGcu8nW6xq2l_dAgbJmSfHLGRn-vCuKWY-LAELw-Kerjaj5Dq3ZGW38HR4BmZksG3g4eA1RXn1hiZGI1Q 6Ei59QE_OZQx2zVSTb7-oIwRcDHEB1-RraYT3LJuh4JwUDVfEj3WgDnTjE5vD46l_CR5EXf4VL8uo8T40FkA
51AhT"
}
},
"Asset": {
"Name": "Asset 19730",
"SerialNumber": "9461094121",
"AccountId": "001D000000KtKgS",
"MyCustomAssetField__c": "Depreciated"
}
}
Du kan inkludere følgende krav i aktørtokendata.
| Fordring | Beskrivelse |
|---|---|
did
|
Enhedens id. Hvis det inkluderes, gemmes det og returneres i det udstedte aktivtoken. |
Name
|
Navnet på aktivtokenet. |
cnf
|
Bekræftelse, der indeholder en enhedsspecifik offentlig RSA-nøgle i JSON-webnøgleformat, som er defineret i specifikationen for bevis på ejerskab-nøglesemantik for JSON-webtokenet. Hvis det inkluderes, skal aktørtokenet signeres med den private nøgle, der svarer til den offentlige nøgle. |
Asset
|
Aktiv-JSON-objekt, der indeholder eventuelle gyldige felter fra aktivobjektet, inklusive tilpassede felter. Hvis det inkluderes, bruges det til at linke til et eksisterende aktiv efter id- eller serienummer eller til at oprette et aktiv med det angivne navn. |
exp
|
Udløb. Hvis det inkluderes, bruges det til at validere, at JWT ikke er udløbet. |
Når du har konstrueret dine aktørtokendata, skal du oprette aktørtoken-JWT. Formatet afhænger af om aktørtokenet er usigneret eller signeret. Usignerede aktørtokener bærer dine krav om registrering af aktivet uden en tilsvarende offentlig enhedsnøgle. Signerede aktørtokener gør det muligt at inkludere en offentlig nøgle i det resulterende aktivtoken. Enheden bruger den offentlige nøgle til at bevise ejerskab af den private nøgle, så det sikres, at tokenet bruges af den enhed, det er udstedt til.
Her er et eksempel på et usigneret aktørtoken:
eyJhbGciOiAibm9uZSJ9.eyAiZGlkIiA6ICIzNDk2NDMzMS04YTZjLTRmODYtYjM0Zi0zMjI3ZWExZjU1MDk iLCAiTmFtZSIgOiAiMzQ5NjQzMzEtOGE2Yy0Zjg2LWIzNGYtMzIyN2VhMWY1NTA5IiwgIkFzc2V0IiA6IHs
gIk5hbWUiIDogIk15IENvbm5lY3RlZCBEZXZpY2UiLCAiU2VyaWFsTnVtYmVyIiA6ICIzNDk2NDMzMS04YTZ jLTRmODYtYjM0Zi0zMjI3ZWExZjU1MDkiLCAiQWNjb3VudElkIiA6ICIwMDFEMDAwMDAwS3Uwd0UiIH0gfQ.Der kan afkodes til et sidehoved:
{"alg": "none"}
Og data:
{
"did": "34964331-8a6c-4f86-b34f-3227ea1f5509",
"Name": "My Asset Token",
"Asset" : {
"Name" : "My Connected Device",
"SerialNumber" : "349643 1-8a6c-4f86-b34f-3227ea1f5509",
"AccountId" : "001D000000Ku0wE"
}
}
Der er ingen signaturblok.
Et usigneret aktørtoken har et sidehoved med et enkelt alg. Algoritmekravet angiver, at der ikke er anvendt nogen signatur på JWT. Værdien skal være none.
Signaturblokken er en RSA SHA256-signatur af header.payload., der er base64url-kodet og føjet til JWT. Denne underskrift på JWT skal kunne kontrolleres ved brug af den offentlige nøgle, der er angivet i cnf. Hvis den offentlige nøgle er gyldig, gemmes den i aktivtokenbegivenhedsregistreringen og inkluderes i cnf i det returnerede aktivtoken-JWT.
Her er et eksempel på et signeret aktørtoken:
eyJhbGciOiAibm9uZSJ9.eyAiZGlkIiA6ICIzNDk2NDMzMS04YTZjLTRmODYtYjM0Zi0zMjI3ZWExZjU1MDk iLCAiTmFtZSIgOiAiMzQ5NjQzMzEtOGE2Yy0Zjg2LWIzNGYtMzIyN2VhMWY1NTA5IiwgIkFzc2V0IiA6IHs gIk5hbWUiIDogIk15IENvbm5lY3RlZCBEZXZpY2UiLCAiU2VyaWFsTnVtYmVyIiA6ICIzNDk2NDMzMS04YTZ
jLTRmODYtYjM0Zi0zMjI3ZWExZjU1MDkiLCAiQWNjb3VudElkIiA6ICIwMDFEMDAwMDAwS3Uwd0UiIH0gfQ. DLVM9EGvZ1VasMSzPbi7mviIXucvTktfOTYq62cTVduSsLKR4gX3Q8xfm85SfqoMaCQVXLNGkZ1iYv5LjJ4_ e69yl9r5gIML7qHDwQOSqgsNYd8HPK4qpXv1QMzBCRXCNenqQ0YhJbokCPWeHWWnPNGFYuquKL2fTTmczadToAktørtokenet afkodes i dette sidehoved:
{
"typ": "JWT",
"alg": "RS256"
}
Aktørtokenet afkodes også til følgende data:
{
"cnf": {
"jwk": {
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"alg": "RS256",
"n": "AJNGcu8nW6xq2l_dAgbJmSfHLGRn-vCuKWY-LAELw-Kerjaj5Dq3ZGW38HR4BmZksG3g4eA1RXn1hiZGI1Q 6Ei59QE_OZQx2zVSTb7-oIwRcDHEB1-RraYT3LJuh4JwUDVfEj3WgDnTjE5vD46l_CR5EXf4VL8uo8T40FkA
51AhT"
}
},
"did": "34964331-8a6c-4f86-b34f-3227ea1f5509",
"Name": "My Asset Token"
}
Et signeret aktørtoken har et sidehoved med følgende krav:
| Fordring | Beskrivelse |
|---|---|
alg
|
Algoritmekrav til at identificere signaturalgoritmen. Værdien skal være RS256. |
typ
|
Typekrav, der identificerer typen af tokenet. Værdien skal være JWT. |
Salesforce tildeler et adgangstoken
Hvis dit aktørtoken-JWT er gyldigt, indeholder dit adgangstoken fra Salesforce en bekræftelsesmeddelelse og returnerer dit aktivtoken. Eksempel:
HTTP/1.1 200 OK
Date: Wed, 06 Jan 2017 21:25:11 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store,s-maxage=0 Content-Type: application/json;charset=UTF-8
{
"access_token":"eyJraWQiOiJBc3NldHMiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOl siaHR0cDovL2xvY2FsaG9zdDo1MDAwIl0sIm5iZiI6MTQ1MjExNTUxMSwiaXNzIjoiaHR0cHM6Ly9hc3NldG lkLWRldmVsb3Blci1lZGl0aW9uLm5hMS1ibGl0ejAzLnNvbWEuZm9yY2UuY29tIiwiaWQiOiIwNWJEMDAwMD AwMDAwMUiLCJleHAiOjE0NTI2MzM5MTEsImFpZCI6IjAyaUQwMDAwMDAxNkdESyIsImRpZCI6IjM0OTY0Mz MxLThNmMtNGY4Ni1iMzRmLTMyMjdlYTFmNTUwOSJ9.poVKl-fBrFi9tgKurAM2vbyGWZ5asbXJ5nQlfA CsStFnksKiS14gD9_oK9RchHsLlAt3gSCkIXtdFMmHDPQECtfpvhXhCBw-FAYLNnhJVivU7oNimiUzEVhYlw
-p7V3Qr2lmPzhXzEisELWuQgkyfABdiI9PUOjJA3rLb6RSBmCSA5sjkYKlCjnxRcMA9ZExgS5134yq_bPR V9BTrDwy2O34Ml2VwGjl9kIMWa5v8CHEtP7eMHbJpqgHQXpwnPna0ND4kAr7EQGF1zuIUBJMS35ZyZYtw5Eg da1QbYm8TGpRaKP7tiB0GL1_i3MhGeEC8qnlXg6pWuhJd_Q",
"issued_token_type":"urn:ietf:params:oauth:token-type:jwt",
"token_type":"Bearer",
"expires_in":51840
}
access_token-parameteren indeholder dit udstedte aktivtoken. expires_in-parameteren repræsenterer den gyldighedslængde, som du angav i din tilsluttede app.Det aktivtoken-JWT, der blev returneret i adgangstokenets svar indeholder et sidehoved, data og, hvis det blev signeret, en signatur.
Her er et eksempel på et signeret aktivtoken:
eyJraWQiOiJBc3NldHMiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOlsiaHR0cDovL2x
vY2FsaG9zdDo1MDAwIl0sIm5iZiI6MTQ1MjUzNzUyMCwiaXNzIjoiaHR0cHM6Ly9hc3NldGlkLWRldmV
sb3Blci1lZGl0aW9uLm5hMS1ibGl0ejAzLnNvbWEuZm9yY2UuY29tIiwiY25mIjp7Imp3ayI6eyJrdHk
iOiJSU0EiLCJlIjoiQVFBQiIsImtpZCI6ImRldmljZWtleSIsIm4iOiJoUHBlM1RqYkJTMHB2dzFoMGQ
zbWxqdkNsOVp4Uk9YNzhRNEhLUGVPQjBPWml3QzBaSXBtaHdWZGRQeWFxYklVdTJvcUJORkc3S2Q4YVM
zMDJtQVlkLXNuQzdIcnlzekd1YzIwOFIyMUVMTGJwZ2dWOUlKdl9zdnRMNXh4UjlUdjBfUFRBNFUyR0h
VbnE1dFdDTlNqVEhoYkNzWHNrSmlLSWN4MHR3N2tJMmNaR01VQTJvakEyb1U1YkFrSDYyUkNBUTNEcDl
xTktoNldxZlI3VUpyQlV6NTFuaHVEcnE5eTFRWE1RX3pNZENXLTVTUEFMTE3ekRJa2oyX3FSdmR6LUJQ
SFRPYkU4WXg3cGFlenYzS0hZa3prRHd1M3hqUGhEZGtXMURXMWFraC1zdVpQcFl3STl4bDJ6RUNJMVU1
UVdmT0szeTIwTW1jSEFtRXhtQXIyRHcifX0sImlkIjoiMDViRDAwMDAwMDAwMDVCIiwiZXhwIjoxNDUz
MDU1OTE3LCJhaWQiOiIwMmlEMDAwMDAwMTZHTWciLCJkaWQiOiIyYzRjNzNlNy1lZGM1LTc3ZGQtMDEx
ZC00MzU2MmQyMWNiN2UifQ.Bi-CJGeOUPibvw73oZN26fNM4wEjX1XF657s9dzAgJZCXZlFps4Atu-4H
eILBnnkEkGJPLhSLm88nWcANPIFVNQKkAEifQtUjj2QE7AIWdzoFC9RuyxFv0HnAwRYkJuqoE5en3HV9
8qWMxh1-J3m0eFRTS1tUPSnrKnnPvHktuH4TdRpi3RTl3bueXmgUdYeIXNcpG71wRZDheEGxK_p5Uejq
1YmZVz1a6TBAZG3bH5sJhO0ygk1eHlHwzc5Q0yEH7cI_T5wv7puu_TTiGpDFiWwOcnvsBA8Kf8-LWEaP
Ku6Aypgbg3Ii3kY6RQEQaeTYpd8Q_jSlJi7IwQIA5WbLAAktivtokenet afkodes i dette sidehoved:
{
"kid": "00D300000000mlxEAA.978",
"typ": "JWT",
"alg": "RS256"
}
Aktivtokenet afkodes også til følgende data:
{
"aud": ["https://your.devicebackend.com"],
"sub": "005WS000001c17CMJP",
"nbf": 1452537520,
"iss": "https://yoursite.com"
"cnf": {
"jwk": {
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"alg": "RS256",
"n": "hPpe3TjbBS0pvw1h0d3mljvCl9ZxROX78Q4HKPeOB0OZiwC0ZIpmhwVddPyaqbIUu2oqBNFG7Kd8aS302mA Yd-snC7HryszGuc208R21ELlbpggV9IJv_svtL5xxR9Tv0_PTA4U2GHUnq5tWCNSjTHhbCsXskJiKIcx0tw7 kI2cZGMUA2ojA2oU5bAkH62RCAQ3Dp9qNKh6WqfYwUJrBUz51nhuDrq9y1QXMQ_zMdCW-5SPALM17zDIkj2_ qRvdz-BPHTObE8Yx7paezv3KHYkzkDwu3xjPhDdkW1DW1akh-suZPpYwI9xl2zECI1U5QWfOK3y20MmcHAmE xmAr2Dw"
}
},
"id": "05bD0000000005B",
"exp": "1453055917"
"aid": "02iD00000016GMg",
"did": "2c4c73e7-edc5-77dd-011d-43562d21cb7e"
"custom_attributes": {
"customattribute1": "unfiltered",
}
}
Aktivtokensidehovedet indeholder disse krav.
| Fordring | Beskrivelse |
|---|---|
kid
|
Nøgle-id-krav, der identificerer den organisationsspecifikke offentlige nøgle, der er tilknyttet til din tilsluttede app. Den bruges til at bekræfte signaturblokken i et signeret aktørtoken. |
alg
|
Algoritmekrav til at identificere signaturalgoritmen. Værdien skal være RS256. |
typ
|
Identificerer typen af tokenet. Værdien skal være JWT. |
Aktivtoken-JWT-data indeholder følgende krav.
| Fordring | Beskrivelse |
|---|---|
iss
|
Udstederkrav identificerer JWT-udstederen, som kan være en URL for Experience Cloud-lokalitet, en URL for Mit domæne-login eller en tilpasset URL. |
aud
|
Målgruppekrav, der identificerer, hvem JWT er tiltænkt. Værdi er en opstilling af strenge, hvor der skelnes mellem store og små bogstaver, og som hver indeholder en StringOrURI værdi. En målgruppe angives for hver tiltænkt forbruger af aktivtokenet. |
sub
|
Emnekrav, der identificerer det 18-tegns id, hvor der ikke skelnes mellem store og små bogstaver, for den aktuelle bruger af JWT. |
exp
|
Krav om udløbstid identificerer det tidspunkt, hvor JWT ikke længere kan behandles. Værdien skal være en numerisk værdi, der repræsenterer antallet af sekunder fra 1970-01-01T00:00:00Z UTC indtil den angivne UTC-dato/tid, hvor sekunder i skudår ignoreres. |
nbf
|
Ikke før-kravet identificerer tidspunktet, før JWT ikke længere kan behandles. Behandlingen af nbf kræver, at den aktuelle dato/tid skal være efter eller lig med den ikke-før dato/tid, der er angivet i nbf. Værdien skal være en numerisk værdi, der repræsenterer antallet af sekunder fra 1970-01-01T00:00:00Z UTC indtil den angivne UTC-dato/tid, hvor sekunder i skudår ignoreres. |
did
|
Enheds-id-krav repræsenterer id'et for din enhed. Hvis aktørtokenet inkluderede et did, inkluderes det i aktivtokenet. |
aid
|
Aktiv-id-kravet repræsenterer id'et for det nye eller eksisterende aktiv, som aktivtokenet er linket til. |
cnf
|
Bekræftelseskravet indeholder en enhedsspecifik RSA-nøgle i JSON-webnøgleformat som defineret i bevis på ejerskab-nøglesemantik for JSON-webtokenets specifikation. Det bruges til at bekræfte bevis på ejerskab for enhedens private nøgle. |
| Yderligere krav | Yderligere krav kan inkludere tilpassede attributter eller tilpassede tilladelser, som du angav i din tilsluttede app. |
Salesforce forsøger at linke aktivtokenet til et eksisterende aktiv eller at oprette et aktiv ved brug af følgende beslutningsmodel.
- Hvis aktivkravet indeholder et id-krav, forsøger Salesforce at linke til et eksisterende aktiv med et matchende id.
- Hvis aktivkravet indeholder et serienummer, forsøger Salesforce at linke til et eksisterende aktiv med et matchende serienummer.
- Hvis aktivkravet indeholder et navnekrav, opretter (registrerer) Salesforce et aktiv.
Bemærk Oprettelse af et aktiv kræver et AccountId eller ContactId for aktivet. - Ellers linker eller opretter Salesforce ikke et aktiv. Du kan særskilt linke et aktiv senere via API'en.
Salesforce udgiver en aktivtokenbegivenhed
Hvis aktørtoken og adgangstoken udveksles for et aktivtoken, udgiver Salesforce en aktivtokenbegivenhed. Hvis du ønsker oplysninger om AssetTokenEvent-objektet samt et eksempel på, hvordan en handling udløses efter en aktivtokenbegivenhed, kan du se AssetTokenEvent.

