目前,我有一个部署在openshift上的keycloak服务器和一个夸克rest服务应用程序,它有一个安全的资源,可以使用承载令牌访问。我读过夸夸斯安全相关文档,但无法访问安全资源。所有的人都有401的状态。
这些是我在项目的pom.xml中使用的库:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
<version>1.13.6.Final</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
<version>1.13.6.Final</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-oidc</artifactId>
<version>1.13.6.Final</version>
</dependency>这是application.properties文件配置:
更新:为夸克和oidc库添加了日志,但无法在夸克容器日志屏幕中获得有关该问题的任何信息。
# CORS configuration
quarkus.http.cors=true
quarkus.http.cors.access-control-allow-credentials=true
quarkus.http.cors.headers=accept, origin, authorization, content-type, x-requested-with
# OpenId Connect configuration
quarkus.oidc.auth-server-url=http://keycloak-myproject.192.168.1.110.nip.io/auth/realms/secured-realm
quarkus.oidc.tls.verification=none
quarkus.oidc.tenant-enabled=false
# Logging configuration
quarkus.log.level=TRACE
quarkus.log.category."io.quarkus.oidc.runtime.OidcProvider".min-level=TRACE
quarkus.log.category."io.quarkus.oidc.runtime.OidcProvider".level=TRACE
# resteasy security configuration
resteasy.role.based.security=true这是资源代码:
import io.quarkus.security.identity.SecurityIdentity;
import javax.annotation.security.RolesAllowed;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.eclipse.microprofile.jwt.JsonWebToken;
import org.jboss.resteasy.annotations.cache.NoCache;
@Path("/api")
public class SecuredResource {
@Inject
SecurityIdentity identity;
@Inject
JsonWebToken jwt;
@GET
@RolesAllowed("USERS")
@NoCache
@Path("/secured")
@Produces(MediaType.TEXT_PLAIN)
public String secured() {
String userName = identity.getPrincipal().getName();
return userName;
}
}从夸夸斯集装箱码头,我可以访问密钥披风服务器
curl -v -X GET $keycloak_url -H "Authorization: Bearer "$access_token返回200状态,但无法访问受保护的资源。
那么,我在这里做错什么了?
发布于 2021-06-09 08:43:11
http://keycloak-myproject.192.168.1.110.nip.io/auth/realms/secured-realm你确定url存在吗?
你试过访问它吗?成功了吗?
因为,当我试图访问服务器上类似的url时:
https://users.skycomposer.net/auth/realms/secured-realm它返回“未找到的页面”。
以下是Spring应用程序的keycloak配置:
#Keycloak Configuration
keycloak.auth-server-url=https://users.skycomposer.net/auth
keycloak.realm=SpringBootKeycloak
keycloak.resource=login-app
keycloak.public-client=true我认为对于Quarkus,应该是类似的,所以您也可以尝试这种配置。
有关如何设置密钥披风服务器:https://www.baeldung.com/spring-boot-keycloak的详细信息,请参阅本文
如果此配置没有帮助,请为您的Quarkus应用程序提供安全配置。
我的安全配置 for Spring Boot Application如下所示:
@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
// Submits the KeycloakAuthenticationProvider to the AuthenticationManager
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
auth.authenticationProvider(keycloakAuthenticationProvider);
}
@Bean
public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}
// Specifies the session authentication strategy
@Bean
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.authorizeRequests()
.antMatchers("/customers*", "/users*")
.hasRole("user")
.anyRequest()
.permitAll();
}
}当然,对于Quarkus来说,这应该是不同的。无论如何,您的Quarkus安全配置可能有助于找出问题的原因。
发布于 2021-06-09 22:29:04
确保您正确地配置了域"secured-realm“,
根据本文,夸夸斯密钥披风配置应该如下所示:
# OIDC Configuration
quarkus.oidc.auth-server-url=https://localhost:8543/auth/realms/quarkus
quarkus.oidc.client-id=backend-service
quarkus.oidc.credentials.secret=secret
quarkus.oidc.tls.verification=none
# Enable Policy Enforcement
quarkus.keycloak.policy-enforcer.enable=true至少在配置和指定客户端id时,您的配置中肯定缺少它。至于其他参数,我不确定,你需要做实验。
来自夸克集装箱码头的
访问密钥披风服务器
curl -v -X GET $keycloak_url -H“授权:无记名"$access_token
但这是您的“密钥披风管理”用户!
它与访问您的安全资源无关!
通过在“管理控制台”中创建新用户,您的安全资源应该与其他用户一起受到保护。
确保您在“管理console".”中创建了新用户。
例如,如果您在管理控制台中创建了密码为"test123“的新用户”“,则应该使用"user1”访问您的安全资源,而不是使用"keycloak adminE 237“访问您的安全资源。
的保护。
@RolesAllowed(“用户”)
您可以创建新角色并将它们分配给密钥披风管理控制台中的用户。这就是为什么您需要"keycloak admin“用户:要访问keycloak控制台,创建新用户,为新用户指定密码,并为这些用户分配角色。但不要试图使用"keycloak admin“用户访问您的安全资源!
使用不同的用户访问您的安全资源,这是您在"keycloak admin“控制台中创建的!
有关如何在密钥披风管理控制台中创建新用户的详细信息,请参阅本文:https://www.baeldung.com/spring-boot-keycloak
https://stackoverflow.com/questions/67898771
复制相似问题