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

Posted

技术标签:

【中文标题】Spring Security OAuth2 - 将参数添加到授权 URL【英文标题】:Spring Security OAuth2 - Add parameter to Authorization URL 【发布时间】:2015-09-05 13:37:09 【问题描述】:

我正在使用 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);

【问题讨论】:

您尝试向哪个 OAuth 提供者进行身份验证?请发布一些相关代码,否则人们会简单地投票。 我也在使用 spring-security-oauth2 作为提供者。 不,你错过了我的意思,你想让你的用户登录谷歌,对吧??? 对不起命名约定,基本上我使用谷歌客户端进行测试,但我希望用户通过我自己的 IDP 登录,它基于我上面提到的“spring-security-oauth”项目。 【参考方案1】:

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

例如。如果授权 url 是 http://localhost:8080/idp/oauth/authorize

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

由于此请求将由 Spring 在 SavedRequest 变量下保存到会话中,我稍后可以查看发起的请求是用于注册还是登录。

【讨论】:

以上是关于Spring Security OAuth2 - 将参数添加到授权 URL的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Security OAuth2 设置 - 无法找到 oauth2 命名空间处理程序

Spring Security OAuth2 v5:NoSuchBeanDefinitionException:'org.springframework.security.oauth2.jwt.Jwt

针对授权标头的Spring Security OAuth2 CORS问题

OAuth2.0学习(4-1)Spring Security OAuth2.0 - 代码分析

Spring Security---Oauth2详解

如何使用spring-security,oauth2调整实体的正确登录?