Ekinlikler
17 Mar 23 - 21 Mar 23
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Bu makalede, kullanıcılarda oturum açıp Microsoft Graph çağrısı için erişim belirteci alan bir Java Spring Boot web uygulaması gösterilmektedir. Kimlik doğrulaması, yetkilendirme ve belirteç alımı için Java için Microsoft Entra ID Spring Boot Starter istemci kitaplığını kullanır. Graph'tan veri almak için Java için Microsoft Graph SDK'sını kullanır.
Aşağıdaki diyagramda uygulamanın topolojisi gösterilmektedir:
Uygulamanın topolojisini gösteren diyagram.
Uygulama, Microsoft Entra Id'den Microsoft Graph için bir erişim belirteci almak üzere Java için Microsoft Entra ID Spring Boot Starter istemci kitaplığını kullanır. Erişim belirteci, kullanıcının kapsamda tanımlandığı şekilde Microsoft Graph API uç noktasına erişme yetkisine sahip olduğunu kanıtlar.
Aşağıdaki bölümlerde örnek uygulamanın nasıl ayarlanacağı gösterilmektedir.
Örneği kopyalamak için bir Bash penceresi açın ve aşağıdaki komutu kullanın:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/2-Authorization-I/call-graph
Alternatif olarak, ms-identity-msal-java-samples deposuna gidin, ardından .zip dosyası olarak indirin ve sabit sürücünüze ayıklayın.
Önemli
Windows'ta dosya yolu uzunluğu sınırlamalarını önlemek için depoyu sabit sürücünüzün köküne yakın bir dizine kopyalayın veya ayıklayın.
Bu örnekte bir proje var. Aşağıdaki bölümlerde, Azure portalını kullanarak uygulamayı nasıl kaydedeceğiniz gösterilmektedir.
Kiracınızı seçmek için aşağıdaki adımları kullanın:
Azure Portal’ında oturum açın.
Hesabınız birden fazla Microsoft Entra ID kiracısında varsa Azure portalının köşesindeki profilinizi seçin ve ardından Dizini değiştir'i seçerek oturumunuzu istediğiniz Microsoft Entra ID kiracısına değiştirin.
Uygulamayı kaydetmek için aşağıdaki adımları kullanın:
Gezinti bölmesinde Uygulama Kayıtları'nı ve ardından Yeni kayıt'ı seçin.
Görüntülenen Uygulamayı kaydet sayfasında aşağıdaki uygulama kayıt bilgilerini girin:
java-spring-webapp-call-graph
.http://localhost:8080/login/oauth2/code/
.Uygulamayı kaydetmek için Kaydet'i seçin.
Uygulamanın kayıt sayfasında, daha sonra kullanmak üzere Uygulama (istemci) kimliği değerini bulun ve kopyalayın. Bu değeri uygulamanızın yapılandırma dosyasında veya dosyalarında kullanırsınız.
Uygulamanın kayıt sayfasında, gizli dizi oluşturabileceğiniz ve sertifikaları karşıya yükleyebileceğiniz sayfayı açmak için gezinti bölmesinde Sertifikalar ve gizli diziler'i seçin.
Gizli anahtarlar bölümünün altında, Yeni gizli anahtar'ı seçin.
Uygulama gizli dizisi gibi bir açıklama yazın.
Kullanılabilir sürelerden birini seçin: 1 yıl içinde, 2 yıl içinde veya Hiçbir Zaman Dolmaz.
Ekle'yi seçin. Oluşturulan değer görüntülenir.
Oluşturulan değeri kopyalayıp sonraki adımlarda kullanmak üzere kaydedin. Kodunuzun yapılandırma dosyaları için bu değere ihtiyacınız vardır. Bu değer yeniden görüntülenmez ve başka bir yolla alamazsınız. Bu nedenle, başka bir ekrana veya bölmeye gitmeden önce Azure portalından kaydettiğinizden emin olun.
Uygulamanın kayıt sayfasında, uygulamanızın ihtiyaç duyduğu API'lere erişim için sayfayı açmak için gezinti bölmesinde API izinleri bölmesini seçin.
İzin ekle'yi seçin ve ardından Microsoft API'leri sekmesinin seçili olduğundan emin olun.
Yaygın kullanılan Microsoft API'leri bölümünde Microsoft Graph'ı seçin.
Temsilci izinleri bölümünde listeden User.Read öğesini seçin. Gerekirse arama kutusunu kullanın.
İzinler ekle'yi seçin.
Uygulamayı yapılandırmak için aşağıdaki adımları kullanın:
Not
Aşağıdaki adımlarda veya ClientID
AppId
ile Application ID
aynıdır.
Projeyi IDE'nizde açın.
src\main\resources\application.yml dosyasını açın.
Yer tutucuyu Enter_Your_Tenant_ID_Here
bulun ve mevcut değeri Microsoft Entra kiracı kimliğiniz ile değiştirin.
Yer tutucuyu Enter_Your_Client_ID_Here
bulun ve mevcut değeri Azure portalından kopyalanan uygulama kimliğiyle veya clientId
java-spring-webapp-call-graph
uygulamanın kimliğiyle değiştirin.
Yer tutucuyu Enter_Your_Client_Secret_Here
bulun ve mevcut değeri Azure portalından kopyalanırken java-spring-webapp-call-graph
kaydettiğiniz değerle değiştirin.
Aşağıdaki bölümlerde, örneğin Azure Container Apps'e nasıl dağıtılacağı gösterilmektedir.
Contributor
veya Owner
iznine ihtiyacınız vardır. Daha fazla bilgi edinmek için bkz. Azure portal kullanarak Azure rolleri atama.0.3.47
veya üstü. En son sürümü yüklemek için komutunu kullanın az extension add --name containerapp --upgrade --allow-preview
.Projeyi hazırlamak için aşağıdaki adımları kullanın:
Projeyi oluşturmak için aşağıdaki Maven komutunu kullanın:
mvn clean verify
Aşağıdaki komutu kullanarak örnek projeyi yerel olarak çalıştırın:
mvn spring-boot:run
CLI'dan Azure'da oturum açmak için aşağıdaki komutu çalıştırın ve istemleri izleyerek kimlik doğrulama işlemini tamamlayın.
az login
CLI'nın en son sürümünü çalıştırdığınızdan emin olmak için yükseltme komutunu çalıştırın.
az upgrade
Ardından CLI için Azure Container Apps uzantısını yükleyin veya güncelleştirin.
Azure CLI'da komut çalıştırırken az containerapp
eksik parametrelerle ilgili hatalar alırsanız, Azure Container Apps uzantısının en son sürümünü yüklediğinizden emin olun.
az extension add --name containerapp --upgrade
Not
Mayıs 2024'den itibaren Azure CLI uzantıları artık önizleme özelliklerini varsayılan olarak etkinleştirmez. Container Apps önizleme özelliklerine erişmek için ile --allow-preview true
Container Apps uzantısını yükleyin.
az extension add --name containerapp --upgrade --allow-preview true
Geçerli uzantı veya modül yüklendikten sonra ve Microsoft.OperationalInsights
ad alanlarını kaydedinMicrosoft.App
.
Not
Azure Container Apps kaynakları ad alanından Microsoft.Web
ad alanına Microsoft.App
geçirildi. Daha fazla ayrıntı için Microsoft.Web'den Mart 2022'de Microsoft.App ad alanı geçişi bölümüne bakın.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Azure CLI kurulumunuz tamamlandıktan sonra bu makalenin tamamında kullanılan ortam değişkenlerini tanımlayabilirsiniz.
Bash kabuğunuzda aşağıdaki değişkenleri tanımlayın.
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
Kaynak grubu oluşturun.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
Otomatik olarak oluşturulan log analytics çalışma alanıyla bir ortam oluşturun.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Kapsayıcı uygulaması ortamının varsayılan etki alanını gösterin. Sonraki bölümlerde kullanmak için bu etki alanını not edin.
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
Uygulamanızı Azure Container Apps'e dağıttığınızda, yeniden yönlendirme URL'niz Azure Container Apps'te dağıtılan uygulama örneğinizin yeniden yönlendirme URL'sine dönüşür. application.yml dosyanızdaki bu ayarları değiştirmek için aşağıdaki adımları kullanın:
Aşağıdaki örnekte gösterildiği gibi uygulamanızın src\main\resources\application.yml dosyasına gidin ve değerini post-logout-redirect-uri
dağıtılan uygulamanızın etki alanı adıyla değiştirin. ve <default-domain-of-container-app-environment>
değerlerini gerçek değerlerinizle değiştirmeyi <API_NAME>
unutmayın. Örneğin, önceki adımdaki Azure Container App ortamınızın varsayılan etki alanıyla ve ms-identity-api
uygulama adınız için değeri için post-logout-redirect-uri
kullanabilirsinizhttps://ms-identity-api.<default-domain>
.
post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
Bu dosyayı kaydettikten sonra uygulamanızı yeniden derlemek için aşağıdaki komutu kullanın:
mvn clean package
Önemli
Uygulamanın application.yml dosyası şu anda parametresindeki istemci gizli dizinizin değerini barındırıyor client-secret
. Bu değeri bu dosyada tutmak iyi bir uygulama değildir. Dosyayı bir Git deposuna işlerseniz de risk alıyor olabilirsiniz. Önerilen yaklaşım için bkz . Azure Container Apps'te gizli dizileri yönetme.
Azure Container Apps'te yeniden yönlendirme URI'si dağıtılan uygulamanızda değiştiğinden, Microsoft Entra Id uygulama kaydınızda yeniden yönlendirme URI'sini de değiştirmeniz gerekir. Bu değişikliği yapmak için aşağıdaki adımları kullanın:
Geliştiriciler için Microsoft kimlik platformu Uygulama kayıtları sayfasına gidin.
Uygulama kaydınızı aramak için arama kutusunu kullanın; örneğin, java-servlet-webapp-authentication
.
Adını seçerek uygulama kaydınızı açın.
Menüden Kimlik Doğrulaması'nı seçin.
Web - Yeniden Yönlendirme URI'leri bölümünde URI Ekle'yi seçin.
Uygulamanızın URI'sini doldurun; örneğin, https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
öğesini ekleyerek /login/oauth2/code/
.
Kaydet'i seçin.
JAR paketini Azure Container Apps'e dağıtın.
Not
Gerekirse Java derleme ortamı değişkenlerinde JDK sürümünü belirtebilirsiniz. Daha fazla bilgi için bkz . Azure Container Apps'te Java için ortam değişkenleri oluşturma.
Artık CLI komutuyla az containerapp up
WAR dosyanızı dağıtabilirsiniz.
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
Not
Varsayılan JDK sürümü 17'dir. Uygulamanızla uyumluluk için JDK sürümünü değiştirmeniz gerekiyorsa, sürüm numarasını ayarlamak için bağımsız değişkenini --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
kullanabilirsiniz.
Daha fazla derleme ortamı değişkeni için bkz . Azure Container Apps'te Java için ortam değişkenleri oluşturma.
Bu örnekte komut, containerapp up
uygulamanın URL'si olarak da bilinen tam etki alanı adını (FQDN) döndüren bağımsız değişkenini içerir --query properties.configuration.ingress.fqdn
. Herhangi bir dağıtım sorununu araştırmak üzere uygulamanın günlüklerini denetlemek için aşağıdaki adımları kullanın:
Dağıtım bölümünün Çıkışlar sayfasından çıkış uygulaması URL'sine erişin.
Azure Container Apps örneğine Genel Bakış sayfasının gezinti bölmesinden Günlükler'i seçerek uygulamanın günlüklerini denetleyin.
Örneği keşfetmek için aşağıdaki adımları kullanın:
Bu örnekte, Kullanıcıları Microsoft Entra ID kiracınızda oturum açmak ve Microsoft Graph'ı çağırmak için erişim belirteci almak üzere Java için Microsoft Entra ID Spring Boot Starter istemci kitaplığının nasıl kullanılacağı gösterilmektedir. Örnek ayrıca Spring Oauth2 İstemcisi ve Spring Web önyükleme başlatıcılarını da kullanır.
Aşağıdaki tabloda örnek proje klasörünün içeriği gösterilmektedir:
Dosya/klasör | Açıklama |
---|---|
pom.xml | Uygulama bağımlılıkları. |
src/main/resources/templates/ | Kullanıcı arabirimi için Kekik Şablonları. |
src/main/resources/application.yml | Application ve Microsoft Entra ID Boot Starter Library Configuration. |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Bu dizin ana uygulama giriş noktasını, denetleyiciyi ve yapılandırma sınıflarını içerir. |
.../MsIdentitySpringBootWebappApplication.java | Ana sınıf. |
.../SampleController.java | Uç nokta eşlemeleri olan denetleyici. |
.../SecurityConfig.java | Güvenlik yapılandırması - örneğin, hangi yolların kimlik doğrulaması gerektirdiği. |
.../Utilities.java | Yardımcı program sınıfı - örneğin, filtre kimliği belirteci talepleri. |
CHANGELOG.md | Örnekteki değişikliklerin listesi. |
CONTRIBUTING.md | Örneğe katkıda bulunma yönergeleri. |
LİSANS | Örneğin lisansı. |
Belirteç ayrıntılarını ayıklamak için uygulama, aşağıdaki örnekte gösterildiği gibi bir istek eşlemesinde Spring Security'nin AuthenticationPrincipal
ve OidcUser
nesnesini kullanır. Bu uygulamanın kimlik belirteci taleplerini nasıl kullandığına ilişkin tüm ayrıntılar için Örnek Denetleyici'ye bakın.
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Map<String, Object> claims = principal.getIdToken().getClaims();
}
Oturum açmak için uygulama, aşağıdaki örnekte gösterildiği gibi Java için Microsoft Entra ID Spring Boot Starter istemci kitaplığı tarafından otomatik olarak yapılandırılan Microsoft Entra Id oturum açma uç noktasına bir istekte bulunur:
<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>
Oturum kapatma için uygulama, aşağıdaki örnekte gösterildiği gibi uç noktaya bir POST isteğinde logout
bulunur:
<form action="#" th:action="@{/logout}" method="post">
<input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
Uygulamanın kullanıcı arabirimi şablonu sayfalarında, Spring Security Thymeleaf etiketlerini kullanan aşağıdaki örnekte gösterildiği gibi, kullanıcının kimliğinin doğrulanıp doğrulanmadığına göre görüntülenecek içeriği belirlemek için bazı basit mantık vardır:
<div sec:authorize="isAuthenticated()">
this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
this content only shows to not-authenticated users
</div>
Uygulama varsayılan olarak Kimlik Belirteci Ayrıntıları ve Çağrı Grafiği sayfalarını yalnızca oturum açmış kullanıcıların erişebilmesi için korur. Uygulama, application.yml dosyasından app.protect.authenticated
özelliğinden bu yolları yapılandırıyor. Uygulamanızın özel gereksinimlerini yapılandırmak için sınıflarınızdan birini genişletebilirsiniz AADWebSecurityConfigurationAdapter
. Örneğin, aşağıdaki kodda gösterilen bu uygulamanın SecurityConfig sınıfına bakın:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
@Value( "${app.protect.authenticated}" )
private String[] protectedRoutes;
@Override
public void configure(HttpSecurity http) throws Exception {
// use required configuration form AADWebSecurityAdapter.configure:
super.configure(http);
// add custom configuration:
http.authorizeRequests()
.antMatchers(protectedRoutes).authenticated() // limit these pages to authenticated users (default: /token_details, /call_graph)
.antMatchers("/**").permitAll(); // allow all other routes.
}
}
Kullanıcı adresine gittiği /call_graph
zaman, uygulama microsoft Entra ID önyükleme başlatıcısının GraphServiceClient
hazırladığı veya Oauth2AuthorizedClient
graphAuthorizedClient
kullanarak örneğini oluşturur. Uygulama uç noktayı çağırmasını /me
ister GraphServiceClient
ve geçerli oturum açmış kullanıcının ayrıntılarını görüntüler. GraphServiceClient
Java, v3 için Microsoft Graph SDK'sından alınmıştı.
Oauth2AuthorizedClient
doğru kapsamlarla hazırlanmalıdır. application.yml dosyasına ve aşağıdaki Kapsamlar bölümüne bakın. Oauth2AuthorizedClient
aşağıdaki örnekte gösterildiği gibi erişim belirtecini ortaya çıkararak isteklerin üst bilgisine GraphServiceClient
yerleştirmek Authorization
için kullanılır:
//see SampleController.java
@GetMapping(path = "/call_graph")
public String callGraph(@RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graphAuthorizedClient) {
// See the Utilities.graphUserProperties() method for the full example of the following operation:
GraphServiceClient graphServiceClient = Utilities.getGraphServiceClient(graphAuthorizedClient);
User user = graphServiceClient.me().buildRequest().get();
return user.displayName;
}
application.yml dosyasındaki aşağıdaki örnekte istenen kapsamlar gösterilmektedir:
# see application.yml file
authorization-clients:
graph:
# Specifies the Microsoft Graph scopes that your app needs access to:
scopes: https://graph.microsoft.com/User.Read
Kapsamlar , Microsoft Entra Id'ye uygulamanın istediği erişim düzeyini bildirir. Bu uygulama tarafından istenen Microsoft Graph kapsamları için bkz . application.yml.
Varsayılan olarak, uygulama kapsamlar değerini olarak https://graph.microsoft.com/User.Read
ayarlar. KapsamUser.Read
, /me uç noktasından geçerli oturum açmış kullanıcının bilgilerine erişmeye yöneliktir. /me uç noktasına yönelik geçerli istekler kapsamı içermelidirUser.Read
.
Bir kullanıcı oturum açtığında Microsoft Entra Id, uygulama tarafından istenen kapsamlara göre kullanıcıya bir onay iletişim kutusu sunar. Kullanıcı bir veya daha fazla kapsama onay verirse ve bir belirteç alırsa, kabul edilen kapsamlar sonuçta elde edilen erişim belirtecine kodlanır.
Bu uygulamada, graphAuthorizedClient
kullanıcının onayladığı kapsamları kanıtlayan erişim belirtecini ortaya çıkar. Uygulama, Graph isteklerini işleyen bir örneğini GraphServiceClient
oluşturmak için bu belirteci kullanır.
kullanılarak GraphServiceClient.me().buildRequest().get()
bir istek oluşturulur ve öğesine https://graph.microsoft.com/v1.0/me
yapılır. Erişim belirteci isteğin Authorization
üst bilgisine yerleştirilir.
OAuth 2.0 protokollerinin bu senaryoda ve diğer senaryolarda nasıl çalıştığı hakkında daha fazla bilgi için bkz . Microsoft Entra Id için Kimlik Doğrulama Senaryoları.
Ekinlikler
17 Mar 23 - 21 Mar 23
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunEğitim
Modül
Java web uygulamasında Microsoft Entra Id ile kullanıcılarda oturum açma - Training
Microsoft Entra Id ile kullanıcıların kimliğini doğrulamayı ve Microsoft Kimlik Doğrulama Kitaplığı'ni kullanarak java web uygulamasındaki verilere yetkili erişim elde etmeyi öğrenin.
Sertifikasyon
Microsoft Sertifikalı: Kimlik ve Erişim Yöneticisi İş Ortağı - Certifications
Kimlik çözümlerini modernleştirmek, karma çözümleri uygulamak ve kimlik idaresini uygulamak için Microsoft Entra ID'nin özelliklerini gösterin.
Belgeler
Bu hızlı başlangıçta, bir Java uygulamasının bir erişim belirteci alabileceğini ve uygulamanın kendi kimliğini kullanarak Microsoft kimlik platformu uç noktası tarafından korunan bir API'yi nasıl çağırabileceğini öğreneceksiniz
Grupları ve grup taleplerini kullanarak Java Spring Boot uygulamalarının güvenliğini sağlama - Azure
Microsoft kimlik platformu ile güvenlik gruplarını kullanarak yollara erişimi kısıtlamak için bir Java Spring Boot web uygulaması geliştirmeyi gösterir.
Bu hızlı başlangıçta, bir Python işleminin uygulamanın kendi kimliğini kullanarak nasıl erişim belirteci alabileceğini ve Microsoft kimlik platformu tarafından korunan bir API'yi nasıl çağırabileceğini öğreneceksiniz
Microsoft Entra Id kullanarak Java Spring Boot uygulamalarının güvenliğini sağlama - Azure
Microsoft Entra hesabıyla oturum açmayı destekleyen bir Java Spring Boot web uygulamasının nasıl geliştirildiğini gösterir.