如何使用 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")
我正在使用 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")