首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问密钥披风保护的资源。

无法访问密钥披风保护的资源。
EN

Stack Overflow用户
提问于 2021-06-09 06:35:16
回答 2查看 908关注 0票数 0

目前,我有一个部署在openshift上的keycloak服务器和一个夸克rest服务应用程序,它有一个安全的资源,可以使用承载令牌访问。我读过夸夸斯安全相关文档,但无法访问安全资源。所有的人都有401的状态。

这些是我在项目的pom.xml中使用的库:

代码语言:javascript
复制
<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库添加了日志,但无法在夸克容器日志屏幕中获得有关该问题的任何信息。

代码语言:javascript
复制
# 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

这是资源代码:

代码语言:javascript
复制
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;
  }

}

从夸夸斯集装箱码头,我可以访问密钥披风服务器

代码语言:javascript
复制
curl -v -X GET $keycloak_url -H "Authorization: Bearer "$access_token

返回200状态,但无法访问受保护的资源。

那么,我在这里做错什么了?

EN

回答 2

Stack Overflow用户

发布于 2021-06-09 08:43:11

代码语言:javascript
复制
http://keycloak-myproject.192.168.1.110.nip.io/auth/realms/secured-realm

你确定url存在吗?

你试过访问它吗?成功了吗?

因为,当我试图访问服务器上类似的url时:

代码语言:javascript
复制
https://users.skycomposer.net/auth/realms/secured-realm

它返回“未找到的页面”。

以下是Spring应用程序的keycloak配置:

代码语言:javascript
复制
#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如下所示:

代码语言:javascript
复制
@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安全配置可能有助于找出问题的原因。

票数 0
EN

Stack Overflow用户

发布于 2021-06-09 22:29:04

确保您正确地配置了域"secured-realm“,

  1. 。有关详细信息,请参阅本文:https://quarkus.io/guides/security-keycloak-authorization.

根据本文,夸夸斯密钥披风配置应该如下所示:

代码语言:javascript
复制
# 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时,您的配置中肯定缺少它。至于其他参数,我不确定,你需要做实验。

来自夸克集装箱码头的

  1. 您可以使用

访问密钥披风服务器

curl -v -X GET $keycloak_url -H“授权:无记名"$access_token

但这是您的“密钥披风管理”用户!

它与访问您的安全资源无关!

通过在“管理控制台”中创建新用户,您的安全资源应该与其他用户一起受到保护。

确保您在“管理console".”中创建了新用户

例如,如果您在管理控制台中创建了密码为"test123“的新用户”“,则应该使用"user1”访问您的安全资源,而不是使用"keycloak adminE 237“访问您的安全资源。

  1. 确保您的新用户 "user1“具有”user“的角色。您当前的安全资源受到角色"USERS":

的保护。

@RolesAllowed(“用户”)

您可以创建新角色并将它们分配给密钥披风管理控制台中的用户。这就是为什么您需要"keycloak admin“用户:要访问keycloak控制台,创建新用户,为新用户指定密码,并为这些用户分配角色。但不要试图使用"keycloak admin“用户访问您的安全资源!

使用不同的用户访问您的安全资源,这是您在"keycloak admin“控制台中创建的!

有关如何在密钥披风管理控制台中创建新用户的详细信息,请参阅本文:https://www.baeldung.com/spring-boot-keycloak

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67898771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档