我有一個充當資源服務器的Spring Boot(1.3.x)應用程序,我可以在Authorization標頭中傳遞來自Keycloak的JWT令牌,並且被清除以訪問某些端點。我遇到的問題是,我無法獲取Authorization對象中我的JWT令牌中的信息。Spring OAuth2和JWT身份驗證信息
SecurityContext sc = SecurityContextHolder.getContext();
Authentication a = sc.getAuthentication(); //OR OAuth2Authentication oa = (OAuth2Authentication)a;
Object p = a.getPrincipal();
和P將舉行CLIENT_ID的名字,如果我有IDP把它的令牌。
isClientOnly()返回true。爲什麼?
我希望能夠得到我的用戶名和贈款,但沒有發現。 如果我沒有client_id,它實際上是空的。
我試着瞭解,如果我不知怎麼配置了一些關於如何處理JWT令牌後進行驗證,所以正確的信息進入認證對象,但我完全困惑。我怎樣才能做到這一點?
春天啓動的巨大的你如何能做到這麼少拿東西運行,但在同一時間,我不知所措我哪裏開始,或什麼是真正甚至在第一位置設置...
我application.yml:
server:
servlet-path: /*
security:
oauth2:
resource:
jwt:
keyValue:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmFbcU2Q6WZwUjEBvsZP8kIiE5mmctTGq1SOrPN5U4MkaTVs/zs2cWf+fhIE4WQ+dF9xTPxrJCGkwCMMXEhReFadOvzW8S3VdKdhng/j2GUbleU1QLSOGLhXu2+ODxeToZGpXIxtJiK2wE0JI9T6UwAe9j/stp4pMUzQubkG9acA+lpA5+zaCylLHysNFlSO1cTgzTdIZpXQGu5nkmyz7xT6vq8n2qAsD5GG5JRpBAac6L10Hnvl1YbwnPfi1T+IZSq7FdSpGJmYeOiPhJF0j7qYOMcaQgOfzoQGBhXslIHZeeaBIuUM6QFgZacJsVxdQoRvMronuuacnS+bngMEVDQIDAQAB
-----END PUBLIC KEY-----
logging:
level:
org:
springframework:
security: DEBUG
我SecurityConfig.java:
package com.something.me;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
@Configuration
@EnableOAuth2Sso
@EnableResourceServer
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
//TODO add scope and role restrictions...
http.authorizeRequests().anyRequest().authenticated();
}