如何在Identity Server 4的密码授权模式下获取Refresh Token
解决Identity Server 4密码流无法获取Refresh Token的问题
问题描述
我有一个Blazor SPA,已在Identity Server 4中注册客户端。通过用户名密码发起AccessToken请求(代码如下),能成功获取AccessToken,但Refresh Token始终为null,希望实现Refresh Token功能。
请求代码:
var client = new HttpClient(); var response = await client.RequestPasswordTokenAsync(new PasswordTokenRequest { Address = "...", ClientId = "360.WASM", ClientSecret = "...", Scope = "BulutTakin.Appraisal360.WASM", GrantType="password", UserName = username, Password = password, });
已确认:
- 客户端配置中开启了
Allow Offline Access - 符合IS4文档要求(密码流支持Refresh Token,需客户端开启AllowOfflineAccess)
问题原因
即使客户端开启了AllowOfflineAccess,请求AccessToken时必须在Scope参数中显式包含offline_access范围,Identity Server才会返回Refresh Token。当前请求只指定了业务范围,未添加这个必要的范围。
解决方案
修改请求代码中的Scope字段,追加offline_access:
var response = await client.RequestPasswordTokenAsync(new PasswordTokenRequest { Address = "...", ClientId = "360.WASM", ClientSecret = "...", // 追加offline_access范围 Scope = "BulutTakin.Appraisal360.WASM offline_access", GrantType="password", UserName = username, Password = password, });
额外验证点
- 确认客户端配置的
Allowed Scopes列表包含offline_access - 检查用户权限配置,确保未限制离线访问权限
内容的提问来源于stack exchange,提问作者Ali.Rashidi
相关产品推荐
相关产品推荐

