Azure AD B2C自定义策略本地化REST API冲突响应



这在某种程度上是这个问题的扩展。我有一个调用REST API的策略。API返回错误消息,此消息需要本地化。

一种方法当然是让API返回本地化的消息,但是CustomPolicy本身是否有方法本地化错误代码?根据CustomPolicy文档,REST API可以将错误代码与冲突错误代码一起发送。我们的想法是使用这个错误代码作为键,并选择一个本地化消息(从链接中答案中提到的messageValue枚举中(。

然而,我们似乎无法捕获/处理API返回的错误数据。策略似乎可以自己处理错误代码,我们想知道是否可以从策略本身注入本地化的异常/错误消息。

提前感谢!

编辑:关于设置的更多信息。我们有一个TechnicalProfile,它有一个DisplayWidget和一个ValidationTechnicalProfile。DisplayWidget用于输入&验证用户的电话/电子邮件和ValidationTechnicalProfile使用用户的所有信息对RestAPI进行最后调用以注册他/她。这个RestAPI调用输出就是我们想要本地化的。

据我所知,链接SO问题中的建议是,我们在DisplayWidget中集成另一个DisplayClaim(引用枚举(,并根据调用返回的ErrorCode将其更改为显示适当的代码。然而,根据我的理解,这还需要编辑API,以便只返回200和代码。此代码将指示结果的真实性质-成功或要显示的枚举之一的代码。

因此,我们的目的是检查是否有方法遵循策略的流程(中断注册/登录过程(,但同时本地化API显示的响应。

我们设法找到了解决方法,所以我在这里发布这篇文章,供其他可能对此感兴趣的人使用。

我们对本地化的限制是使用Phrase来管理我们的翻译,并希望CustomPolicy特定的翻译都在一个地方。我们的CD工作流程如下:

PolicyCommit->构建通过PS->发布变量替换和通过PS&策略上传

除非策略将API响应本地化,否则我们有以下选项来实现这一点:

  1. 将语言发送到API并让API返回相应的错误消息使用适当的语言。由于多种原因,我们不愿意这样做,但主要是因为我们还必须处理API中的不同区域等——这是政策本身所做的。

  2. 实际上,我们只调用了一个API,而且只使用了两条错误消息。因此,我们创建了一个包含两条将被本地化的错误消息的枚举。然后,我们使用了一系列InputClaimsTransformation,完成了以下操作:

对所有错误重复步骤1到3

1. CreateStringClaim (Create ClaimTypes for each of the error codes, holding the index of the error code in the enum)
2. GetMappedValueFromLocalizedCollection (Make the localized enum choose and hold the value of the required error code)
3. AddItemToStringCollection (Add the localized error from the enum to a StringCollection)
4. GenerateJson (Add the error codes StringCollection to the JSON payload to be sent to the API)

通过这种方式,策略对所有错误进行了本地化,我们将它们与请求一起发送给API。当发生错误时,API从策略中选择一条错误消息并将其发送回。由于我们的CD结构和Phrase集成,这种方法对我们来说比让API访问托管在云上的文件中的翻译要容易得多。

希望这能帮助到别人;如果有人需要,我也可以添加代码:(

最新更新