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

abb*_*bas 8 spring authorization spring-security spring-oauth2 spring-authorization-server

官方示例 Spring Authorization Server默认为带有 PKCE 的 Oauth 2.1返回access_token和id_token

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

端点/oauth2/token是否有可能也在响应中返回刷新令牌?为了获取刷新令牌,我需要在示例中进行哪些更改或配置?

这是邮递员对令牌的请求 在此输入图像描述

我还将提到我必须使用 PKCE 对代码流进行的一些更改

禁用 CSRF

http
    .authorizeRequests(authorizeRequests ->
        authorizeRequests.anyRequest().authenticated()
    )
    .formLogin(withDefaults())
    .csrf().disable();
Run Code Online (Sandbox Code Playgroud)

将 ClientAuthenticationMethod.CLIENT_SECRET_BASIC 更改为 ClientAuthenticationMethod.NONE

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

Ste*_*erg 12

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

来自#297基于浏览器的应用程序 (SPA) 的实施指南:

为公共客户刷新令牌

目前没有计划为公共客户端实施刷新令牌,因为没有浏览器 API 允许以安全方式存储刷新令牌,这会导致攻击面增加。

有关刷新令牌的更多信息,请参阅 #297,该信息很大程度上基于OAuth 2.0 for Browser-Based Apps和OAuth 2.0 Security Best Current Practice的建议。使用公共客户端时的建议是使用“后端换前端”模式。BFF 将是一个机密客户端,可以接收刷新令牌,同时还消除了在浏览器中管理和存储令牌的复杂性和风险。