【问题标题】:Spring & Keycloak - null principalSpring & Keycloak - null 主体
【发布时间】:2021-12-30 09:26:22
【问题描述】:

我正在尝试将我的 Spring Boot 应用程序配置为使用 Keycloak 作为 SSO。

我正在关注本主题的标准教程:

先添加依赖

    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
    </dependency>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.keycloak.bom</groupId>
                <artifactId>keycloak-adapter-bom</artifactId>
                <version>13.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

二、填充属性

# Keycloak
keycloak.realm                      = Mixeway
keycloak.auth-server-url            = http://localhost:8180/auth
keycloak.ssl-required               = external
keycloak.resource                   = MixewayApp
keycloak.credentials.secret         = secret
keycloak.use-resource-role-mappings = false
keycloak.bearer-only                = false
keycloak.security-constraints[0].authRoles[0]=USER
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/v2/auth/keycloak

第三个创建控制器来处理身份验证

    @GetMapping(value = "/v2/auth/keycloak")
    public void authUsingKeycloak(Principal principal){
        log.info("user {} logged using keycloak", principal.getName());
    }

身份验证正常工作。我可以看到日志:

2021-12-30 10:18:48.213 DEBUG 6947 --- [nio-8443-exec-3] o.k.adapters.OAuthRequestAuthenticator   : Verifying tokens
2021-12-30 10:18:48.265 DEBUG 6947 --- [nio-8443-exec-3] o.k.a.rotation.JWKPublicKeyLocator       : Realm public keys successfully retrieved for client MixewayApp. New kids: [mpkD1RwCaaIbp8tN-a9__hlc03UpxrQ8SE5atlDrF78]
2021-12-30 10:18:48.270 DEBUG 6947 --- [nio-8443-exec-3] o.k.adapters.OAuthRequestAuthenticator   : Token Verification succeeded!
2021-12-30 10:18:48.277 DEBUG 6947 --- [nio-8443-exec-3] o.k.a.rotation.JWKPublicKeyLocator       : Realm public keys successfully retrieved for client MixewayApp. New kids: [mpkD1RwCaaIbp8tN-a9__hlc03UpxrQ8SE5atlDrF78]
2021-12-30 10:18:48.277 DEBUG 6947 --- [nio-8443-exec-3] o.k.adapters.OAuthRequestAuthenticator   : successful authenticated
2021-12-30 10:18:48.283 DEBUG 6947 --- [nio-8443-exec-3] o.k.adapters.RequestAuthenticator        : User '343050ef-bc48-48ae-af93-5dd3f0830956' invoking 'https://localhost:8443/v2/auth/keycloak?state=d1ebaf04-c0fd-4415-8f70-56b68e9f8485&session_state=e2e280a0-428d-4481-99c6-f45cfa171f4c&code=da46d2ee-14b5-45ef-a15f-6a69e196f092.e2e280a0-428d-4481-99c6-f45cfa171f4c.0b00edfd-1474-42ec-a2df-f2754b830dc6' on client 'MixewayApp'
2021-12-30 10:18:48.283 DEBUG 6947 --- [nio-8443-exec-3] o.k.adapters.RequestAuthenticator        : AUTHENTICATED
2021-12-30 10:18:48.291 DEBUG 6947 --- [nio-8443-exec-4] o.k.adapters.PreAuthActionsHandler       : adminRequest https://localhost:8443/v2/auth/keycloak
2021-12-30 10:18:48.291 DEBUG 6947 --- [nio-8443-exec-4] o.k.adapters.RequestAuthenticator        : AUTHENTICATED: was cached
2021-12-30 10:18:48.291 DEBUG 6947 --- [nio-8443-exec-4] .k.a.t.AbstractAuthenticatedActionsValve : AuthenticatedActionsValve.invoke /v2/auth/keycloak

但是,由于 null Principal 对象,我得到了 NullPointer 异常。谁能给我一个提示,如何在 spring 中配置 keycloak auth 以便正确设置主体对象?

编辑

重写控制器后

    @GetMapping(value = "/v2/auth/keycloak")
    public void authUsingKeycloakGet(HttpServletRequest request){
        KeycloakPrincipal principal=(KeycloakPrincipal) request.getUserPrincipal();
        KeycloakSecurityContext session = principal.getKeycloakSecurityContext();
        AccessToken accessToken = session.getToken();
    }

和调试应用程序我可以在HttpServletRequest 中看到主体,但主体和request.getUserPrincipal() 仍然为空:

【问题讨论】:

    标签: java spring spring-boot keycloak


    【解决方案1】:

    由于它处于控制器级别并且您正在创建一个端点,因此您需要将 @RequestBody 注释用于正文输入,@RequestParam 注释用于请求参数(即 yourEndPoint?id=1)或 @PathVariable 用于路径变量端点(即 yourEndPoint/1)。

    【讨论】:

    • 恐怕不是这样的。我已经编辑了添加更多调试的问题
    猜你喜欢
    • 2021-06-06
    • 2022-07-24
    • 1970-01-01
    • 2017-11-25
    • 2020-01-24
    • 2018-12-06
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多