如何使用 spring 启动安全和 oauth 流程设置 access_type=offline 以生成刷新令牌

How to set access_type=offline using spring boot security and oauth flow to generate a refresh tokenn

我正在使用 Sprint 引导安全性 + OAuth2 和 google 来集成 google。我已经使用以下属性在 InMemoryClientRegistrationRepository 中注册 google 作为 oauth2 客户端。

private ClientRegistration googleClientRegistration() {
       Map<String ,Object> configMap = new HashMap<>();
       configMap.put("access_type","offline");
       return ClientRegistration.withRegistrationId("g_mail")
               .clientId(googleClientId)
               .clientSecret(googleSecret)
               .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
               .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
               .redirectUri(redirectURI.replace("source", "G_MAIL"))
               .scope("openid","email","profile","https://www.googleapis.com/auth/contacts.readonly","https://www.googleapis.com/auth/gmail.readonly","https://www.googleapis.com/auth/calendar.readonly")
               .authorizationUri("https://accounts.google.com/o/oauth2/v2/auth")
               .tokenUri("https://www.googleapis.com/oauth2/v4/token")
               .providerConfigurationMetadata(configMap)
               .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo")
               .userNameAttributeName(IdTokenClaimNames.SUB)
               .jwkSetUri("https://www.googleapis.com/oauth2/v3/certs")
               .clientName("Google").build();
   }

用户成功授权和验证后,我们将在回调处理程序中接收授权码。使用此授权码生成访问令牌时,无法获取刷新令牌。你能帮我解决这个问题吗?提前致谢。

注意:- 我已将这些客户端注册存储库配置为一个 bean。因为我们将使用这些访问令牌来访问用户的数据。如果您需要更多信息,请告诉我。

我自己解决了。以下是我的解决方案。我已经更新授权 api 并且有效

authorizationUri("https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&prompt=consent")