Azure AD B2 C Локальная политика Ответ локализованного REST API - PullRequest
0 голосов
/ 08 апреля 2020

Это своего рода расширение этого вопроса здесь. У меня есть политика, которая вызывает REST API. API возвращает сообщение об ошибке, и это сообщение необходимо локализовать.

Один из способов - это, конечно, заставить API возвращать локализованное сообщение, но есть ли способ для самой CustomPolicy локализовать код ошибки? Согласно документам CustomPolicy, REST API может отправлять код ошибки вместе с кодом ошибки конфликта. Мы думали использовать этот код ошибки в качестве ключа и выбрать локализованное сообщение (из перечисления messageValue, указанного в ответе в ссылке).

Однако мы не можем захватить / обработать данные об ошибках возвращается API. Кажется, что политика сама обрабатывает коды ошибок, и мы хотели бы знать, возможно ли внедрить локализованные сообщения об исключениях / ошибках из самой политики.

Заранее спасибо!

Редактировать: A немного больше информации о настройке. У нас есть TechnicalProfile, который имеет DisplayWidget и ValidationTechnicalProfile. DisplayWidget используется для ввода и проверки телефона / электронной почты пользователя, а ValidationTechnicalProfile выполняет окончательный вызов RestAPI со всей информацией пользователя, чтобы зарегистрировать его / ее. Этот вывод вызова RestAPI - это то, что мы хотим локализовать.

Предложение в связанном вопросе SO, насколько я понимаю, заключается в том, что мы интегрируем еще один DisplayClaim (который ссылается на enum) в DisplayWidget, и в зависимости от Код ошибки, возвращаемый при вызове, измените его для отображения соответствующего кода. Однако, насколько я понимаю, это также потребует редактирования API, чтобы он возвращал только 200 вместе с кодом. Этот код будет указывать на истинную природу результата - успех или код для отображения одного из перечислений.

Поэтому наша цель состоит в том, чтобы проверить, есть ли способ следовать потоку Политики (прервать SignUp / SignIn), но в то же время локализуйте отображаемый ответ API.

1 Ответ

0 голосов
/ 15 апреля 2020

Нам удалось найти обходной путь к этому, поэтому я публикую это здесь для всех, кто может быть заинтересован в этом.

Нашим ограничением для локализаций было то, что для управления нашими переводами использовалась фраза хотел, чтобы CustomPolicy специфицировал переводы c в одном месте. Наш рабочий процесс с CD был следующим:

PolicyCommit -> Build Замена переменных через PS -> Release Замена переменных и замена локализованных строк через PS & Загрузка политик

Запрет политики локализовать ответ API, у нас были следующие возможности для этого:

  1. Отправка языка в API и возвращение API соответствующего сообщения об ошибке в соответствующий язык. Мы не хотели следовать этому из-за множества причин, но в основном потому, что нам также пришлось бы обрабатывать разные регионы и т. Д. c. в 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.

Надеюсь, это кому-то поможет; Я также могу добавить код на случай, если кому-то понадобится:)

...