You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java(AWS部署)集成Okta SAML单点登录的步骤咨询

Okta SAML 2.0集成到Java应用的分步指南(适配多租户企业客户)

一、前置准备

  • 确保你的Java应用已具备HTTPS访问能力(AWS环境可通过ALB搭配ACM证书实现),SAML协议强制要求HTTPS传输
  • 收集每个企业客户的Okta租户域名(如C1的c1.okta.com)
  • 准备应用的断言消费者服务(ACS)URL:按多租户规则定义,格式为https://www.example.com/login/saml2/sso/{tenant-id}({tenant-id}替换为客户标识,如c1、c2)
  • 准备应用的实体ID(Entity ID):格式为https://www.example.com/saml2/service-provider/{tenant-id},作为服务提供商的唯一标识

二、Okta端客户侧配置(指导客户完成)

每个企业客户需在自身Okta租户中创建SAML集成应用:

  1. 登录Okta管理员控制台,进入Applications > Applications,点击Create App Integration
  2. 选择SAML 2.0,点击Next
  3. 填写应用名称(如「Example.com 访问门户」),可上传应用Logo,点击Next
  4. 在Configure SAML页面配置核心参数:
    • Single sign on URL:填入你提供的对应客户ACS URL(如https://www.example.com/login/saml2/sso/c1),勾选Use this for Recipient URL and Destination URL
    • Audience URI (SP Entity ID):填入对应客户的实体ID(如https://www.example.com/saml2/service-provider/c1)
    • Name ID format:选择EmailAddress,应用用户名选user.email(需与你的系统用户邮箱字段匹配)
    • (可选)配置属性声明:按需传递用户姓名、部门等信息,比如Key填firstName,Value选user.firstName;Key填lastName,Value选user.lastName
  5. 点击Next,选择应用类型为This is an internal app that we have created,完成创建
  6. 进入应用Sign On标签,点击View SAML Setup Instructions,获取以下信息并提供给你:
    • IdP Entity ID
    • IdP Single Sign-On URL
    • X.509 Certificate(用于验证SAML断言签名)

三、Java应用端集成(基于Spring Security SAML2,主流方案)

1. 添加依赖

如果是Spring Boot应用,添加Maven依赖:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-saml2-service-provider</artifactId>
</dependency>

2. 多租户SAML配置

创建安全配置类,动态加载各客户的Okta IdP配置(可存储在AWS Secrets Manager或数据库中):

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Autowired
    private TenantSamlProperties tenantSamlProperties; // 从配置源加载各客户SAML配置

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
            .saml2Login(saml2 -> saml2
                .authenticationManagerResolver(new TenantSamlAuthenticationManagerResolver(tenantSamlProperties))
            )
            .saml2Logout(saml2 -> saml2
                .logoutRequest(logout -> logout.logoutUrl("/logout/saml2/slo/{tenant-id}"))
            );
        return http.build();
    }
}

3. SAML断言映射

自定义转换器,将Okta返回的SAML属性映射到你的系统用户实体:

@Component
public class CustomSaml2UserConverter implements Saml2AuthenticatedUserConverter {

    @Autowired
    private AppUserService userService;

    @Override
    public AbstractAuthenticationToken convert(Saml2AuthenticatedUser user, HttpServletRequest request) {
        // 提取SAML断言中的用户信息
        String email = user.getEmail();
        String firstName = user.getFirstname();
        String lastName = user.getLastname();
        
        // 查询或创建系统用户
        AppUser appUser = userService.findOrCreateUserByEmail(email, firstName, lastName);
        
        return new UsernamePasswordAuthenticationToken(appUser, null, appUser.getAuthorities());
    }
}

4. 签名验证配置

将客户提供的X.509证书加载到应用中,用于验证IdP发送的SAML断言签名:

// 示例:从字符串证书创建X509Certificate对象
public X509Certificate loadCertificate(String certString) throws CertificateException {
    String cleanedCert = certString.replaceAll("-----BEGIN CERTIFICATE-----", "")
                                  .replaceAll("-----END CERTIFICATE-----", "")
                                  .replaceAll("\\s+", "");
    byte[] certBytes = Base64.getDecoder().decode(cleanedCert);
    CertificateFactory factory = CertificateFactory.getInstance("X.509");
    return (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(certBytes));
}

四、测试与验证

  1. 针对单个客户(如C1),在其Okta租户中创建测试用户并分配应用权限
  2. 访问对应客户的登录入口https://www.example.com/login/saml2/sso/c1,验证是否跳转到客户Okta登录页面
  3. 输入测试用户凭证,验证是否成功登录并进入应用,同时确认用户信息正确映射
  4. 测试注销流程,验证是否跳转到Okta注销页面后返回应用

五、核心疑问解答

  • SAML断言:Okta作为IdP发送给你的应用(SP)的加密身份凭证,包含用户身份信息和数字签名,用于验证用户身份合法性
  • ACS URL:应用接收IdP发送的SAML断言的端点,必须为HTTPS,确保传输安全
  • Entity ID:SP与IdP之间的唯一标识,确保双方通信的是目标应用,避免混淆
  • 多租户适配:通过为每个客户分配唯一tenant-id,对应不同的ACS URL、Entity ID和Okta IdP配置,实现客户身份隔离

内容的提问来源于stack exchange,提问作者Mayank Sinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:13:16