我有一个IdentityServer4和一个javascript客户端,该客户端使用oidc-client.js库向我的IdentityServer进行身份验证。我有一个特殊的情况,我需要传递两个acr值:idp:{providerName}
和tenant:{tenantName}
。
使用配置对象中的oidc-client.js库,我将arc_values字符串传递为acr_values: "tenant:lado"
或acr_values: "idp:Google"
。如果我尝试发送字符串列表acr_values: ["idp:Google","tenant:lado"]
并尝试在IdentityServer中访问它,那么我只会得到租户,并且其值是:Google,tenant:lado
。如您所见,仅检测到idp,但它合并了所有内容。如何获得发送2个单独的acr_values的预期效果?
答案 0 :(得分:1)
acr值必须用单个字符串隔开,例如:“ idp:Google tenant:lado”。规范here中的“ acr_values”请求参数列表下也对此进行了描述。
将第一个冒号之后的所有内容都解析为“ idp” acr值的原因是因为oidc客户端库使用“ encodeURIComponent”对数组进行了序列化,并导致使用逗号定界符将数组值连接在一起。 IdentityServer会假设acr值之间存在空格,因此会解析它们,因此无法将其分开。