Använd implicit tilldelning av flöde för OAuth 2.0 inom portalen
Den här funktionen gör det möjligt för en kund att göra klientanrop till externa API:er och säkra dem med hjälp av implicit tilldelning av flöde för OAuth. Det ger en slutpunkt för att få säker åtkomsttoken som innehåller information om användarens identitet som ska användas av externa API:er för tillstånd efter implicit tilldelning av flöde för OAuth 2.0. Information om identitet för den inloggade användaren skickas på ett säkert sätt till externa AJAX-samtal. Detta hjälper inte bara utvecklare att skicka autentiseringskontext utan hjälper också användarna att skydda deras API:er med denna mekanism.
Anteckning
För säkerhets skull rekommenderas att du använder anpassade certifikat för Implicit tilldelning av flöde för OAuth 2.0. Det kommer så småningom inte att finnas stöd för att använda implicit tilldelning av flöde utan ett anpassat certifikat.
Implicit tilldelning av flöde för OAuth 2.0 stöder slutpunkter som en kund kan använda för att få ett ID-token. Två slutpunkter som används för detta ändamål: auktorisera och token.
Auktorisera slutpunktinformation
URL för att auktorisera slutpunkt är:<portal_url>/_services/auth/authorize. Auktorisera slutpunkten stöder följande parametrar:
| Parameter | Obligatoriskt? | Beskrivning |
|---|---|---|
| client_id | Ja | En sträng som skickas när du ringer till auktorisera slutpunkten. Du måste se till att klient-ID är registrerat med portalen. I annat fall visas ett felmeddelande. Klient-ID läggs till i anspråk i token som parameter aud och appid och kan användas av klienter för att verifiera att token som returneras är för deras app.Maximal längd är 36 tecken. Endast alfanumeriska tecken och bindestreck stöds. |
| redirect_uri | Ja | URL till portalen där autentiseringssvar kan skickas och tas emot. Den måste registreras för en viss client_id används i anropet och ska vara exakt samma värde som registrerats. |
| tillstånd | Nej | Ett värde som också ingår i begäran returnerade i tokensvar. Det kan vara en sträng med innehåll som du vill använda. Vanligtvis används ett slumpmässigt genererat, unikt värde för att förhindra attack på flera platser. Maximal längd är 20 tecken. |
| nonce | Nej | Ett strängvärde som skickades av klienten som ingår i den resulterande ID-token som anspråk. Klienten kan sedan verifiera det här värdet för att minska token repetitionsattacker. Maximal längd är 20 tecken. |
| response_type | Nej | Den här parametern stöder bara token som ett värde. Detta gör att din app får direkt åtkomsttoken från auktoriserade slutpunkten, utan att göra en andra begäran att auktorisera slutpunkten. |
Lyckat svar
Auktoriserade slutpunkten returnerar följande värden i svars-URL som en del:
- token: Token returneras som ett JSON webbtoken (JWT) digitalt signerat av portalens privata nyckel.
- tillstånd: om en tillståndsparameter inkluderas i begäran, visas samma värde i svaret. Appen bör kontrollera att värdena i förfrågan och svar är identiska.
- expires_in: tidsperiod som åtkomsttoken är giltig (i sekunder).
Till exempel ett lyckat svar ser ut på följande sätt:
GET https://aadb2cplayground.azurewebsites.net/#token=eyJ0eXAiOiJKV1QiLCJhbGciOI1NisIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q&expires_in=3599&state=arbitrary_data_you_sent_earlier
Felsvar
Fel i auktoriserad slutpunkt returneras som ett JSON-dokument med följande värden:
- Fel-ID: Unik identifierare för synkroniseringsfelet.
- Felmeddelande: ett felmeddelande som kan hjälpa dig att identifiera orsaken till ett autentiseringsfel.
- Korrelations-ID: en GUID som används för felsökning. Om du har aktiverat diagnostikloggning skulle korrelations-ID finnas i felloggar för servern.
- Tidsstämpel: Datum och tid då synkroniseringsfelet genererades.
Felmeddelandet visas i standardspråket för den inloggade användaren. Om användaren inte är inloggad visas inloggningssidan för användare att logga in. Till exempel ett felsvar ser ut på följande sätt:
{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }
Information om tokens slutpunkt
Du kan också få ett token genom att göra en begäran till /token slutpunkt. Den skiljer sig från auktoriseringsslutpunkten på sätt att auktoriseringsslutpunkten hanterar tokenlogiken på en separat sida (redirect_uri), medan tokenslutpunkten hanterar tokenlogik på samma sida. URL för tokenslutpunkt är: <portal_url>/_services/auth/token. Tokenslutpunkten stöder följande parametrar:
| Parameter | Obligatoriskt? | Beskrivning |
|---|---|---|
| client_id | Nej | En sträng som skickas när du ringer till auktorisera slutpunkten. Du måste se till att klient-ID är registrerat med portalen. I annat fall visas ett felmeddelande. Klient-ID läggs till i anspråk i token som parameter aud och appid och kan användas av klienter för att verifiera att token som returneras är för deras app.Maximal längd är 36 tecken. Endast alfanumeriska tecken och bindestreck stöds. |
| redirect_uri | Nej | URL till portalen där autentiseringssvar kan skickas och tas emot. Den måste registreras för en viss client_id används i anropet och ska vara exakt samma värde som registrerats. |
| tillstånd | Nej | Ett värde som också ingår i begäran returnerade i tokensvar. Det kan vara en sträng med innehåll som du vill använda. Vanligtvis används ett slumpmässigt genererat, unikt värde för att förhindra attack på flera platser. Maximal längd är 20 tecken. |
| nonce | Nej | Ett strängvärde som skickades av klienten som ingår i den resulterande ID-token som anspråk. Klienten kan sedan verifiera det här värdet för att minska token repetitionsattacker. Maximal längd är 20 tecken. |
| response_type | Nej | Den här parametern stöder bara token som ett värde. Detta gör att din app får direkt åtkomsttoken från auktoriserade slutpunkten, utan att göra en andra begäran att auktorisera slutpunkten. |
Anteckning
Även om parametrar client_id, redirect_uri, state och nonce är valfria, bör du använda dem för att kontrollera att din integrering är säker.
Lyckat svar
Tokenslutpunkten returnerar tillstånd och expires_in som svarsrubrik och token i formulärtexten.
Felsvar
Fel i token slutpunkt returneras som ett JSON-dokument med följande värden:
- Fel-ID: Unik identifierare för synkroniseringsfelet.
- Felmeddelande: ett felmeddelande som kan hjälpa dig att identifiera orsaken till ett autentiseringsfel.
- Korrelations-ID: en GUID som används för felsökning. Om du har aktiverat diagnostikloggning skulle korrelations-ID finnas i felloggar för servern.
- Tidsstämpel: Datum och tid då synkroniseringsfelet genererades.
Felmeddelandet visas i standardspråket för den inloggade användaren. Om användaren inte är inloggad visas inloggningssidan för användare att logga in. Till exempel ett felsvar ser ut på följande sätt:
{"ErrorId": "PortalSTS0001", "ErrorMessage": "Client Id provided in the request is not a valid client Id registered for this portal. Please check the parameter and try again.", "Timestamp": "4/5/2019 10:02:11 AM", "CorrelationId": "7464eb01-71ab-44bc-93a1-f221479be847" }
Verifiera ID-token
Skaffa ett ID-token räcker inte för att autentisera användaren. Du måste också verifiera tokens signatur och kontrollera anspråk i token baserat på kraven i ditt program. Offentliga tokens slutpunkt innehåller den offentliga nyckeln för portalen, som kan användas för att verifiera signaturen för den token som skickas av portalen. URL för offentlig tokenslutpunkt är: <portal_url>/_services/auth/publickey.
Aktivera och inaktivera implicit tilldelning av flöde
Som standard är implicit tilldelning av flöde aktiverat. Om du vill inaktivera implicit tilldelning av flöde anger du värdet för platsinställning Connector/ImplicitGrantFlowEnabled till False.
Om den här webbplatsinställningen inte är tillgänglig i din portal måste du skapa en ny webbplatsinställning med lämpligt värde.
Konfigurera tokens giltighet
Som standard gäller token i 15 minuter. Om du vill ändra giltighetstiden för token anger du värdet för webbplatsinställningen ImplicitGrantFlow/TokenExpirationTime till önskat värde. Värdet måste anges i sekunder. Det största värdet är 1 timme och det minsta värdet måste vara 1 minut. Om ett felaktigt värde har angetts (till exempel alfanumeriska tecken), används standardvärdet 15 minuter. Om du anger ett värde som är större än det största värdet eller mindre än det minsta värdet används största och minsta värde, som standard.
Till exempel om du vill ange tokens giltighet till 30 minuter, anger du värdet för webbplatsinställningen ImplicitGrantFlow/TokenExpirationTime till 1800. Om du vill ange tokens giltighet till 1 timme, anger du värdet för webbplatsinställningen ImplicitGrantFlow/TokenExpirationTime till 3600.
Registrera klient-ID för implicit tilldelning av flöde
Du måste registrera klient-ID med portalen som detta flöde är tillåtet för. Om du vill registrera ett klient-ID måste du skapa följande webbplatsinställningar:
| Webbplatsinställning | Value |
|---|---|
| ImplicitGrantFlow/RegisteredClientId | Giltiga klient-ID-värden som tillåts för den här portalen. Värdena måste vara avgränsade med semikolon och kan innehålla alfanumeriska tecken och bindestreck. Maximal längd är 36 tecken. |
| ImplicitGrantFlow/{ClientId}/RedirectUri | Giltiga omdirigerings-URL som tillåts för en viss klient-ID. Värdena måste vara avgränsade med semikolon. URL måste ha en giltig webbsida på portalen. |
Exempelkod
Du kan använda följande exempelkod för att komma igång med att använda OAuth 2.0 Implicit Grant tillsammans med API:er för Power Apps-portaler.
Använd portalens Oauth-token med en extern webb-API
Detta exempel är ett ASP.NET-baserat projekt och används för att validera den ID-kod som utfärdats av Power Apps-portaler. Hela exemplet hittar du här: använd portalens Oauth-token med en extern webb-API.
Auktorisera slutpunktexempel
I det här exemplet visas hur auktoriserad slutpunkt returnerar ID-token som ett fragment i den omdirigerade URL:en. Det behandlar även tillståndsvalidering som stöds av implicit tilldelning. Exemplet hittas här: auktorisera slutpunktexempel.
Token för slutpunkt-exempel
Detta utdrag visar hur du kan använda funktionen getAuthenticationToken för att hämta en ID-kod med hjälp av kodslutpunkten i Power Apps-portaler. Exemplet hittas här: exempel på tokenslutpunkt.