IdentityServer4: как показать экран согласия внешних поставщиков? - PullRequest
2 голосов
/ 17 апреля 2019

Совсем недавно начал использовать IdentityServer4 (IS4), играя с семплами и т. Д.

У меня есть настройка, в которой запускается IS4 (с использованием примера пользовательского интерфейса MVC), настроенный с Google в качестве внешнего поставщика. У меня также есть настройка API, а также клиент (веб-приложение MVC). При аутентификации, и пользователь нажимает «Google» в разделе «Внешний вход», он / она перенаправляется в Google, как и ожидалось. Однако после ввода имени пользователя и пароля я ожидал увидеть экран согласия Google, но вместо этого я перенаправлен обратно на экран согласия в IS4. Это почему? Разве конечный пользователь не должен давать согласие на доступ к его / ее информации профиля Google на странице, которая явно принадлежит Google (т. Е. HTTPS и сертификат Googles)?

Я признаю, что, поскольку мне также требуется согласие пользователя на доступ к моему API, у меня может появиться 2 экрана согласия (один для информации профиля из Google и один для доступа к API из моей собственной конфигурации IS4), но если я У меня не было API в моей настройке, и я просто хотел использовать IS4 в федеративной настройке для предоставления идентификаторов токенов. У меня не было бы необходимости получать согласие моего собственного API, и поэтому я ожидал бы увидеть только экран согласия от моих внешних провайдеров. (например, Google, Facebook, Twitter и т. д.).

Мой внешний провайдер настроен так:

services.AddAuthentication()
    .AddGoogle("Google", options =>
    {
        options.ClientId = "<my client id>";
        options.ClientSecret = "<my client secret>";
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
    });

Может ли кто-нибудь, пожалуйста, просветить меня: -)

Спасибо

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Из справки Google :

Чтобы настроить экран согласия вашего проекта и запросить подтверждение:

  1. Перейдите в консоль API Google Экран согласия OAuth страница.
  2. Добавьте необходимую информацию, такую ​​как название продукта и адрес электронной почты службы поддержки.
  3. Нажмите Добавить область действия .
  4. В появившемся диалоговом окне выберите области, которые использует ваш проект.Чувствительные области видят значок замка рядом с именем API.
    • Чтобы выбрать области для регистрации, вам нужно включить API, например, Drive или Gmail, из APIs & Services> API Library.
    • Вы должны выбрать все области, используемые проектом.
  5. Когда вы закончите добавлять данные на экран согласия OAuth, нажмите Отправить для проверки .
  6. A Требуется проверка Появится окно.
  7. Добавьте обоснование областей действия, контактный адрес электронной почты и любую другую информацию, которая может помочь группе с проверкой, затем нажмите «Отправить».

Примечание. Параметры экрана согласия в консоли задаются на уровне проекта, поэтому информация, указанная на странице экрана согласия, применяется ко всему проекту.

Итак, вам нужно отключить согласие вашего клиента в IdSrv и включить его в Google.

Кроме того, как описано в этот ответ ,

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

Как добавлено @ Mike Wilcox :

При включении чувствительных / ограниченныхобласть действия, если не подтверждено для добавленных областей, вы увидите экран не проверено во время потока согласия.Вы можете пройти, нажав advanced -> перейти к [app_name] (небезопасно)

Есть игровая площадка: https://developers.google.com/oauthplayground/, где вы можете проверить это.
Нажмите на значок настроек в правом верхнем углу, а затем установите флажок «Использовать свои собственные учетные данные OAuth» , чтобы ввести кредиты приложения.Вы можете добавить области и проверить там.

0 голосов
/ 17 апреля 2019

У вас нет контроля при перенаправлении на внешний idp, поскольку это делегированная аутентификация. Я не знаю, как Google реализовал их потоки OAuth, но могут быть причины, по которым экран согласия не отображается:

  • Вы не запрашиваете области, для которых требуется согласие пользователя
  • Пользователь уже дал согласие на доступ к его / ее информации для вашего клиента (вы должны быть в состоянии проверить это на страницах аккаунта Google)
  • Ваш клиент настроен на обход экранов согласия (это возможно в IDS4, установив для флага RequireConsent значение false, но я сомневаюсь, что вы можете сделать это в Google как сторонний OAuth-клиент)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...