【问题标题】:Azure AD B2C Custom Policy Localized REST API Conflict ResponseAzure AD B2C 自定义策略本地化 REST API 冲突响应
【发布时间】:2020-04-08 15:40:59
【问题描述】:

这是this question here. 的扩展我有一个调用 REST API 的策略。 API 返回错误消息,此消息需要本地化。

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

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

提前致谢!

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

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

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

【问题讨论】:

  • 嗨@vronzeur。如果将输出声明转换(例如 GetLocalizedMessage)添加到 REST API 技术配置文件,会发生什么情况。这是一个长镜头,因为我相信如果 REST API 返回409 Conflict,那么控制流将被“中断”并且不会调用输出声明转换。
  • 我们尝试过这种方式,但就像你说的那样,在 REST API 调用失败后,流程被中断,没有任何东西被调用。

标签: azure-active-directory azure-ad-b2c


【解决方案1】:

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

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

PolicyCommit -> Build 通过 PS 进行变量替换 -> 发布 通过 PS 和策略上传进行变量替换和本地化字符串替换

除非政策对 API 响应进行本地化,否则我们有以下选择来实现这一点:

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

  2. 我们实际上只调用了一个 API,也只使用了两条错误消息。因此,我们创建了一个枚举,其中包含两个将被本地化的错误消息。然后,我们使用了一个 InputClaimsTransformations 链,它执行以下操作:

对所有错误重复步骤 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 结构和短语集成,这种方法对我们来说比实际将翻译保存在云上托管的文件中以供 API 访问要容易得多。

希望这对某人有所帮助;如果有人需要,我也可以添加代码:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多