我有一个 IdentityServer4 和一个 javascript 客户端,它使用 oidc-client.js 库对我的 IdentityServer 进行身份验证。我有一个特定的情况,我需要同时传递 acr 值:idp:{providerName}
和tenant:{tenantName}
. 在配置对象中使用 oidc-client.js 库,我将 arc_values 字符串传递为 oracr_values: "tenant:lado"
或acr_values: "idp:Google"
。如果我尝试发送一个字符串列表acr_values: ["idp:Google","tenant:lado"]
并尝试在 IdentityServer 中访问它,我只会得到租户并且它的值是:Google,tenant:lado
。如您所见,仅检测到 idp,但它合并了所有内容。如何达到发送 2 个单独的 acr_values 的预期效果?
问问题
6784 次
1 回答
11
acr 值必须以空格分隔为单个字符串,如下所示:“idp:Google tenant:lado”。这也在“acr_values”请求参数列表下的规范中进行了描述。
第一个冒号之后的所有内容都被解析为“idp”acr 值的原因是,oidc 客户端库使用“encodeURIComponent”序列化数组并导致数组值与逗号分隔符连接。IdentityServer 解析 acr 值假设它们是空格分隔的,因此它无法将值分开。
于 2019-02-17T13:34:09.550 回答