Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du ansluter din UWP-app (Universal Windows Platform) till en onlineidentitetsprovider som använder autentiseringsprotokoll som OpenID eller OAuth. Metoden AuthenticateAsync skickar en begäran till onlineidentitetsprovidern och hämtar tillbaka en åtkomsttoken som beskriver de providerresurser som appen har åtkomst till.
Anmärkning
För ett fullständigt, fungerande kodexempel klonar du WebAuthenticationBroker-lagringsplatsen på GitHub.
Registrera din app hos din onlineleverantör
Du måste registrera din app med den onlineidentitetsprovider som du vill ansluta till. Du kan ta reda på hur du registrerar din app från identitetsprovidern. När du har registrerat dig ger onlineleverantören dig vanligtvis ett ID eller en hemlig nyckel för din app.
Skapa URI:n för autentiseringsbegäran
Begärande-URI:n består av adressen där du skickar autentiseringsbegäran till din onlineleverantör som läggs till med annan nödvändig information, till exempel ett app-ID eller en hemlighet, en omdirigerings-URI där användaren skickas efter att autentiseringen har slutförts och den förväntade svarstypen. Du kan ta reda på vilka parametrar som krävs från leverantören.
Begärande-URI:n skickas som parametern requestUri för metoden AuthenticateAsync . Det måste vara en säker adress (den måste börja med https://)
I följande exempel visas hur du skapar URI:n för begäran.
string startURL = "https://<providerendpoint>?client_id=<clientid>&scope=<scopes>&response_type=token";
string endURL = "http://<appendpoint>";
System.Uri startURI = new System.Uri(startURL);
System.Uri endURI = new System.Uri(endURL);
Ansluta till onlineleverantören
Du anropar metoden AuthenticateAsync för att ansluta till onlineidentitetsprovidern och hämta en åtkomsttoken. Metoden tar den URI som skapades i föregående steg som parametern requestUri och en URI som du vill att användaren ska omdirigeras till som parametern callbackUri .
string result;
try
{
var webAuthenticationResult =
await Windows.Security.Authentication.Web.WebAuthenticationBroker.AuthenticateAsync(
Windows.Security.Authentication.Web.WebAuthenticationOptions.None,
startURI,
endURI);
switch (webAuthenticationResult.ResponseStatus)
{
case Windows.Security.Authentication.Web.WebAuthenticationStatus.Success:
// Successful authentication.
result = webAuthenticationResult.ResponseData.ToString();
break;
case Windows.Security.Authentication.Web.WebAuthenticationStatus.ErrorHttp:
// HTTP error.
result = webAuthenticationResult.ResponseErrorDetail.ToString();
break;
default:
// Other error.
result = webAuthenticationResult.ResponseData.ToString();
break;
}
}
catch (Exception ex)
{
// Authentication failed. Handle parameter, SSL/TLS, and Network Unavailable errors here.
result = ex.Message;
}
Varning
Förutom AuthenticateAsync innehåller namnområdet Windows.Security.Authentication.Web en AuthenticateAndContinue-metod . Anropa inte den här metoden. Den är endast avsedd för appar som riktar sig till Windows Phone 8.1 och är inaktuell från och med Windows 10.
Ansluta med enkel inloggning (SSO).
Som förval tillåter inte webbautentiseringsmäklaren att cookies sparas. Även om appanvändaren anger att han eller hon vill vara inloggad (till exempel genom att markera en kryssruta i providerns inloggningsdialogruta) måste de logga in varje gång de vill komma åt resurser för providern. Om du vill logga in med enkel inloggning måste din onlineidentitetsprovider ha aktiverat enkel inloggning för koordinator för webbautentisering och appen måste anropa överbelastningen av AuthenticateAsync som inte tar en callbackUri- parameter. Detta gör att beständiga cookies kan lagras av webbautentiseringskoordinatorn, så att framtida autentiseringsanrop av samma app inte kräver upprepad inloggning av användaren (användaren är i praktiken "inloggad" tills åtkomsttoken upphör att gälla).
För att stödja enkel inloggning måste onlineleverantören tillåta dig att registrera en omdirigerings-URI i formuläret ms-app://<appSID>, där <appSID> är SID för din app. Du hittar appens SID från appens utvecklarsida för din app eller genom att anropa metoden GetCurrentApplicationCallbackUri .
string result;
try
{
var webAuthenticationResult =
await Windows.Security.Authentication.Web.WebAuthenticationBroker.AuthenticateAsync(
Windows.Security.Authentication.Web.WebAuthenticationOptions.None,
startURI);
switch (webAuthenticationResult.ResponseStatus)
{
case Windows.Security.Authentication.Web.WebAuthenticationStatus.Success:
// Successful authentication.
result = webAuthenticationResult.ResponseData.ToString();
break;
case Windows.Security.Authentication.Web.WebAuthenticationStatus.ErrorHttp:
// HTTP error.
result = webAuthenticationResult.ResponseErrorDetail.ToString();
break;
default:
// Other error.
result = webAuthenticationResult.ResponseData.ToString();
break;
}
}
catch (Exception ex)
{
// Authentication failed. Handle parameter, SSL/TLS, and Network Unavailable errors here.
result = ex.Message;
}
Felsökning
Det finns flera sätt att felsöka API:er för webbautentiseringskoordinator, inklusive att granska driftloggar och granska webbbegäranden och svar med Fiddler.
Driftloggar
Ofta kan du avgöra vad som inte fungerar med hjälp av driftloggarna. Det finns en dedikerad händelseloggkanal Microsoft-Windows-WebAuth\Operational som gör att webbplatsutvecklare kan förstå hur deras webbsidor bearbetas av autentiseringskoordinatorn för webben. Aktivera den genom att starta eventvwr.exe och aktivera driftloggen under Program och tjänster\Microsoft\Windows\WebAuth. Dessutom lägger autentiseringskoordinatorn till en unik sträng i användaragentsträngen för att identifiera sig på webbservern. Strängen är "MSAuthHost/1.0". Observera att versionsnumret kan ändras i framtiden, så du bör inte vara beroende av versionsnumret i koden. Ett exempel på den fullständiga användaragentsträngen, följt av fullständiga felsökningssteg, är följande.
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MSAuthHost/1.0)
- Aktivera driftloggar.
- Kör Contosos sociala program.
- De genererade loggposterna kan användas för att förstå beteendet för autentiseringskoordinator för webben i detalj. I det här fallet kan följande inkludera:
- Navigeringsstart: Loggar när AuthHost startas och innehåller information om start- och avslutnings-URL:erna.
-
- Navigeringen är klar: Loggar slutförandet av inläsningen av en webbsida.
- Metatagg: Loggar när en metatagg påträffas, inklusive informationen.
- Avsluta navigering: Navigeringen avslutades av användaren.
- Navigeringsfel: AuthHost stöter på ett navigeringsfel på en URL, inklusive HttpStatusCode.
- Navigeringsslut: En avslutande URL påträffas.
Spelman
Fiddler-webbfelsökaren kan användas med appar. Mer information finns i Fiddler-dokumentationen
Eftersom AuthHost körs i en egen appcontainer måste du ange en registernyckel för att ge den den privata nätverksfunktionen: Windows Registry Editor Version 5.00
\ HKEY_LOCAL_MACHINEMJUKVARA\Microsoft\Windows NT\CurrentVersion\Alternativ \\authhost.exeEnablePrivateNetwork = 00000001
Om du inte har den här registernyckeln kan du skapa den i en kommandotolk med administratörsbehörighet.
REG ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\authhost.exe" /v EnablePrivateNetwork /t REG_DWORD /d 1 /fLägg till en regel för AuthHost eftersom det är det som genererar den utgående trafiken.
CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.a.p_8wekyb3d8bbwe CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.p_8wekyb3d8bbwe CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.c_8wekyb3d8bbwe D:\Windows\System32>CheckNetIsolation.exe LoopbackExempt -s List Loopback Exempted AppContainers [1] ----------------------------------------------------------------- Name: microsoft.windows.authhost.sso.c_8wekyb3d8bbwe SID: S-1-15-2-1973105767-3975693666-32999980-3747492175-1074076486-3102532000-500629349 [2] ----------------------------------------------------------------- Name: microsoft.windows.authhost.sso.p_8wekyb3d8bbwe SID: S-1-15-2-166260-4150837609-3669066492-3071230600-3743290616-3683681078-2492089544 [3] ----------------------------------------------------------------- Name: microsoft.windows.authhost.a.p_8wekyb3d8bbwe SID: S-1-15-2-3506084497-1208594716-3384433646-2514033508-1838198150-1980605558-3480344935Lägg till en brandväggsregel för inkommande trafik till Fiddler.
Du kan skapa brandväggsregeln med antingen kommandoraden eller Windows Defender-brandväggens GUI:
Alternativ A: Använda netsh-kommandot (kör som administratör):
netsh advfirewall firewall add rule name="Fiddler for AuthHost Debugging" dir=in action=allow program="C:\Program Files\Fiddler\Fiddler.exe" enable=yesOm Fiddler är installerat på en annan plats justerar du sökvägen i enlighet med detta. Du kan också skapa en portbaserad regel:
netsh advfirewall firewall add rule name="Fiddler Port for AuthHost" dir=in action=allow protocol=TCP localport=8888Alternativ B: Använda Windows Defender-brandväggen med avancerad säkerhet:
- Öppna Windows Defender-brandväggen med Avancerad säkerhet (kör
wf.msc) - Klicka på "Regler för inkommande trafik" i det vänstra fönstret
- Klicka på "Ny regel..." i den högra rutan
- Välj "Program" och klicka på Nästa
- Bläddra till den körbara Fiddler-filen (vanligtvis
C:\Program Files\Fiddler\Fiddler.exei en installation per dator) och klicka på Nästa - Välj "Tillåt anslutningen" och klicka på Nästa
- Kontrollera alla nätverkstyper (domän, privat, offentlig) och klicka på Nästa
- Ge regeln ett namn som "Fiddler for AuthHost Debugging" och klicka på Slutför
- Öppna Windows Defender-brandväggen med Avancerad säkerhet (kör