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 visar en Java WebLogic-app som använder OpenID Connect för att logga in användare och Microsoft Entra ID-programroller (approller) för auktorisering.
Det här programmet implementerar rollbaserad åtkomstkontroll (RBAC) med hjälp av Microsoft Entra ID:s programroller och rollanspråksfunktion. En annan metod är att använda Microsoft Entra-ID-grupper och gruppanspråk. Microsoft Entra-ID-grupper och programroller utesluter inte varandra. Du kan använda dem båda för att ge detaljerad åtkomstkontroll.
Du kan också använda RBAC med programroller och rollanspråk för att på ett säkert sätt framtvinga auktoriseringsprinciper.
En video som beskriver det här scenariot och det här exemplet finns i Implementera auktorisering i dina program med hjälp av approller, säkerhetsgrupper, omfång och katalogroller.
Mer information om hur protokollen fungerar i det här scenariot och i andra scenarier finns i Autentisering kontra auktorisering.
Det här programmet använder MSAL för Java (MSAL4J) för att logga in en användare och hämta en ID-token från Microsoft Entra-ID.
Det här exemplet använder först MSAL för Java (MSAL4J) för att logga in användaren. På startsidan visas ett alternativ för användaren att visa anspråken i sina ID-token. Det här programmet gör det också möjligt för användarna att visa en privilegierad administratörssida eller en vanlig användarsida, beroende på vilken approll de har tilldelats. Tanken är att ge ett exempel på hur åtkomst till vissa funktioner eller sidor i ett program begränsas till delmängder av användare beroende på vilken roll de tillhör.
Den här typen av auktorisering implementeras med hjälp av RBAC. Med RBAC ger en administratör behörighet till roller, inte till enskilda användare eller grupper. Administratören kan sedan tilldela roller till olika användare och grupper för att styra vem som har åtkomst till visst innehåll och vissa funktioner.
Det här exempelprogrammet definierar följande två programroller:
- PrivilegedAdmin: Har behörighet att komma åt sidorna Endast administratörer och Vanliga användare .
- RegularUser: Har behörighet att komma åt sidan Vanliga användare .
Dessa programroller definieras i Azure Portal i programmets registreringsmanifest. När en användare loggar in i programmet genererar Microsoft Entra-ID ett rollanspråk för varje roll som beviljas användaren individuellt i form av rollmedlemskap.
Du kan tilldela användare och grupper till roller via Azure Portal.
Kommentar
Rollanspråk finns inte för gästanvändare i en klientorganisation om https://login.microsoftonline.com/common/ slutpunkten används som utfärdare för att logga in användare. Du måste logga in en användare på en klientslutpunkt som https://login.microsoftonline.com/tenantid.
Förutsättningar
- JDK version 8 eller senare
- Maven 3
- En Microsoft Entra-ID-klientorganisation. Mer information finns i Hämta en Microsoft Entra-ID-klientorganisation.
- Ett användarkonto i din egen Microsoft Entra-ID-klientorganisation om du bara vill arbeta med konton i organisationskatalogen – det vill:s läge för enskild klientorganisation. Om du inte har skapat ett användarkonto i klientorganisationen än bör du göra det innan du fortsätter. Mer information finns i Skapa, bjuda in och ta bort användare.
Rekommendationer
- Viss kunskap om Java/Jakarta Servlets.
- Viss kunskap om Linux/OSX-terminalen.
- jwt.ms för att inspektera dina token.
- Fiddler för övervakning av nätverksaktivitet och felsökning.
- Följ Microsoft Entra-bloggen för att hålla dig up-to-date med den senaste utvecklingen.
Konfigurera exemplet
I följande avsnitt visas hur du konfigurerar exempelprogrammet.
Klona eller ladda ned exempellagringsplatsen
Om du vill klona exemplet öppnar du ett Bash-fönster och använder följande kommando:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/3-Authorization-II/roles
Du kan också gå till lagringsplatsen ms-identity-msal-java-samples och sedan ladda ned den som en .zip fil och extrahera den till hårddisken.
Viktigt!
För att undvika begränsningar för filsökvägslängd i Windows klonar eller extraherar du lagringsplatsen till en katalog nära hårddiskens rot.
Registrera exempelprogrammet med din Microsoft Entra ID-klientorganisation
Det finns ett projekt i det här exemplet. Följande avsnitt visar hur du registrerar appen med hjälp av Azure Portal.
Välj den Microsoft Entra-ID-klientorganisation där du vill skapa dina program
Använd följande steg för att välja klientorganisation:
- Logga in på Azure-portalen. 
- Om ditt konto finns i mer än en Microsoft Entra-ID-klientorganisation väljer du din profil i hörnet av Azure Portal och väljer sedan Växla katalog för att ändra sessionen till önskad Microsoft Entra ID-klientorganisation. 
Registrera appen (java-servlet-webapp-roles)
Registrera först en ny app i Azure Portal genom att följa anvisningarna i Snabbstart: Registrera ett program med Microsofts identitetsplattform.
Använd sedan följande steg för att slutföra registreringen:
- Gå till sidan Microsofts identitetsplattform för utvecklare Appregistreringar. 
- Välj Ny registrering. 
- På sidan Registrera ett program som visas anger du följande appregistreringsinformation: - I avsnittet Namn anger du ett beskrivande programnamn för visning för användare av appen , till exempel - java-servlet-webapp-roles.
- Under Kontotyper som stöds väljer du något av följande alternativ: - Välj Endast Konton i den här organisationskatalogen om du skapar ett program som endast ska användas av användare i din klientorganisation, det vill s.v.s. ett program med en enda klientorganisation .
 
- I avsnittet Omdirigerings-URI väljer du Webb i kombinationsrutan och anger följande omdirigerings-URI: - http://localhost:8080/msal4j-servlet-roles/auth/redirect.
 
- Välj Registrera för att skapa programmet. 
- På appens registreringssida letar du upp och kopierar värdet program-ID (klient) för senare användning. Du använder det här värdet i appens konfigurationsfil eller filer. 
- Välj Spara för att spara dina ändringar. 
- På appens registreringssida väljer du Certifikat och hemligheter i navigeringsfönstret för att öppna sidan där du kan generera hemligheter och ladda upp certifikat. 
- Under avsnittet Klienthemlighet välj Ny klienthemlighet. 
- Skriv en beskrivning – till exempel apphemlighet. 
- Välj en av de tillgängliga varaktigheterna: Om ett år, Om två år eller Aldrig upphör att gälla. 
- Markera Lägga till. Det genererade värdet visas. 
- Kopiera och spara det genererade värdet för användning i senare steg. Du behöver det här värdet för kodens konfigurationsfiler. Det här värdet visas inte igen och du kan inte hämta det på något annat sätt. Se därför till att spara den från Azure Portal innan du går till någon annan skärm eller ett annat fönster. 
Definiera programrollerna
Använd följande steg för att definiera approllerna:
- I samma appregistrering väljer du Approller i navigeringsfönstret. 
- Välj Skapa approll och ange sedan följande värden: - Som Visningsnamn anger du ett lämpligt namn , till exempel PrivilegedAdmin.
- För Tillåtna medlemstyper väljer du Användare.
- Som Värde anger du PrivilegedAdmin.
- Som Beskrivning anger du PrivilegedAdmins som kan visa administratörssidan.
 
- Välj Skapa approll och ange sedan följande värden: - Som Visningsnamn anger du ett lämpligt namn , till exempel RegularUser.
- För Tillåtna medlemstyper väljer du Användare.
- Ange RegularUser som Värde.
- Som Beskrivning anger du RegularUsers som kan visa användarsidan.
 
- Tryck på Apply (Verkställ) för att spara ändringarna. 
Tilldela användare till programrollerna
Om du vill lägga till användare i approllen som definierades tidigare följer du riktlinjerna här: Tilldela användare och grupper till roller.
Konfigurera appen (java-servlet-webapp-roles) för att använda din appregistrering
Använd följande steg för att konfigurera appen:
Kommentar
I följande steg ClientID är samma som Application ID eller AppId.
- Öppna projektet i din IDE. 
- Leta reda på strängen - {enter-your-tenant-id-here}. Ersätt det befintliga värdet med ditt Klient-ID för Microsoft Entra.
- Leta upp strängen - {enter-your-client-id-here}och ersätt det befintliga värdet med program-ID:t eller- clientIdprogrammet- java-servlet-webapp-call-graphsom kopierats från Azure Portal.
- Leta reda på strängen - {enter-your-client-secret-here}och ersätt det befintliga värdet med det värde som du sparade när appen skapades- java-servlet-webapp-rolesi Azure Portal.
- Leta upp - app.rolesegenskapen och kontrollera att värdet är inställt på- app.roles=admin PrivilegedAdmin, user RegularUser, eller ersätt namnen på dina specifika roller.
Skapa exemplet
Om du vill skapa exemplet med Maven går du till katalogen som innehåller pom.xml-filen för exemplet och kör sedan följande kommando:
mvn clean package
Det här kommandot genererar en .war-fil som du kan köra på olika programservrar.
Distribuera exemplet
Dessa instruktioner förutsätter att du har installerat WebLogic och konfigurerat en serverdomän.
Innan du kan distribuera till WebLogic använder du följande steg för att göra några konfigurationsändringar i själva exemplet och sedan skapa eller återskapa paketet:
- I exemplet hittar du filen application.properties eller authentication.properties där du konfigurerade klient-ID, klientorganisation, omdirigerings-URL och så vidare. 
- I den här filen ändrar du referenser till - localhost:8080eller- localhost:8443till den URL och port som WebLogic körs på, som som standard ska vara- localhost:7001.
- Du måste också göra samma ändring i Azure-appregistreringen, där du anger den i Azure Portal som omdirigerings-URI-värdet på fliken Autentisering. 
Använd följande steg för att distribuera exemplet till WebLogic via webbkonsolen:
- Starta WebLogic-servern med DOMAIN_NAME\bin\startWebLogic.cmd. 
- Gå till WebLogic-webbkonsolen i webbläsaren på - http://localhost:7001/console.
- Gå till Distributioner av domänstruktur>, välj Installera, välj Ladda upp dina filer och leta upp .war-filen som du skapade med Maven. 
- Välj Installera den här distributionen som ett program, välj Nästa, välj Slutför och välj sedan Spara. 
- De flesta standardinställningarna bör vara bra förutom att du bör namnge programmet så att det matchar den omdirigerings-URI som du angav i exempelkonfigurationen eller Azure-appregistreringen. Om omdirigerings-URI:n är - http://localhost:7001/msal4j-servlet-authbör du ge programmet- msal4j-servlet-authnamnet .
- Gå tillbaka till Distributioner av domänstruktur> och starta programmet. 
- När programmet har startat går du till - http://localhost:7001/<application-name>/och du bör kunna komma åt programmet.
Utforska exemplet
Använd följande steg för att utforska exemplet:
- Observera den inloggade eller utloggade statusen som visas i mitten av skärmen.
- Välj den sammanhangskänsliga knappen i hörnet. Den här knappen läser Logga in när du först kör appen.
- På nästa sida följer du anvisningarna och loggar in med ett konto i Microsoft Entra ID-klientorganisationen.
- Observera de omfång som begärs på medgivandeskärmen.
- Observera att den sammanhangskänsliga knappen nu säger Logga ut och visar ditt användarnamn.
- Välj ID-tokeninformation för att se några av ID-tokens avkodade anspråk.
- Välj Endast administratörer för att visa sidan /admin_only. Endast användare med approllPrivilegedAdminkan visa den här sidan. Annars visas ett meddelande om auktoriseringsfel.
- Välj Vanliga användare för att visa sidan /regular_user. Endast användare med approllRegularUserellerPrivilegedAdminkan visa den här sidan. Annars visas ett meddelande om auktoriseringsfel.
- Använd knappen i hörnet för att logga ut.
Om koden
Det här exemplet använder MSAL för Java (MSAL4J) för att logga in en användare och hämta en ID-token som kan innehålla rollanspråket. Baserat på rollanspråket som finns kan den inloggade användaren inte komma åt någon, en eller båda av de skyddade sidorna Admins Only och Regular Users.
Om du vill replikera det här exemplets beteende kan du kopiera pom.xml-filen och innehållet i hjälpmapparna och authservlets-mapparna i mappen src/main/java/com/microsoft/azuresamples/msal4j. Du behöver också filen authentication.properties . Dessa klasser och filer innehåller allmän kod som du kan använda i en mängd olika program. Du kan också kopiera resten av exemplet, men de andra klasserna och filerna skapas specifikt för att hantera det här exemplets mål.
Innehåll
I följande tabell visas innehållet i exempelprojektmappen:
| Fil/mapp | beskrivning | 
|---|---|
| src/main/java/com/microsoft/azuresamples/msal4j/roles/ | Den här katalogen innehåller de klasser som definierar appens affärslogik för serverdelen. | 
| src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ | Den här katalogen innehåller de klasser som används för inloggning och utloggningsslutpunkter. | 
| *Servlet.java | Alla tillgängliga slutpunkter definieras i Java-klasser med namn som slutar Servlet. | 
| src/main/java/com/microsoft/azuresamples/msal4j/helpers/ | Hjälpklasser för autentisering. | 
| AuthenticationFilter.java | Omdirigerar oautentiserade begäranden till skyddade slutpunkter till en 401-sida. | 
| src/main/resources/authentication.properties | Microsoft Entra-ID och programkonfiguration. | 
| src/main/webapp/ | Den här katalogen innehåller användargränssnittet – JSP-mallar | 
| CHANGELOG.md | Lista över ändringar i exemplet. | 
| CONTRIBUTING.md | Riktlinjer för att bidra till exemplet. | 
| LICENS | Licensen för exemplet. | 
Bearbeta ett rollanspråk i ID-token
Rollanspråket för token innehåller namnen på de roller som den inloggade användaren har tilldelats, enligt följande exempel:
{
  ...
  "roles": [
    "Role1",
    "Role2",]
  ...
}
ConfidentialClientApplication
En ConfidentialClientApplication instans skapas i AuthHelper.java-filen, som du ser i följande exempel. Det här objektet hjälper dig att skapa Microsoft Entra-auktoriserings-URL:en och hjälper även till att byta ut autentiseringstoken mot en åtkomsttoken.
// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                     .builder(CLIENT_ID, secret)
                     .authority(AUTHORITY)
                     .build();
Följande parametrar används för instansiering:
- Appens klient-ID.
- Klienthemligheten, som är ett krav för konfidentiella klientprogram.
- Microsoft Entra ID-utfärdare, som innehåller ditt Klient-ID för Microsoft Entra.
I det här exemplet läss dessa värden från filen authentication.properties med hjälp av en egenskapsläsare i filen Config.java .
Stegvis genomgång
Följande steg innehåller en genomgång av appens funktioner:
- Det första steget i inloggningsprocessen är att skicka en begäran till - /authorizeslutpunkten på för din Microsoft Entra-ID-klientorganisation. MSAL4J-instansen- ConfidentialClientApplicationanvänds för att skapa en URL för auktoriseringsbegäran. Appen omdirigerar webbläsaren till den här URL:en, där användaren loggar in.- final ConfidentialClientApplication client = getConfidentialClientInstance(); AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES)) .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString(); contextAdapter.redirectUser(authorizeUrl);- I följande lista beskrivs funktionerna i den här koden: - AuthorizationRequestUrlParameters: Parametrar som måste anges för att skapa en AuthorizationRequestUrl.
- REDIRECT_URI: När Microsoft Entra-ID omdirigerar webbläsaren – tillsammans med autentiseringskoden – efter att användarens autentiseringsuppgifter har samlats in. Den måste matcha omdirigerings-URI:n i Microsoft Entra ID-appregistreringen i Azure Portal.
- SCOPES: Omfång är behörigheter som begärs av programmet.- Normalt räcker det med de tre omfången openid profile offline_accessför att ta emot ett ID-tokensvar.
- En fullständig lista över omfång som begärs av appen finns i filen authentication.properties . Du kan lägga till fler omfång, till exempel User.Read.
 
- Normalt räcker det med de tre omfången 
 
- Användaren får en inloggningsprompt av Microsoft Entra-ID. Om inloggningsförsöket lyckas omdirigeras användarens webbläsare till appens omdirigeringsslutpunkt. En giltig begäran till den här slutpunkten innehåller en auktoriseringskod. 
- Instansen - ConfidentialClientApplicationutbyter sedan den här auktoriseringskoden mot en ID-token och åtkomsttoken från Microsoft Entra-ID.- // First, validate the state, then parse any error codes in response, then extract the authCode. Then: // build the auth code params: final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build(); // Get a client instance and leverage it to acquire the token: final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance(); final IAuthenticationResult result = client.acquireToken(authParams).get();- I följande lista beskrivs funktionerna i den här koden: - AuthorizationCodeParameters: Parametrar som måste anges för att kunna byta auktoriseringskoden mot ett ID och/eller en åtkomsttoken.
- authCode: Auktoriseringskoden som togs emot vid omdirigeringsslutpunkten.
- REDIRECT_URI: Omdirigerings-URI:n som användes i föregående steg måste skickas igen.
- SCOPES: Omfången som användes i föregående steg måste skickas igen.
 
- Om - acquireTokendet lyckas extraheras tokenanspråken. Om nonce-kontrollen godkänns placeras resultatet i- context– en instans av- IdentityContextData– och sparas i sessionen. Programmet kan sedan instansiera- IdentityContextDatafrån sessionen genom en instans av- IdentityContextAdapterServletnär det behöver åtkomst till den, som visas i följande kod:- // parse IdToken claims from the IAuthenticationResult: // (the next step - validateNonce - requires parsed claims) context.setIdTokenClaims(result.idToken()); // if nonce is invalid, stop immediately! this could be a token replay! // if validation fails, throws exception and cancels auth: validateNonce(context); // set user to authenticated: context.setAuthResult(result, client.tokenCache().serialize());
Skydda vägarna
Information om hur exempelappen filtrerar åtkomst till vägar finns i AuthenticationFilter.java. I filen app.protect.authenticated authentication.properties innehåller egenskapen de kommaavgränsade vägar som endast autentiserade användare kan komma åt, enligt följande exempel:
# for example, /token_details requires any user to be signed in and does not require special roles claim(s)
app.protect.authenticated=/token_details
Alla vägar som anges i kommaavgränsade regeluppsättningar under är också utanför gränserna för icke-autentiserade app.protect.roles autentiserade användare, enligt följande exempel. Dessa vägar innehåller dock också en utrymmesavgränsad lista över approllmedlemskap: endast användare som har minst en av motsvarande roller kan komma åt dessa vägar efter autentiseringen.
# local short names for app roles - for example, sets admin to mean PrivilegedAdmin (useful for long rule sets defined in the next key, app.protect.roles)
app.roles=admin PrivilegedAdmin, user RegularUser
# A route and its corresponding <space-separated> role(s) that can access it; the start of the next route & its role(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by PrivilegedAdmin, /regular_user can be accessed by PrivilegedAdmin role and the RegularUser role
app.protect.roles=/admin_only admin, /regular_user admin user
Omfattningar
Omfång anger för Microsoft Entra-ID vilken åtkomstnivå programmet begär.
Baserat på de begärda omfången presenterar Microsoft Entra-ID en medgivandedialog för användaren vid inloggning. Om användaren samtycker till ett eller flera omfång och hämtar en token kodas scopes-consented-to till i den resulterande access_token.
De omfång som begärs av programmet finns i authentication.properties. Dessa tre omfång begärs av MSAL och anges av Microsoft Entra-ID som standard.
Mer information
- Microsoft Authentication Library (MSAL) för Java
- Microsofts identitetsplattform
- Snabbstart: Registrera ett program med Microsofts identitetsplattform
- Förstå funktioner för medgivande för Microsoft Entra-ID-program
- Förstå användar- och administratörsmedgivande
- MSAL-kodexempel
- Gör så här: Lägga till approller i ditt program och ta emot dem i token
- Hantera användartilldelning för en app i Microsoft Entra ID
Gå vidare
Distribuera Java WebLogic-appar till WebLogic på virtuella Azure-datorer