我想為使用 keycloak 初始訪問令牌的 3rd 方應用程式開發一種身份驗證機制。但我只想通過使用我在 keycloak 中生成的訪問令牌來做到這一點。例如,我會給用戶一個生成的令牌并允許他登錄應用程式。這可能嗎?我怎樣才能做到這一點? 初始訪問令牌
uj5u.com熱心網友回復:
首先,我不確定使用“初始訪問令牌”來授權對您自己的資源的請求是否是一個好主意。甚至可能不允許。根據檔案:
初始訪問令牌只能用于創建客戶端
其次,不要按照其他答案中的建議為 Spring 使用 keycloak 庫。這是非常不推薦使用的。
最后,使用 Oauth2 保護的 REST API 是資源服務器(而不是客戶端)。因此,依賴項應該是spring-boot-starter-oauth2-resource-server. Spring doc 在這個主題上非常廣泛。您還可以查看有關資源服務器配置(和 OAuth2 定義)的那些教程。
一旦配置了資源服務器(Spring REST API),客戶端將不得不像往常一樣為 OAuth2 授權他們的請求:提供Authorization包含Bearer訪問令牌的標頭(由 Keycloak 使用標準流程之一向客戶端發出的 JWT:客戶端-憑據或授權代碼,具體取決于您需要授權客戶端本身或其背后的用戶)。
編輯
我可能誤解了你的需要。如果您想要讓新客戶端以編程方式在您的 Keycloak 實體上注冊它們自己,那么這些客戶端將正常向Keycloak 服務器API 發出 REST 請求,并在 Authorization 標頭中使用“初始訪問令牌”。
注冊后,這些客戶端將能夠按照我最初的回答中所述呼叫您的資源服務器。
uj5u.com熱心網友回復:
可以將用戶和角色配置到 Keycloak 管理 UI。并在java應用程式中遵循以下:
Pom.xml 中的依賴項。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>15.0.2</version>
</dependency>
在您的專案中添加 KeycloakConfig.java 和 SecurityConfig.java 類:
import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class KeycloakConfig {
@Bean
public KeycloakSpringBootConfigResolver keycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
}
}
import org.keycloak.adapters.springsecurity.KeycloakConfiguration;
import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
import org.keycloak.adapters.springsecurity.management.HttpSessionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy;
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
@KeycloakConfiguration
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) {
SimpleAuthorityMapper grantedAuthorityMapper = new SimpleAuthorityMapper();
grantedAuthorityMapper.setPrefix("ROLE_");
KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(grantedAuthorityMapper);
auth.authenticationProvider(keycloakAuthenticationProvider);
}
@Bean
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
}
@Bean
@Override
@ConditionalOnMissingBean(HttpSessionManager.class)
protected HttpSessionManager httpSessionManager() {
return new HttpSessionManager();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http
.authorizeRequests()
.antMatchers("/file/upload").hasAnyRole("user", "admin")
.antMatchers("/file/edit").hasAnyRole("admin")
.anyRequest().permitAll();
}
}
在我使用上面的 URLS 時從 springboot 應用程式進行此配置后,只有在請求中出現承載令牌后才能訪問。它還允許基于角色的身份驗證。
讓我知道這個答案是否仍然沒有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/520325.html
下一篇:Helm圖表覆寫值
