AspNet Core 3.1 下向Identity Server 4登录页传递自定义参数失败
解决方案
1. 先确认客户端参数附加正常
抓包查看跳转到IDP授权端点的请求URL,确认是否已经携带shopId=123参数。如果URL中没有该参数:
- 给
OnRedirectToIdentityProvider事件打断点,确认事件正常触发 - 检查OpenIdConnect的配置顺序,确认该事件配置没有被后续代码覆盖
2. 配置IS4允许自定义参数
IdentityServer4默认会过滤所有非OIDC协议标准的请求参数,你需要在IDP的客户端配置中,给对应客户端添加允许的自定义参数白名单:
new Client { ClientId = "imagegalleryclient", // 其余原有配置(密钥、授权类型、回调地址等)保持不变 AllowedCustomParameters = new List<string> { "shopId" } }
配置完成后IS4就不会丢弃shopId参数,会将其存入授权上下文。
3. 读取参数
完成上述配置后,你原来的读取代码即可正常生效:
var context = await _interaction.GetAuthorizationContextAsync(returnUrl); string shopId = context.Parameters["shopId"];
如果需要更直接的读取方式,也可以直接从登录接口的请求查询参数中获取:
string shopId = Request.Query["shopId"];
内容的提问来源于stack exchange,提问作者zolty13
相关产品推荐
相关产品推荐

