1.5. 创建 JAAS 域
1.5.1. Elytron 中的 JAAS 域 复制链接链接已复制到粘贴板!
Java 认证和授权服务(JAAS)域 jaas-realm
是一个安全域,您可以用来在 elytron
子系统中为用户的凭证验证和分配用户角色配置自定义登录模块。
您可以使用 jaas-realm
来保护 JBoss EAP 管理界面和已部署的应用。
JAAS 域通过初始化 javax.security.auth.login.LoginContext
(其使用 JAAS 配置文件中指定的登录模块)来验证用户凭据,。
登录模块是 javax.security.auth.login.LoginContext.LoginModule
接口的实现。将这些实现作为 JBoss EAP 模块添加到服务器中,并在 JAAS 配置文件中指定它们。
JAAS 配置文件示例
test { loginmodules.CustomLoginModule1 optional; loginmodules.CustomLoginModule2 optional myOption1=true myOption2=exampleOption; };
test {
loginmodules.CustomLoginModule1 optional;
loginmodules.CustomLoginModule2 optional myOption1=true myOption2=exampleOption;
};
- 1
- 配置
jaas-realm
时使用的条目的名称。 - 2
- 使用其可选标记登录模块。您可以使用 JAAS 定义的所有标志。如需更多信息,请参阅 Oracle Java SE 文档中的 JAAS 登录配置文件。
- 3
- 使用其可选标志和选项登录模块。
在登录模块中与属性映射和角色关联的主题的主体
您可以使用 主题 的主体将属性添加到从登录模块获取的身份中。主题 是正被身份验证的用户,主体是标识符,如用户名,包含在主体内。
Elytron 获取和映射身份,如下所示:
-
登录模块使用
javax.security.auth.Subject
代表用户,正被身份验证的 主题 。 -
主题 可以有多个
java.security.Principal
实例 principal 与之关联。 -
Elytron 使用
org.wildfly.security.auth.server.SecurityIdentity
来代表经过身份验证的用户。Elytron 将 主题 映射到SecurityIdentity
。
主题的 主体 被映射到具有以下规则的安全身份的属性:
-
属性的
key
是 主体 的简单类名称,可通过principal.getClass().getSimpleName()
调用获得。 -
value
是 主体 的名称,可通过principal.getName()
调用获得。 - 对于同一类型的 主体,这些值会附加到属性键下的集合中。
1.5.2. 开发自定义 JAAS 登录模块 复制链接链接已复制到粘贴板!
您可以创建自定义 Java 身份验证和授权服务(JAAS)登录模块来实现自定义身份验证和授权功能。
您可以通过 Elytron 子系统中的 jaas-realm
,使界面和部署的应用程序。登录模块不是部署的一部分,您可以将它们作为 JBoss EAP 模块包含在内。
以下流程仅作为示例提供。如果您已有要保护的应用程序,则可以跳过这些步骤,直接来到 向应用程序添加身份验证和授权。
1.5.2.1. 为 JAAS 登录模块开发创建一个 Maven 项目 复制链接链接已复制到粘贴板!
要创建自定义 Java 身份验证和授权服务(JAAS)登录模块,请创建一个具有所需依赖项和目录结构的 Maven 项目。
先决条件
- 您已安装了 Maven。如需更多信息,请参阅 下载 Apache Maven。
流程
在 CLI 中使用
mvn
命令来建立一个 Maven 项目。此命令为项目创建目录结构,以及pom.xml
配置文件。语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导航到应用程序根目录。
语法
cd <name-of-your-application>
$ cd <name-of-your-application>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
cd example-custom-login-module
$ cd example-custom-login-module
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将生成的
pom.xml
文件的内容替换为以下文本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除目录
site
和test
,因为本例不需要它们。rm -rf src/site/ rm -rf src/test/
$ rm -rf src/site/ $ rm -rf src/test/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在应用程序根目录中,输入以下命令:
mvn install
$ mvn install
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您会看到类似如下的输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以创建自定义的 JAAS 登录模块。
1.5.2.2. 创建自定义的 JAAS 登录模块 复制链接链接已复制到粘贴板!
通过创建实现 javax.security.auth.spi.LoginModule
接口的类来创建自定义的 Java 身份验证和授权服务(JAAS)登录模块。此外,为自定义登录模块创建具有志和选项的 JAAS 配置文件。
在此过程中,<application_home> 指向包含应用程序 pom.xml
配置文件的目录。
先决条件
您已创建了一个 Maven 项目。
如需更多信息,请参阅 为 JAAS 登录模块开发创建一个 Maven 项目。
流程
创建一个用于存储 Java 文件的目录。
语法
mkdir -p src/main/java/<path_based_on_artifactID>
$ mkdir -p src/main/java/<path_based_on_artifactID>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
mkdir -p src/main/java/com/example/loginmodule
$ mkdir -p src/main/java/com/example/loginmodule
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导航到包含源文件的目录。
语法
cd src/main/java/<path_based_on_groupID>
$ cd src/main/java/<path_based_on_groupID>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
cd src/main/java/com/example/loginmodule
$ cd src/main/java/com/example/loginmodule
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除生成的文件
App.java
。rm App.java
$ rm App.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为自定义登录模块源创建一个文件
ExampleCustomLoginModule.java
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 <application_home> 目录中创建 JAAS 配置文件
JAAS-login-modules.conf
。exampleConfiguration { com.example.loginmodule.ExampleCustomLoginModule optional; };
exampleConfiguration { com.example.loginmodule.ExampleCustomLoginModule optional; };
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
exampleConfiguration
是条目名称。 -
com.example.loginmodule.ExampleCustomLoginModule
是登录模块。 -
optional
是标志。
-
编译登录模块。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以使用登录模块来保护 JBoss EAP 管理界面和部署的应用程序。
1.5.3. 在 Elytron 中创建一个 jaas-realm 复制链接链接已复制到粘贴板!
创建由 Java 认证和授权服务(JAAS)兼容自定义登录模块支持的 Elytron 安全域,来保护 JBoss EAP 服务器界面或部署的应用程序。使用安全域来创建安全域。
先决条件
您已将自定义登录模块打包为 JAR。
如需示例登录模块,请参阅 开发自定义的 JAAS 登录模块。
- JBoss EAP 正在运行。
流程
使用管理 CLI,将登录模块 JAR 作为模块添加到 JBoss EAP。
语法
module add --name=<name_of_the_login_moudle> --resources=<path_to_the_login_module_jar> --dependencies=org.wildfly.security.elytron
module add --name=<name_of_the_login_moudle> --resources=<path_to_the_login_module_jar> --dependencies=org.wildfly.security.elytron
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
module add --name=exampleLoginModule --resources=<path_to_login_module>/custom-login-modules-1.0.jar --dependencies=org.wildfly.security.elytron
module add --name=exampleLoginModule --resources=<path_to_login_module>/custom-login-modules-1.0.jar --dependencies=org.wildfly.security.elytron
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从登录模块和 JAAS 登录配置文件创建
jaas-realm
。语法
/subsystem=elytron/jaas-realm=<jaas_realm_name>:add(entry=<entry-name>,path=<path_to_module_config_file>,module=<name_of_the_login_module>,callback-handler=<name_of_the_optional_callback_handler>)
/subsystem=elytron/jaas-realm=<jaas_realm_name>:add(entry=<entry-name>,path=<path_to_module_config_file>,module=<name_of_the_login_module>,callback-handler=<name_of_the_optional_callback_handler>)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/jaas-realm=exampleSecurityRealm:add(entry=exampleConfiguration,path=<path_to_login_module>/JAAS-login-modules.conf,module=exampleLoginModule)
/subsystem=elytron/jaas-realm=exampleSecurityRealm:add(entry=exampleConfiguration,path=<path_to_login_module>/JAAS-login-modules.conf,module=exampleLoginModule)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个引用
jaas-realm
的安全域。语法
/subsystem=elytron/security-domain=<security_domain_name>:add(default-realm=<jaas_realm_name>,realms=[{realm=<jaas_realm_name>}],permission-mapper=default-permission-mapper)
/subsystem=elytron/security-domain=<security_domain_name>:add(default-realm=<jaas_realm_name>,realms=[{realm=<jaas_realm_name>}],permission-mapper=default-permission-mapper)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/security-domain=exampleSecurityDomain:add(default-realm=exampleSecurityRealm,realms=[{realm=exampleSecurityRealm}],permission-mapper=default-permission-mapper) {"outcome" => "success"}
/subsystem=elytron/security-domain=exampleSecurityDomain:add(default-realm=exampleSecurityRealm,realms=[{realm=exampleSecurityRealm}],permission-mapper=default-permission-mapper) {"outcome" => "success"}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以使用创建的安全域来向管理界面和应用程序添加身份验证和授权。如需更多信息,请参阅 保护管理界面和应用程序。