Java を使用して Spring Security OAuth2 に基づくシングル サインオン システムを開発する方法

WBOY
リリース: 2023-09-20 13:06:11
オリジナル
1115 人が閲覧しました

如何使用Java开发一个基于Spring Security OAuth2的单点登录系统

Java を使用して Spring Security OAuth に基づくシングル サインオン システムを開発する方法2

はじめに:
インターネットの急速な発展に伴い、ユーザーにログインを要求する Web サイトやアプリケーションが増えていますが、ユーザーは Web サイトやアプリケーションごとにアカウントとパスワードを覚えたくありません。シングル サインオン (SSO) システムはこの問題を解決し、ユーザーが一度ログインした後は認証を繰り返さずに複数の Web サイトやアプリケーションにアクセスできるようにします。この記事では、Java を使用して Spring Security OAuth2 に基づくシングル サインオン システムを開発する方法と、具体的なコード例を紹介します。

1. 準備作業:
開発を開始する前に、いくつかの基本的なツールと環境を準備する必要があります:

  1. JDK 1.8 以降、
  2. Maven 3.0以上;
  3. 開発 IDE (Eclipse、IntelliJ IDEA など);
  4. 利用可能な MySQL データベース。

2. Spring Boot プロジェクトの作成:
まず、Spring Boot プロジェクトを作成し、必要な依存関係を追加する必要があります。 EclipseまたはIntelliJ IDEAを開き、「新規」をクリックし、「Spring Starterプロジェクト」を選択し、必要な情報(プロジェクト名、パッケージ名など)を入力します。次に、次の依存関係をプロジェクトの pom.xml ファイルに追加します:

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-security</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.security.oauth</groupId>
       <artifactId>spring-security-oauth2</artifactId>
       <version>2.3.4.RELEASE</version>
   </dependency>
   <!-- 添加其他需要的依赖 -->
</dependencies>
ログイン後にコピー

3. Spring Security OAuth2 の構成:
次に、Spring Security OAuth2 モジュールを構成する必要があります。 application.yml という名前のファイルを src/main/resources ディレクトリに作成し、次の構成情報を追加します。

spring:
   security:
       oauth2:
           client:
               registration:
                   custom:
                       client-id: {your-client-id}
                       client-secret: {your-client-secret}
                       provider: custom
                       auth-uri: {authorization-uri}
                       token-uri: {token-uri}
                       user-info-uri: {user-info-uri}
                       redirect-uri: {redirect-uri}
                       scope: {scope-list}
               provider:
                   custom:
                       authorization-uri: {authorization-uri}
                       token-uri: {token-uri}
                       user-info-uri: {user-info-uri}
           resource:
               user-info-uri: {user-info-uri}
ログイン後にコピー

上記の構成では、 {your-client-id}、{your-client-secret} 、 {authorization-uri}、{token-uri}、{user-info-uri}、{redirect-uri}、および {scope-list} は、それぞれ実際の値に置き換える必要があります。

4. ログイン ページの作成:
次に、ユーザー ログイン用のログイン ページを作成する必要があります。 src/main/resources/templates ディレクトリに login.html という名前のファイルを作成し、次のコードを追加します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    <form method="post" action="/login">
        <div>
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" />
        </div>
        <div>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" />
        </div>
        <button type="submit">Login</button>
    </form>
</body>
</html>
ログイン後にコピー

5. 認証および認可サーバーを作成します。
次に、認証サーバー (認可サーバー) と認可サーバー (リソース サーバー) は、ユーザーの認証と認可を処理します。 SecurityConfig という名前の Java クラスを作成し、次のコードを追加します。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   
   @Override
   protected void configure(HttpSecurity http) throws Exception {
      http.authorizeRequests().antMatchers("/login").permitAll().anyRequest().authenticated()
           .and().formLogin().loginPage("/login").permitAll()
           .and().logout().logoutSuccessUrl("/login?logout").permitAll();

      http.csrf().disable();
   }
   
   @Override
   protected void configure(AuthenticationManagerBuilder auth) throws Exception {
      auth.inMemoryAuthentication()
           .withUser("admin").password("{noop}admin").roles("ADMIN");
   }
}
ログイン後にコピー

6. リソース サーバーを作成します。
次に、API を保護するためにリソース サーバーを作成する必要があります。 ResourceServerConfig という名前の Java クラスを作成し、次のコードを追加します。

@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
   
   @Override
   public void configure(HttpSecurity http) throws Exception {
      http.authorizeRequests().antMatchers("/api/**").authenticated();
   }

}
ログイン後にコピー

7. シングル サインオンをテストします。
この時点で、シングル サインオン システムの開発は完了です。ブラウザからログイン ページ (http://localhost:8080/login) にアクセスすると、アプリケーションを実行してログインできます。ログインに成功したら、リクエスト ヘッダーにアクセス トークンを追加することで、他の保護されたリソースにアクセスできます。

結論:
この記事では、Java を使用して Spring Security OAuth2 に基づくシングル サインオン システムを開発する方法を紹介し、具体的なコード例を示します。シングル サインオン システムを使用すると、ユーザーは繰り返し認証することなく、複数の Web サイトやアプリケーションに簡単にアクセスできます。この記事が、読者が Spring Security OAuth2 の関連知識をよりよく理解し、適用するのに役立つことを願っています。

以上がJava を使用して Spring Security OAuth2 に基づくシングル サインオン システムを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!