ホームページ > Java > &#&チュートリアル > Java を使用して Spring Security SAML ベースのシングル サインオン システムを開発する方法

Java を使用して Spring Security SAML ベースのシングル サインオン システムを開発する方法

王林
リリース: 2023-09-22 08:49:02
オリジナル
1775 人が閲覧しました

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

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

はじめに:
インターネットの急速な発展に伴い、さらに多くのアプリケーションプログラムが開発されています。これらのアプリケーションでは、ユーザー ログインは最も一般的な機能の 1 つです。ただし、エンタープライズ レベルのアプリケーションの場合、ユーザーは複数のシステムにログインする必要があるため、ユーザーのログイン エクスペリエンスが非常に低下します。この問題を解決するために登場したのがシングルサインオンシステム(Single Sign-On、以下SSO)です。

はじめに:
シングル サインオン システムを使用すると、ユーザーは一度ログインすると、ログイン資格情報を繰り返し入力することなく、企業内のさまざまなシステムにあるアプリケーションにアクセスできます。 Spring Security は強力なセキュリティ フレームワークであり、SAML (Security Assertion Markup Language) はクロスドメイン認証および認可のオープン標準です。

この記事では、Java を使用して Spring Security SAML に基づくシングル サインオン システムを開発する方法を紹介し、具体的なコード例を示します。

ステップ 1: 準備

  1. Java、Spring Boot、Maven をインストールします。
  2. Spring Boot プロジェクトを作成し、依存関係を追加します: spring-boot-starter-security、spring-security-saml2-core、spring-security-saml2-service-provider。

ステップ 2: SAML の構成

  1. SP メタデータ、IDP メタデータ、およびキー情報を application.properties ファイルに構成します。
# SP元数据
security.saml2.metadata.sp.entity-id=
security.saml2.metadata.sp.private-key-location=
security.saml2.metadata.sp.public-key-location=

# IDP元数据
security.saml2.metadata.idp.entity-id=
security.saml2.metadata.idp.single-sign-on-service.location=
security.saml2.metadata.idp.single-logout-service.location=

# 密钥信息
security.saml2.keystore.location=
security.saml2.keystore.password=
security.saml2.private-key.password=
ログイン後にコピー
  1. 「SAMLWebSecurityConfig」という名前の Java クラスを作成し、「SAMLConfigurerAdapter」を継承して、対応するメソッドをオーバーライドします。
@Configuration
@EnableWebSecurity
public class SAMLWebSecurityConfig extends SAMLConfigurerAdapter {

    @Autowired
    private SAMLUserDetailsService samlUserDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/saml/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .apply(saml())
                .userDetailsService(samlUserDetailsService);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(samlAuthenticationProvider());
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }
}
ログイン後にコピー
  1. 「SAMLConfigurer」という名前の Java クラスを作成し、「SAMLConfigurerAdapter」を継承して、対応するメソッドをオーバーライドします。
public class SAMLConfigurer extends SAMLConfigurerAdapter {

    @Override
    public void configure(SAMLServiceProviderConfigurer saml) throws Exception {
        saml.keyStore()
                .storeFilePath(keystoreLocation)
                .password(keystorePassword)
                .keyname(keyAlias)
                .keyPassword(keyPassword)
                .and()
                .protocol(PROTOCOL)
                .hostname(HOSTNAME)
                .basePath(BASE_PATH)
                .entityId(SP_ENTITY_ID)
                .metadataFilePath(SP_METADATA_LOCATION);
    }
}
ログイン後にコピー

ステップ 3: ユーザー サービスの作成

  1. 「SAMLUser」という名前の Java クラスを作成し、「SAMLUserDetailsS​​ervice」インターフェイスを実装し、対応するメソッドを実装します。
@Service
public class SAMLUser implements SAMLUserDetailsService {

    @Override
    public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException {
        String username = credential.getNameID().getValue();

        // 根据用户名查询用户信息
        // ...

        // 返回用户详细信息
        return new User(username, "", new ArrayList<>());
    }
}
ログイン後にコピー

ステップ 4: コントローラーの作成

  1. ログイン成功後のジャンプを処理する「HomeController」という名前の Java クラスを作成します。
@Controller
public class HomeController {

    @RequestMapping("/")
    public String home() {
        return "home";
    }
}
ログイン後にコピー
  1. ログアウトを処理する「LogoutController」という名前の Java クラスを作成します。
@Controller
public class LogoutController {

    @RequestMapping("/logout")
    public String logout() {
        return "logout";
    }
}
ログイン後にコピー

ステップ 5: ビューの作成

  1. 2 つのテンプレート ファイル home.html と logout.html を src/main/resources/templates ディレクトリに作成します。

home.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    <h1>Welcome to Home Page</h1>
</body>
</html>
ログイン後にコピー

logout.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Logout</title>
</head>
<body>
    <h1>You have been logged out</h1>
</body>
</html>
ログイン後にコピー

概要:
これまでのところ、Java を使用した Spring Security SAML の開発は完了しました。シングルサインオンシステムの手順。 SAML を構成し、ユーザー サービスを作成することで、優れたユーザー エクスペリエンスを提供する安定した安全なログイン システムを実装できます。

参考:

  1. Spring Security SAML 公式ドキュメント: https://docs.spring.io/spring-security-saml/docs/current/reference/htmlsingle/

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

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