如何将多个 acr_values 传递给 IdentityServer?
How can I pass multiple acr_values to IdentityServer?
我有一个 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 的预期效果?
acr 值必须 space 分隔为单个字符串,如下所示:"idp:Google tenant:lado"。 'acr_values' 请求参数列表下的规范 here 中也对此进行了描述。
第一个冒号之后的所有内容都被解析为 'idp' acr 值的原因是因为 oidc 客户端库使用 'encodeURIComponent' 序列化数组并导致数组值用逗号连接定界符。 IdentityServer 解析 acr 值时假定它们是 space 分开的,因此它无法将值分开。
我有一个 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 的预期效果?
acr 值必须 space 分隔为单个字符串,如下所示:"idp:Google tenant:lado"。 'acr_values' 请求参数列表下的规范 here 中也对此进行了描述。
第一个冒号之后的所有内容都被解析为 'idp' acr 值的原因是因为 oidc 客户端库使用 'encodeURIComponent' 序列化数组并导致数组值用逗号连接定界符。 IdentityServer 解析 acr 值时假定它们是 space 分开的,因此它无法将值分开。