Spring Security OAuth2 - 将参数添加到授权 URL

ito*_*ips 3 spring spring-security oauth-2.0 spring-security-oauth2

我使用 Spring Security 和 OAuth2 进行身份验证/授权,使用以下项目。 http://projects.spring.io/spring-security-oauth/

我需要向 OAuth2 授权 url 添加参数。我不确定应该如何将其添加到 AuthorizationCodeResourceDetails bean 中?

问题是我想通过从客户端站点登录或注册来开始用户旅程。客户端将发送 OAuth 请求,并在授权服务器上显示注册表单或登录表单,以便用户继续其旅程。

默认流程只有以下参数 /oauth/authorize?client_id=[]&redirect_uri=[]&response_type=token&scope=openid+profile&state=HZSMKb

我想附加“&startPoint=register”

public OAuth2ProtectedResourceDetails googleOAuth2Details() {
    AuthorizationCodeResourceDetails googleOAuth2Details = new AuthorizationCodeResourceDetails();
    googleOAuth2Details.setAuthenticationScheme(header);
    googleOAuth2Details.setClientAuthenticationScheme(header);
    googleOAuth2Details.setClientId(clientId);
    googleOAuth2Details.setClientSecret(clientSecret);
    googleOAuth2Details.setUserAuthorizationUri(authorizationUrl);
    googleOAuth2Details.setAccessTokenUri(accessTokenUrl);

    googleOAuth2Details.setScope(asList("openid","profile"));
    return googleOAuth2Details;
}

@SuppressWarnings("SpringJavaAutowiringInspection") // Provided by Spring Boot
@Resource
private OAuth2ClientContext oAuth2ClientContext;

@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
public OAuth2RestOperations authCodeRestTemplate() {
    return new OAuth2RestTemplate(googleOAuth2Details(), oAuth2ClientContext);
}
Run Code Online (Sandbox Code Playgroud)

ito*_*ips 5

由于基于 auth2“authorization_code”流程的“AuthorizationCodeResourceDetails”不接受额外参数。因此,为了解决这个问题,我通过在授权 URL 本身中提供参数来解决这个问题。

例如。如果授权 URL 为 http://localhost:8080/idp/oauth/authorize

比我将额外的参数附加到该网址,如下所示 http://localhost:8080/idp/oauth/authorize?startPoint=register

因为该请求将由 Spring 保存到会话中的 SavedRequest 变量下,稍后我可以通过该变量来查明发起的请求是用于注册还是登录。