如何从 Spring 授权服务器示例中获取刷新令牌
How to get Refresh Token from Spring Authorization Server sample
官方示例Spring授权服务器returns一个access_token和id_token 默认情况下,Oauth 2.1 和 PKCE
端点/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 将是一个机密客户端,可以接收刷新令牌,同时还消除了在浏览器中管理和存储令牌的复杂性和风险。
官方示例Spring授权服务器returns一个access_token和id_token 默认情况下,Oauth 2.1 和 PKCE
端点/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 将是一个机密客户端,可以接收刷新令牌,同时还消除了在浏览器中管理和存储令牌的复杂性和风险。