首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-社会化-谷歌不发送clientId/clientKey

spring-社会化-谷歌不发送clientId/clientKey
EN

Stack Overflow用户
提问于 2012-11-07 05:47:27
回答 1查看 757关注 0票数 3

我试图将OAuth支持添加到现有的Spring中,允许用户使用他们的Google/Facebook/Twitter/等等登录。为此,我使用了“spring-social”框架和“spring-social-google”库。我还试图在许多限制条件下工作时做到这一点:

  • 现有的webapp不使用spring安全性进行身份验证或控制对资源的访问,它提供了自己的基于表单的身份验证。
  • 现有的webapp不使用servlet容器的Principal跟踪经过身份验证的用户详细信息,而是在HTTP会话中存储对经过身份验证的用户的引用。
  • 现有的webapp没有(也不能)将绑定到webapp根URL (即/)。

数据库中的帐户被电子邮件唯一地键控,所以我真正想要做的就是把一个流粘合在一起,这个流大概是这样的:

代码语言:javascript
复制
Login Page (user chooses between OAuth and direct login)
    -> <Provider OAuth Flow>  (user completes OAuth authorization)
        -> OAuth Callback URL (grab user email, check for existing account, create if needed) 
            -> Post-login Landing Page (done)

无论如何,上面提到的限制引起了各种各样的问题,其中大部分我已经找到了解决办法。然而,我从Google OAuth连接器上得到了一些奇怪的行为(Twitter和Facebook似乎工作正常)。基本上,在最终请求期间,它似乎没有向Google发送OAuth clientIdclientSecret

代码语言:javascript
复制
DEBUG: org.springframework.web.client.RestTemplate - Writing [
    {code=[4/dVVrFDpNLDGTmXCuuQj6fcfaetEU.UkLPQd7NOLYbgrKXntQAax0INYiydQI], 
     redirect_uri=[http://localhost:8080/oauth/signin/google], 
     grant_type=[authorization_code]}] as "application/x-www-form-urlencoded"

这将返回一个代码400 (“坏请求”)。

如果我转到hurl.it并将相同的数据发送到同一个URL (https://accounts.google.com/o/oauth2/token),并手动添加client_idclient_secret值,则调用将返回一个成功的响应。

那么,是什么原因导致Google连接器忽略了这些值呢?

作为参考,我在我的项目中包括了spring-social-google库,比如:

代码语言:javascript
复制
    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-google</artifactId>
        <version>1.0.0.M1</version>
    </dependency>

...and,在我的@Configuration课堂上,我得到了:

代码语言:javascript
复制
@Bean
@Scope(value="singleton", proxyMode=ScopedProxyMode.INTERFACES) 
public ConnectionFactoryLocator connectionFactoryLocator() {
    ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry();

    registry.addConnectionFactory(
            new GoogleConnectionFactory(
                    "<google client id>",  
                    "<google secret key>"));

    registry.addConnectionFactory(
            new FacebookConnectionFactory(
                    "<facebook client id>", 
                    "<facebook secret key>"));

    registry.addConnectionFactory(
            new TwitterConnectionFactory(
                    "<twitter client id>",   
                    "<twitter secret key>"));

    return registry;
}

我使用的其余部分基本上是标准的,直接从春季社交展示例中提取出来(尽管是为了删除无关的内容并在上面提到的约束范围内工作)。奇怪的是,尝试使用谷歌登录会正确显示谷歌上的OAuth授权页面,我的应用程序/项目名称也会正确显示。这个错误发生在我点击“允许”按钮来授权OAuth登录并返回到webapp之后。

无论如何,造成这个问题的原因是什么,如何解决呢?

EN

回答 1

Stack Overflow用户

发布于 2015-01-19 00:49:43

您可能还没有在控制台中打开google+ api。

这是一个与获取OAuth 2令牌或api键不同的任务。

如果你还没有这样做

  1. http://console.developers.google.com
  2. 导航到您的项目。
  3. 单击“API”。
  4. 选中“Google+API”在已启用API的列表中。如果不是,请浏览并启用它。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13263821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档