Интеграция .Net MVC с Azure Ad B2C только для регистрации и настраиваемая политика сброса пароля возвращает id_token как # фрагмент в URL-адресе

Я пытаюсь интегрировать приложение .NET MVC с Azure B2C.

В Azure B2C настроена настраиваемая политика для потока регистрации и сброса пароля.

После регистрации и сброса пароля я не могу получить токен на стороне сервера. Токен отправляется по URL-адресу в виде фрагмента #id_token. Нужно ли мне указывать что-либо в настраиваемой политике, чтобы изменить токен с фрагмента на запрос или form_post?

Пытался добавить метатег в файл RelyingParty PasswordReset.

 <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="OpenIdConnect" />      
      <InputTokenFormat>JWT</InputTokenFormat>
            <Metatag>
            <Item Key="response_types">id_token</Item>
            <Item Key="response_mode">query</Item>
            <Item Key="scope">email openid</Item>
            </Metatag>

Но xsd не смог разобрать файл со следующей ошибкой:

Элемент TechnicalProfile в пространстве имен http://schemas.microsoft.com/online/cpim/schemas/2013/06 "имеет недопустимый дочерний элемент" Metadata "в пространстве имен" http://schemas.microsoft.com/online/cpim/schemas/2013/06 '. Похоже, тег нельзя добавить непосредственно в файл проверяющей стороны.


person Nishank    schedule 10.06.2020    source источник
comment
Привет, если опубликованный ответ разрешает ваш вопрос, отметьте его как ответ, установив флажок. Это поможет другим найти ответы на свои вопросы.   -  person Raghavendra beldona    schedule 22.06.2020


Ответы (1)


Чтобы изменить фрагмент #id_token, вам необходимо установить значение параметра response_mode как «query» или «form_post» (по умолчанию).

После того, как пользователь завершит пользовательский поток, вашему приложению возвращается ответ с указанным параметром redirect_uri с использованием метода, указанного в параметре response_mode. Ответ один и тот же для каждого из предыдущих случаев, независимо от пользовательского потока.

Для получения дополнительной информации см. Документ .

Если вы хотите запросить токен доступа, перейдите через документ.

Убедитесь, что вы используете правильные элементы в проверяющей стороне. В RelyingParty есть элемент Metadata, а не метатег.

См. документ

person Raghavendra beldona    schedule 10.06.2020
comment
Спасибо, мне удалось получить токен на стороне сервера с помощью form_post. Однако после того, как пользователь прошел процесс регистрации, сеанс входа в систему в приложении .net отсутствует. Я надеялся, что Owin UseCookieAuthentication создаст сеанс входа в систему. Я вижу, что есть действующий Id_token, но нет файла cookie сеанса. - person Nishank; 11.06.2020
comment
Пожалуйста, поднимите новый вопрос о переполнении стека, так как это новый запрос - person Raghavendra beldona; 11.06.2020