You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:45:35