チュートリアル:Azure Active Directory B2C 用の Spring Boot Starter を使用して Java Web アプリをセキュリティで保護するTutorial: Secure a Java web app using the Spring Boot Starter for Azure Active Directory B2C.

概要Overview

この記事では、Azure Active Directory (Azure AD) 用 Spring Boot Starter を使用した Spring Initializr で Java アプリを作成する方法について説明します。This article demonstrates creating a Java app with the Spring Initializr that uses the Spring Boot Starter for Azure Active Directory (Azure AD).

このチュートリアルでは、以下の内容を学習します。In this tutorial, you learn how to:

  • Spring Initializr を使用して Java アプリケーションを作成するCreate a Java application using the Spring Initializr
  • Azure Active Directory B2C を構成するConfigure Azure Active Directory B2C
  • Spring Boot クラスと注釈を使用してアプリケーションをセキュリティで保護するSecure the application with Spring Boot classes and annotations
  • Java アプリケーションをビルドしてテストするBuild and test your Java application

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

この記事の手順を実行するには、次の前提条件を満たす必要があります。The following prerequisites are required in order to complete the steps in this article:

  • サポートされている Java Development Kit (JDK)。A supported Java Development Kit (JDK). Azure での開発時に使用可能な JDK の詳細については、https://aka.ms/azure-jdks を参照してください。For more information about the JDKs available for use when developing on Azure, see https://aka.ms/azure-jdks.
  • Apache Maven バージョン 3.0 以降。Apache Maven, version 3.0 or later.

Spring Initializr を使用したアプリの作成Create an app using Spring Initializr

  1. https://start.spring.io/ を参照します。Browse to https://start.spring.io/.

  2. JavaMaven プロジェクトを生成することを指定し、アプリケーションの [Group](グループ)[Artifact](アーティファクト) に名前を入力して、Spring Initializr の [Web] および [Security](セキュリティ) モジュールを選択します。Specify that you want to generate a Maven project with Java, enter the Group and Artifact names for your application, and then select the Web and Security module of the Spring Initializr.

    グループとアーティファクトの名前を指定する

  3. [Generate Project](プロジェクトの生成) をクリックし、メッセージが表示されたら、ローカル コンピューター上のパスにプロジェクトをダウンロードします。Click Generate Project, download the project to a path on your local computer when prompted.

Azure Active Directory インスタンスの作成Create Azure Active Directory instance

Active Directory インスタンスを作成するCreate the Active Directory instance

  1. https://portal.azure.com にログインします。Log into https://portal.azure.com.

  2. [+リソースの作成][ID][Azure Active Directory B2C] の順にクリックします。Click +Create a resource, then Identity, and then Azure Active Directory B2C.

    新しい Azure Active Directory B2C インスタンスを作成する

  3. 組織名初期ドメイン名を入力し、ドメイン名${your-tenant-name} として記録して [作成] をクリックします。Enter your Organization name and your Initial domain name, record the domain name as your ${your-tenant-name} and click Create.

    B2C テナント名の取得

  4. Azure portal ツール バーの右上にあるご自身のアカウント名を選択し、 [ディレクトリの切り替え] をクリックします。Select your account name on the top-right of the Azure portal toolbar, then click Switch directory.

    Azure Active Directory を選択する

  5. ドロップダウン メニューから新しく作成した Azure Active Directory を選択します。Select your new Azure Active Directory from the drop-down menu.

    Azure Active Directory を選択する

  6. b2c を検索し、Azure AD B2C サービスをクリックします。Search b2c and click Azure AD B2C service.

    Azure Active Directory B2C インスタンスの検索

Spring Boot アプリのアプリケーション登録を追加するAdd an application registration for your Spring Boot app

  1. ポータル メニューから Azure AD B2C を選択し、 [アプリケーション][追加] の順にクリックします。Select Azure AD B2C from the portal menu, click Applications, and then click Add.

    新しいアプリ登録を追加する

  2. アプリケーションの [名前] を指定し、 [応答 URL]http://localhost:8080/home を追加し、アプリケーション ID${your-client-id} として記録して [保存] をクリックします。Specify your application Name, add http://localhost:8080/home for the Reply URL, record the Application ID as your ${your-client-id} and then click Save.

    アプリケーションの応答 URL の追加

  3. ご使用のアプリケーションから [キー] を選択し、 [キーの生成] をクリックして ${your-client-secret} を生成してから [保存] をクリックします。Select Keys from your application, click Generate key to generate ${your-client-secret} and then Save.

  4. 左側の [ユーザー フロー] を選択し、[新しいユーザー フロー]クリックします。Select User flows on your left, and then Click **New user flow **.

    ユーザー フローの作成

  5. [サインアップまたはサインイン][Profile editing](プロファイル編集)[パスワードのリセット] を選択し、それぞれユーザー フローを作成します。Choose Sign up or in, Profile editing and Password reset to create user flows respectively. ユーザー フローの [名前][ユーザー属性と要求] を指定し、 [作成] をクリックします。Specify your user flow Name and User attributes and claims, click Create.

    ユーザー フローの構成

アプリの構成およびコンパイルConfigure and compile your app

  1. このチュートリアルで先ほど作成しダウンロードしたプロジェクト アーカイブからディレクトリにファイルを抽出します。Extract the files from the project archive you created and downloaded earlier in this tutorial into a directory.

  2. プロジェクトの親フォルダーに移動し、テキスト エディターで pom.xml Maven プロジェクト ファイルを開きます。Navigate to the parent folder for your project, and open the pom.xml Maven project file in a text editor.

  3. Spring OAuth2 セキュリティの依存関係を pom.xml に追加します。Add the dependencies for Spring OAuth2 security to the pom.xml:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-active-directory-b2c-spring-boot-starter</artifactId>
        <version>2.1.6.M2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity5</artifactId>
    </dependency>
    
  4. pom.xml ファイルを保存して閉じます。Save and close the pom.xml file.

  5. プロジェクトの src/main/resources フォルダーに移動し、テキスト エディターで application.yml ファイルを開きます。Navigate to the src/main/resources folder in your project and open the application.yml file in a text editor.

  6. 前に作成した値を使用して、アプリ登録の設定を指定します。たとえば、以下のとおりです。Specify the settings for your app registration using the values you created earlier; for example:

    azure:
      activedirectory:
        b2c:
          tenant: ${your-tenant-name}
          client-id: ${your-client-id}
          client-secret: ${your-client-secret}
          reply-url: ${your-reply-url-from-aad} # should be absolute url.
          logout-success-url: ${you-logout-success-url}
          user-flows:
            sign-up-or-sign-in: ${your-sign-up-or-in-user-flow}
            profile-edit: ${your-profile-edit-user-flow}     # optional
            password-reset: ${your-password-reset-user-flow} # optional
    

    各値の説明:Where:

    パラメーターParameter 説明Description
    azure.activedirectory.b2c.tenant 前の AD B2C の ${your-tenant-name を指定します。Contains your AD B2C's ${your-tenant-name from earlier.
    azure.activedirectory.b2c.client-id 以前に完了したアプリの ${your-client-id} を指定します。Contains the ${your-client-id} from your application that you completed earlier.
    azure.activedirectory.b2c.client-secret 以前に完了したアプリの ${your-client-secret} を指定します。Contains the ${your-client-secret} from your application that you completed earlier.
    azure.activedirectory.b2c.reply-url 以前に完了したアプリの応答 URL のいずれかを指定します。Contains one of the Reply URL from your application that you completed earlier.
    azure.activedirectory.b2c.logout-success-url アプリケーションが正常にログアウトしたときの URL を指定します。Specify the URL when your application logout successfully.
    azure.activedirectory.b2c.user-flows 以前に完了したユーザー フローの名前を指定します。Contains the name of the user flows that you completed earlier.

    注意

    application.yml ファイルで使用できる値の完全な一覧については、GitHub の [Azure Active Directory Spring Boot Sample](Azure Active Directory Spring Boot のサンプル)[AAD B2C Spring Boot Sample](AAD B2C Spring Boot のサンプル) を参照してください。For a full list of values that are available in your application.yml file, see the [Azure Active Directory B2C Spring Boot Sample][AAD B2C Spring Boot Sample] on GitHub.

  7. application.yml ファイルを保存して閉じます。Save and close the application.yml file.

  8. アプリケーションの Java ソース フォルダー内に controller という名前のフォルダーを作成します。Create a folder named controller in the Java source folder for your application.

  9. controller フォルダーに "HelloController.java" という名前の新しい Java ファイルを作成し、テキスト エディターで開きます。Create a new Java file named HelloController.java in the controller folder and open it in a text editor.

  10. 次のコードを入力し、ファイルを保存して閉じます。Enter the following code, then save and close the file:

    package sample.aad.controller;
    
    import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
    import org.springframework.security.oauth2.core.user.OAuth2User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @Controller
    public class WebController {
    
        private void initializeModel(Model model, OAuth2AuthenticationToken token) {
            if (token != null) {
                final OAuth2User user = token.getPrincipal();
    
                model.addAttribute("grant_type", user.getAuthorities());
                model.addAllAttributes(user.getAttributes());
            }
        }
    
        @GetMapping(value = "/")
        public String index(Model model, OAuth2AuthenticationToken token) {
            initializeModel(model, token);
    
            return "home";
        }
    
        @GetMapping(value = "/greeting")
        public String greeting(Model model, OAuth2AuthenticationToken token) {
            initializeModel(model, token);
    
            return "greeting";
        }
    
        @GetMapping(value = "/home")
        public String home(Model model, OAuth2AuthenticationToken token) {
            initializeModel(model, token);
    
            return "home";
        }
    }
    
  11. アプリケーションの Java ソース フォルダー内に security という名前のフォルダーを作成します。Create a folder named security in the Java source folder for your application.

  12. security フォルダーに "WebSecurityConfig.java" という名前の新しい Java ファイルを作成し、テキスト エディターで開きます。Create a new Java file named WebSecurityConfig.java in the security folder and open it in a text editor.

  13. 次のコードを入力し、ファイルを保存して閉じます。Enter the following code, then save and close the file:

    package sample.aad.security;
    
    import com.microsoft.azure.spring.autoconfigure.b2c.AADB2COidcLoginConfigurer;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    @EnableWebSecurity
    public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    
        private final AADB2COidcLoginConfigurer configurer;
    
        public WebSecurityConfiguration(AADB2COidcLoginConfigurer configurer) {
            this.configurer = configurer;
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .authorizeRequests()
                    .anyRequest()
                    .authenticated()
                    .and()
                    .apply(configurer)
            ;
        }
    }
    
  14. greeting.htmlhome.htmlAzure AD B2C Spring Boot サンプルからコピーし、${your-profile-edit-user-flow}${your-password-reset-user-flow} をそれぞれ前に完了したユーザー フロー名で置き換えます。Copy the greeting.html and home.html from Azure AD B2C Spring Boot Sample, and replace the ${your-profile-edit-user-flow} and ${your-password-reset-user-flow} with your user flow name respectively that completed earlier.

アプリのビルドとテストBuild and test your app

  1. コマンド プロンプトを開き、ディレクトリをアプリの pom.xml ファイルがあるフォルダーに変更します。Open a command prompt and change directory to the folder where your app's pom.xml file is located.

  2. Spring Boot アプリケーションを Maven でビルドし、実行します。次に例を示します。Build your Spring Boot application with Maven and run it; for example:

    mvn clean package
    mvn spring-boot:run
    
  3. Maven によってアプリケーションがビルドされ、起動したら、Web ブラウザーで http://localhost:8080/ を開きます。ログイン ページにリダイレクトされます。After your application is built and started by Maven, open http://localhost:8080/ in a web browser; you should be redirected to login page.

    ログイン ページ

  4. ${your-sign-up-or-in} ユーザー フローの名前を持つリンクをクリックすると、Azure AD B2C にリダイレクトされ、認証プロセスが開始されます。Click linke with name of ${your-sign-up-or-in} user flow, you should be rediected Azure AD B2C to start the authentication process.

    Azure AD B2C のログイン

  5. 正常にログインすると、ブラウザーにサンプルの home page が表示されます。After you have logged in successfully, you should see the sample home page from the browser,

    正常なログイン

まとめSummary

このチュートリアルでは、Azure Active Directory B2C スターターを使用した新しい Java Web アプリケーションの作成、新しい Azure AD B2C テナントの構成とそのテナントへの新しいアプリケーションの登録を行いました。また、Spring の注釈とクラスを使用して Web を保護するようにアプリケーションを構成しました。In this tutorial, you created a new Java web application using the Azure Active Directory B2C starter, configured a new Azure AD B2C tenant and registered a new application in it, and then configured your application to use the Spring annotations and classes to protect the web app.

次の手順Next steps

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。To learn more about Spring and Azure, continue to the Spring on Azure documentation center.