java - Spring Security oauth2 客户端 - Twitter 的问题
问题描述
我想将 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 添加到配置中。
@Update 我发现问题 :) 错字在这里:
spring.security.oauth2.client.registration.twiter.authorization-grant-type=token
@UPDATE 现在我有另一个问题,这是我的配置:
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我看到了这个:
解决方案
您的问题是关于 在 Twitter 上使用 oauth2 客户端,这是不可能的。Twitter 不支持涉及用户的 Oauth 2.0 流。
它仅支持应用程序OAuth 2.0 Bearer Token:
OAuth 2.0 Bearer Token是用于使用 Twitter API 进行身份验证的仅限应用程序的身份验证方法。由于此方法特定于应用程序,因此不涉及任何用户
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 流程,您的应用程序首先需要与授权服务器对话以获取请求令牌并在将用户重定向到授权服务器时传递该令牌。这是令牌,因为它是 Oauth 1.0a,所以 twitter 抱怨丢失了。即您正在执行步骤 B 而没有步骤 A。
图表参考
推荐阅读
- python - 用 Python 替换 CSV 文件中的值
- c# - ODP.Net - Calling stored procedure with custom type parameter throws ORA-06550/PLS-00306
- html - 引导行/列在 React 应用程序中不起作用
- python - 数据提取是否需要时间戳?
- cassandra - 从 PySpark 覆盖 Cassandra 表时出错
- javascript - 可点击的图片过滤内容
- python - torch.autograd.Variable 的目的是什么?
- html - 两个元素之间无法解释的间隙,Flexbox 对齐
- c# - 远程客户端访问 Windows 10 IoT Core 时的事件?
- ios - 带有 Xcode 11 beta 的 iOS 11 上的命名颜色问题