如何从 Spring 授权服务器示例中获取刷新令牌

How to get Refresh Token from Spring Authorization Server sample

官方示例Spring授权服务器returns一个access_tokenid_token 默认情况下,Oauth 2.1 和 PKCE

https://github.com/spring-projects/spring-authorization-server/tree/main/samples/default-authorizationserver

端点/oauth2/token是否也returns一个refresh_token回复?我需要在示例中进行哪些更改或配置才能获得 refresh_token?

这是对令牌的 Postman 请求

我还会提到我必须为使用 PKCE 的代码流所做的一些更改

禁用 CSRF

http
    .authorizeRequests(authorizeRequests ->
        authorizeRequests.anyRequest().authenticated()
    )
    .formLogin(withDefaults())
    .csrf().disable();

已将 ClientAuthenticationMethod.CLIENT_SECRET_BASIC 更改为 ClientAuthenticationMethod.NONE

将 requireAuthorizationConsent(true) 更改为 requireProofKey(true)

您提到将授权代码流与 PKCE 一起使用,这对机密客户端和 public 客户端都有效。但是,当使用 public 客户端(客户端身份验证方法 = none,无客户端密码)时,不会颁发刷新令牌。

来自 #297 Browser-Based 应用程序 (SPA) 的实施指南:

Refresh Tokens for Public Clients

There are no plans to implement refresh tokens for Public Clients, as there are no browser APIs that allow refresh tokens to be stored in a secure way, which would result in an increased attack surface.

有关刷新令牌的更多信息,请参阅#297,它主要基于 OAuth 2.0 for Browser-Based Apps and OAuth 2.0 Security Best Current Practice. The recommendation when using a public client is to use the "backend for frontend" 模式的建议。 BFF 将是一个机密客户端,可以接收刷新令牌,同时还消除了在浏览器中管理和存储令牌的复杂性和风险。