pac4j 隐式流程与静默身份验证机制

问题描述 投票:0回答:1

我计划在前端使用 SPA React 应用程序,并拥有自己的授权服务器(带有 pac4j 的 Spring boot)并连接到 idp 以验证单点登录(仅使用最少的信息检索 id 令牌)。之后,从我的数据库检索用户帐户(与用户相关的角色和权限)以生成 JWT(无刷新令牌的访问令牌),然后将其发送到 SPA,以便在微服务之间使用它(所有微服务都是 Spring boot 应用程序)。根据我的理解,对于 SPA,可以使用 openID 连接的隐式 frow 来通过 idp 进行身份验证,并且当我的 JWT 过期时,默默地返回到我的授权服务以更新我的访问令牌,而无需用户交互(不再登录)。到目前为止,我能够从 idp 检索 id 令牌并生成我自己的 JWT。但是,我的疑问是如何实现静默机制,以便我可以静默更新我的 JWT 而无需再次登录。 pac4j 有什么合适的方法可以帮助这个流程吗?

这是我的 oidc 配置:

    @Bean
    public Config config() {
    final OidcConfiguration oidcConfiguration = new OidcConfiguration();
    oidcConfiguration.setClientId(pac4jProperties.getKeycloak().getClientId());
    oidcConfiguration.setSecret(pac4jProperties.getKeycloak().getSecret());
    oidcConfiguration.setUseNonce(true);
    oidcConfiguration.setDiscoveryURI(pac4jProperties.getKeycloak().getDiscoveryUri());
    oidcConfiguration.setScope(pac4jProperties.getKeycloak().getScope());
     oidcConfiguration.setClientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC);
    oidcConfiguration.addCustomParam("prompt", "consent");
    oidcConfiguration.setResponseType("id_token");
    oidcConfiguration.setResponseMode("form_post");
    final OidcClient oidcClient = new OidcClient(oidcConfiguration);
    oidcClient.setName(pac4jProperties.getKeycloak().getClientId());
    oidcClient.setCallbackUrl("http://localhost:8080/callback");
    oidcClient.setProfileCreator(new     CustomProfileCreator(userService,oidcClient.getConfiguration(),oidcClient));

        final Clients clients = new Clients("http://localhost:8080/callback", oidcClient);
    
        return new Config(clients);}
authorization openid-connect idp pac4j implicit-flow
1个回答
0
投票

这应该是 pac4j 的默认行为:当您尝试访问受保护的 URL 时,将从会话存储(Web 会话)中检索配置文件,如果没有可用的配置文件或者如果配置文件已过期,则会执行登录过程执行过。

对于 OIDC 协议,当访问令牌过期时,配置文件也会过期:https://github.com/pac4j/pac4j/blob/pac4j-parent-5.7.3/pac4j-oidc/src/main/java/org/ pac4j/oidc/profile/OidcProfile.java#L191

© www.soinside.com 2019 - 2024. All rights reserved.