2015-06-19 355 views
1

我使用Spring Security与OAuth2进行身份验证/授权,使用以下项目。 http://projects.spring.io/spring-security-oauth/Spring Security OAuth2 - 将参数添加到授权URL

我有要求将参数添加到OAuth2授权网址。我不知道我应该如何将它添加到AuthorizationCodeResourceDetails bean?

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

默认流只以下参数 /OAuth的/授权?CLIENT_ID = [] & REDIRECT_URI = [] & RESPONSE_TYPE =记号&范围=的OpenID +轮廓&状态= HZSMKb

欲追加“&的startPoint =寄存器”

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); 
} 
+0

您尝试对哪个OAuth提供程序进行身份验证?并且请张贴一些相关的代码或者人们会简单地冷静下来。 –

+0

我使用spring-security-oauth2作为提供者。 – itontips

+0

不,你想我的观点,你想让你的用户登录Google,对吗? –

回答

0

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

例如,如果授权网址是 http://localhost:8080/idp/oauth/authorize

比我附加我额外的参数到该URL像下面 http://localhost:8080/idp/oauth/authorize?startPoint=register

由于这个请求将被保存到由Spring下SavedRequest变量的会话,我以后可以坐上去找出发起的请求是注册还是登录。