java之Spring Security oauth2 客户端之Twitter 问题

shihaiming 阅读:59 2024-06-20 12:54:19 评论:0

我想将 Twitter oAuth2 添加到我的应用程序中。早些时候,我成功添加了 Facebook 和 google - 我不必添加提供商。
当我尝试将 twitter 数据添加到 application.properties 时文件并运行服务器我得到错误:

Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'securityConfig': Unsatisfied dependency expressed through method 'setContentNegotationStrategy' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration': Unsatisfied dependency expressed through method 'setConfigurers' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.OAuth2ClientConfiguration$OAuth2ClientWebMvcSecurityConfiguration': Unsatisfied dependency expressed through method 'setClientRegistrationRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientRegistrationRepositoryConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.security.oauth2.client-org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Client id must not be empty. 

这是我的配置:

spring.security.oauth2.client.registration.facebook.clientId=<SECRET> 
spring.security.oauth2.client.registration.facebook.clientSecret=<SECRET> 
spring.security.oauth2.client.registration.facebook.redirect-uri=http://localhost:8080/oauth2/callback/facebook 
spring.security.oauth2.client.registration.facebook.scope=public_profile email 
 
 
spring.security.oauth2.client.registration.twitter.clientId=<SECRET> 
spring.security.oauth2.client.registration.twitter.clientSecret=<SECRET> 
spring.security.oauth2.client.registration.twitter.redirect-uri=http://localhost:8080/oauth2/callback/twitter 
spring.security.oauth2.client.registration.twitter.provider=twitter 
spring.security.oauth2.client.registration.twitter.authorization-grant-type=token 
spring.security.oauth2.client.provider.twitter.token-uri=https://api.twitter.com/oauth/token 
spring.security.oauth2.client.provider.twitter.authorization-uri=https://api.twitter.com/oauth/authorize 
spring.security.oauth2.client.provider.twitter.user-info-uri=https://api.twitter.com/oauth/request_token 

我添加了客户端 ID,所以问题出在哪里。我希望我正确地将 oauth url 添加到配置中。

@更新
我发现问题 :) 这里有错别字:

spring.security.oauth2.client.registration.twiter.authorization-grant-type=token 

@更新
现在我有另一个问题,这是我的配置:
spring.security.oauth2.client.registration.twitter.client-id=<SECRET> 
spring.security.oauth2.client.registration.twitter.clientSecret=<SECRET> 
spring.security.oauth2.client.registration.twitter.redirect-uri=http://localhost:8080/oauth2/callback/twitter 
spring.security.oauth2.client.registration.twitter.authorization-grant-type=authorization_code 
spring.security.oauth2.client.provider.twitter.token-uri=https://api.twitter.com/oauth/access_token 
spring.security.oauth2.client.provider.twitter.authorization-uri=https://api.twitter.com/oauth/authorize 

在我打电话之后: http://127.0.0.1:8080/oauth2/authorization/twitter我看到这个:

请您参考如下方法:

  • 您的问题是关于使用 oauth2 客户端与 Twitter 并且是不可能的。 Twitter 不支持涉及用户的 Oauth 2.0 流。
  • 仅支持应用程序 OAuth 2.0 不记名 token :

    OAuth 2.0 Bearer Token is the application-only authentication method for authenticating with the Twitter API. As this method is specific to the application, it does not involve any users


    https://developer.twitter.com/en/docs/basics/authentication/oauth-2-0


  • 对于涉及最终用户的流,它使用 Oauth 1.0a https://developer.twitter.com/en/docs/basics/authentication/oauth-1-0a
  • 如下图所示,Oauth 1.0a 流程中,您的应用程序首先需要与授权服务器通信以获取请求 token 并在将用户重定向到授权服务器时传递该 token 。这就是 twitter 提示缺少的 token ,因为它是 Oauth 1.0a。即您在没有步骤 A 的情况下执行步骤 B。


  • 图表引用
    https://oauth.net/core/1.0/


    标签:java
    声明

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    关注我们

    一个IT知识分享的公众号