我已经设置了Wildfly,使用OAUTHBEARER身份验证机制在我的服务器和桌面应用程序之间远程查找JNDI EJB,效果非常好。
然而,我也想建立一个简单的。属性基于文件的身份验证方法,在没有令牌的情况下与服务器通信,以便能够请求密钥斗篷身份验证服务器,或访问有关密钥斗篷身份验证服务器的信息,因为我不想将其硬编码到客户端应用程序中,而且我似乎无法使其工作。无论我做什么,服务器都会拒绝我的身份验证尝试。
我试图用以下示例代码访问预授权bean:
private static PreAuth lookUpPreAuthBean() throws NamingException
{
final Properties jndiProperties = new Properties();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
jndiProperties.put(Context.PROVIDER_URL,"http-remoting://localhost:8080");
jndiProperties.put(Context.SECURITY_PRINCIPAL, "test");
jndiProperties.put(Context.SECURITY_CREDENTIALS, "test");
final Context initialContext = new InitialContext(jndiProperties);
return (PreAuth) initialContext.lookup("ejb:server/server-ejb/PreAuthImpl!co.my.package.server.PreAuth");
}
以下是我得到的stacktrace:
Suppressed: javax.security.sasl.SaslException: ELY05019: No token was given
at org.wildfly.security.mechanism.oauth2.OAuth2Client.getInitialResponse(OAuth2Client.java:66)
at org.wildfly.security.sasl.oauth2.OAuth2SaslClient.evaluateMessage(OAuth2SaslClient.java:62)
at org.wildfly.security.sasl.util.AbstractSaslParticipant.evaluateMessage(AbstractSaslParticipant.java:225)
at org.wildfly.security.sasl.util.AbstractSaslClient.evaluateChallenge(AbstractSaslClient.java:98)
at org.wildfly.security.sasl.util.AbstractDelegatingSaslClient.evaluateChallenge(AbstractDelegatingSaslClient.java:54)
at org.wildfly.security.sasl.util.PrivilegedSaslClient.lambda$evaluateChallenge$0(PrivilegedSaslClient.java:55)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at org.wildfly.security.sasl.util.PrivilegedSaslClient.evaluateChallenge(PrivilegedSaslClient.java:55)
at org.jboss.remoting3.remote.ClientConnectionOpenListener$Capabilities.lambda$handleEvent$1(ClientConnectionOpenListener.java:459)
at org.jboss.remoting3.EndpointImpl$TrackingExecutor.lambda$execute$0(EndpointImpl.java:991)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1348)
at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1280)
at java.base/java.lang.Thread.run(Thread.java:829)
Suppressed: javax.security.sasl.SaslException: DIGEST-MD5: Server rejected authentication
at org.jboss.remoting3.remote.ClientConnectionOpenListener$Authentication.handleEvent(ClientConnectionOpenListener.java:760)
at org.jboss.remoting3.remote.ClientConnectionOpenListener$Authentication.handleEvent(ClientConnectionOpenListener.java:602)
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
at org.xnio.conduits.ReadReadyHandler$ChannelListenerHandler.readReady(ReadReadyHandler.java:66)
at org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit.java:89)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:591)
如果我要提供一个令牌,承载机制工作,似乎出于某种原因,另一个机制没有进行身份验证
以下是Wildfly 24单机版的部分。我修改过的xml:
EJB子系统:
...
<default-security-domain value="other"/>
<application-security-domains>
<application-security-domain name="other" security-domain="ApplicationDomain"/>
</application-security-domains>
...
Elytron子系统:
<security-domains>
<security-domain name="ApplicationDomain" default-realm="JWTRealm" permission-mapper="default-permission-mapper">
<realm name="JWTRealm" role-decoder="jwt-to-roles"/>
<realm name="PreAuthRealm" role-decoder="groups-to-roles"/>
</security-domain>
...
<\security-domains>
<security-realms>
<identity-realm name="local" identity="$local"/>
<properties-realm name="PreAuthRealm">
<users-properties path="application-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="PreAuthRealm"/>
<groups-properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
</properties-realm>
<token-realm name="JWTRealm" principal-claim="*my claim*">
<jwt issuer="*my issuer*" audience="account">
<key kid="*my key id*" public-key="*my public key*"/>
</jwt>
</token-realm>
</security-realms>
<sasl-authentication-factory name="application-sasl-authentication" sasl-server-factory="configured" security-domain="ApplicationDomain">
<mechanism-configuration>
<mechanism mechanism-name="OAUTHBEARER">
<mechanism-realm realm-name="JWTRealm"/>
</mechanism>
<mechanism mechanism-name="DIGEST-MD5">
<mechanism-realm realm-name="PreAuthRealm"/>
</mechanism>
</mechanism-configuration>
</sasl-authentication-factory>
远程处理子系统:
<subsystem xmlns="urn:jboss:domain:remoting:4.0">
<http-connector name="http-remoting-connector" connector-ref="default" sasl-authentication-factory="application-sasl-authentication"/>
</subsystem>
奇怪的是,如果我从远程处理子系统中删除sasl authentication factory=“application sasl authentication”
,然后放回原来的security realm=“ApplicationRealm”
以上代码运行,它实际上会从远程处理子系统中对我进行身份验证。属性文件,但当然,承载令牌部分将不起作用,这就是重点。
我在这里的设置错过了什么?我想达到的目标可能吗?
这不是一个解决方案,而是一个变通办法。通过不将领域命名为“PreAuthRealm”,而是将其命名为默认的“ApplicationRealm”
,使其工作,并且无论出于何种原因,将此领域设置为安全域中的默认领域都会使其和JWT领域工作。将“JWTRealm”
设置为默认值只会使JWTRealm工作。
我正在尝试配置WildFly Elytron以允许在管理界面上使用两个不同的域进行身份验证,并有一个后退。
在Zookeeper和代理身份验证上启用SASL时,我面临以下错误。 以下配置在JAAS文件中给出,该文件作为KAFKA_OPTS传递,将其作为JVM参数:- Kafka经纪人的服务器。属性设置了以下额外字段:- Zookeeper属性如下所示:
有人能帮我编写JAAS conf文件和Handler类以使用SASL/OAUTHBEARER进行身份验证吗? 在kafka文档中配置的JAAS文件中,这个选项的含义是什么?
机器认证 Sony Computer Entertainment Inc.运用了一种名为DNAS(Dynamic Network Authentication System)的独特认证系统,可帮助保护著作权与PSP™主机跟网络联机时的加密性。DNAS可能会于PSP™与网络联机时,自动从PSP™将机器ID、游戏名称等硬件与软件的相关信息传送至服务器。但这些被传送的信息不具任何可特定个人之数据。此项系
我有zookeeper配置,允许客户端通过sasl认证(使用digest md5)。Zookeeper配置为使用sasl,sasl身份验证提供程序存在于zookeeper配置中。我有jaas配置和所有用户的列表。每个客户端都有自己的jaas配置文件,其中包含用户和密码。在这种配置下,一切都很好——客户端可以使用zookeeper。 但事情是这样的。我有一些客户端无法直接连接到动物园管理员-它连接并
到 RADOS 网关的 Requests 请求可能已经经过验证也可能没有经 过验证。RGW 假设所有未经验证的请求都是由匿名用户发送的。RGW 支持预置的 ACLs。 认证 对请求进行身份验证需要在它发送到 RGW 服务器之前就包含一个 access 密钥和基于散列消息验证码(HMAC)。RGW 使用兼容 S3 的身份验证方法。 HTTP/1.1 PUT /buckets/bucket/objec