Идентификаторы пользователей Azure изменили свой формат?

Добрый вечер, сотрудники Microsoft!

У меня есть служба мобильных приложений в Microsoft Azure, расположенная в южно-центральной части США, с именем CeneamApp.

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

поэтому я следовал книге Адриана Холла, чтобы создать идентификатор пользователя (https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter2/authorization/)with в следующем формате sid:{identifier}as описано здесь: (https://github.com/Azure/azure-mobile-apps-net-server/wiki/Understanding-User-Ids).

теперь весь мой идентификатор пользователя был изменен, и мой пользователь не может получить доступ к своим предыдущим данным, собранным ими, потому что каким-то образом поставщик или эмитент или что-то еще происходит, не позволяет мне получить идентификатор пользователя, как описано в вики команды проекта github (в предыдущем ссылка на сайт). поэтому вместо этого я получаю новый идентификатор пользователя, но, похоже, это случайное число:

Я добавляю скриншот основной части моего кода в моем бэкэнд-проекте, который я отлаживал, чтобы понять, что происходит, и мою фиктивную базу данных, где вы можете увидеть сохранение stable_id и новые предполагаемые стабильные_id в следующих двух строках.

введите здесь описание изображения

Отлаженный код, по-видимому, извлекающий новый идентификатор пользователя из FACEBOOK. Не могли бы вы подтвердить это изменение? потому что я не смог понять это изменение.

введите здесь описание изображения

Скриншот базы данных Dummy Database с потерянным идентификатором пользователя и новыми из базы данных других учетных записей

если у кого-то есть информация об этом странном поведении, я был бы признателен за то, чтобы просветить меня, потому что эта строка кода:

principal.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value;

раньше давал мне идентификатор пользователя в следующем формате: «sid: {идентификатор}», теперь формат показан на скриншоте.


person Enrique A. Pinelo Novelo    schedule 26.12.2019    source источник
comment
Кажется, что sid, который вы получаете сейчас, будет stable_sid. И вы установили параметр приложения с WEBSITE_AUTH_HIDE_DEPRECATED_SID на true на портале? Если у вас есть утверждение stable_sid (найденное с помощью ClaimUser.FindFirst(stable_sid)), то вы должны получить утверждение ClaimTypes.NameIdentifier, которое является sid старого стиля.   -  person Allen Wu    schedule 27.12.2019
comment
да, я делаю, результат все тот же. Раньше я получал sid:{identifier} до 22 декабря 2019 года, что, согласно документации, соответствует новому стилю для идентификаторов пользователей, служба моего приложения или серверная часть перестают предоставлять идентификаторы пользователей в формате, описанном ранее. Я все еще игнорирую причину.   -  person Enrique A. Pinelo Novelo    schedule 27.12.2019


Ответы (1)


Такая же ситуация здесь. Вот-вот выйдет в эфир и вдруг это. Интересно, что затронуто только одно мобильное приложение, расположенное в центре обработки данных в Великобритании. Другие 2 приложения, которые находятся в производстве, а также еще одно веб-приложение все еще в порядке.

Полное решение может быть предоставлено только командой Azure. Но у меня есть обходной путь и идея:

<сильный>1. Обходной путь. В базовом контроллере я читаю и анализирую токен из заголовка. Sid указан в теме токена. Код прост:

        string _userSid;
        public string UserSid
        {
            get
            {
                if (_userSid == null)
                {
                    KeyValuePair<string, IEnumerable<string>> auth_header = Request.Headers.FirstOrDefault(h => h.Key.Equals("x-zumo-auth", StringComparison.InvariantCultureIgnoreCase));
                    string token = auth_header.Value.FirstOrDefault();
                    if (!string.IsNullOrEmpty(token))
                    {
                        var jwtToken = new JwtSecurityToken(token);
                        if (jwtToken != null)
                        {
                            _userSid = jwtToken.Subject;
                        }
                    }
                }

                return _userSid;
            }
        }

Я использую его вместо того, чтобы получать это от ClaimPrinciple в соответствии с руководством. Я проверил, что код Mobile App Server делает очень похожую вещь.

<сильный>2. Идея. В мобильных приложениях Azure есть этот параметр: MobileAppsManagement_EXTENSION_VERSION рекомендуется установить значение latest. Я думаю, что если мы понизим его до предыдущей версии, он будет работать, пока Microsoft не найдет и не решит проблему. Единственная проблема в том, что я не знаю и не могу найти номер версии. Может кто знает и напишет сюда?

person Vladimir    schedule 09.01.2020