【问题标题】:Configure basic auth for /oauth/token为 /oauth/token 配置基本身份验证
【发布时间】:2020-11-21 13:56:06
【问题描述】:

我想使用 Spring Cloud 为 OAuth2 实现令牌刷新。

我可以通过使用此有效负载向/oauth/token 发送请求来创建令牌:

curl --location --request POST 'http://localhost:8080/engine/oauth/token' \
--header 'Authorization: Basic YWRtaW46cXdlcnR5' \
--form 'username=admin' \
--form 'password=qwerty' \
--form 'grant_type=password' \
--form 'scope=read'

但对于刷新令牌,使用相同的路径 /oauth/token。我还需要将用户名和密码发送到标题'Authorization: Basic YWRtaW46cXdlcnR5'我没有它们。我可以使用带有此有效负载的刷新令牌创建一个新令牌:

curl --location --request POST 'http://localhost:8080/engine/oauth/token' \
--header 'Authorization: Basic YWRtaW46cXdlcnR5' \
--form 'grant_type=refresh_token' \
--form 'scope=read' \
--form 'refresh_token=....'

你知道如何解决这个问题吗?

Github code

【问题讨论】:

标签: oauth-2.0 spring-cloud spring-security-oauth2 spring-oauth2


【解决方案1】:

刷新令牌授予消息不需要授权标头。尝试删除它并将 client_id 作为表单参数发送。您可能还需要配置 offline_access 范围以使令牌刷新工作。

我记得的最后一点是,ROPC 不应该支持令牌刷新,尽管对于所有提供者来说,这种行为可能并不相同。

最后,请注意,如果您有更好的选择,ROPG 并不真正推荐。 This post 总结问题。

如果您能总结一下您的使用场景,我或许可以推荐一个更好的替代方案。

【讨论】:

  • 我得到`“error_description”:“无效范围:offline_access”,`
  • 您需要先在授权服务器中配置该范围,然后从客户端发送。仍然不能保证它可以与 ROPG 一起使用,默认情况下您应该每次都发送凭据。
  • 关于使用场景:我有一个 Angular SPA,它需要能够连接到 Spring Cloud 应用程序并使用 OAuth2 安全性获取一些数据。我需要进行令牌刷新和令牌撤销。查看该项目的链接,了解我到目前为止所做的工作。
  • 啊 - 您有一个服务器端 Web 应用程序来确保安全。对于这种情况,授权代码流程是正确的 - 如this article
  • 我的偏好是在 SPA 中做安全客户端,这可以有很多架构优势。如果对这种方法感兴趣,可以与您的同事讨论并查看我的Blog Articles
猜你喜欢
  • 2021-07-19
  • 2011-05-10
  • 2016-04-19
  • 2016-05-31
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多