如何在 Spring OAuth2 中仅通过 client_id 和 secret 进行授权?
Posted
技术标签:
【中文标题】如何在 Spring OAuth2 中仅通过 client_id 和 secret 进行授权?【英文标题】:How authorize in Spring OAuth2 by client_id and secret only? 【发布时间】:2018-07-29 20:13:52 【问题描述】:现在我使用的是下一个配置:
@Configuration
@EnableAuthorizationServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class OAuth2Config extends AuthorizationServerConfigurerAdapter
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception
clients.jdbc(mAppConfig.dataSource())
.withClient("virto")
.secret("secret")
.authorizedGrantTypes("password", "authorization_code", "refresh_token");
它需要发送client_id, client_secret, username, password
...但我需要为我的受信任服务器提供access_token
,只有client_id
和client_secret
... 我该怎么做?有可能吗?
【问题讨论】:
OAuth2 中有一些流,例如password flow
(需要client_id、client_secret、用户名和密码),client_credentials
流只需要client_id and client_secret
。您需要研究如何在 Spring OAuth 应用程序中启用 client_credentials
流。有关更多信息,请参阅此***.com/questions/37534073/… SO 帖子。
【参考方案1】:
您需要为客户端配置 client_credentials 授权
@Configuration
@EnableAuthorizationServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class OAuth2Config extends AuthorizationServerConfigurerAdapter
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception
clients.jdbc(mAppConfig.dataSource())
.withClient("virto")
.secret("secret")
.authorizedGrantTypes("client_credentials");
要获取令牌,您需要发送一个 post 请求,并使用 base 64 编码的凭据。
POST http://localhost:8080/paymentiq/oauth/token?grant_type=client_credentials -h 'Authorization: [clientId:secret]'
【讨论】:
以上是关于如何在 Spring OAuth2 中仅通过 client_id 和 secret 进行授权?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Spring Security 中仅使用刷新令牌请求访问令牌 oauth2?没有基本身份验证?
如何覆盖 Spring Cloud OAuth2 客户端自动配置?
如何在 OAuth2 中仅使用 Client_id 和 Client_secret
如何在 Spring Boot 中从 MongoDb 中仅读取特定的 JSON 节点
如何使用 OAuth2 通过 Spring 获取自定义 Principal 对象?
spring boot oauth2.0 和 spring security:如何通过 facebook 或 slack 授予用户登录权限(权限)