В диалоговом окне согласия администратора запрашиваются разные разрешения, а затем запрашиваются

Я разрабатываю веб-приложение asp.net core .net 5, размещенное на лазурном сервере, и хочу предоставить нашим клиентам возможность единого входа.

В качестве справки я взял пример из https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/2-WebApp-graph-user/2-3-Multi-Tenant, где администратор AAD предоставляет разрешения приложению для всех пользователей в AAD.

В примере используется URL-адрес согласия администратора, описанный здесь:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-admin-consent#request-the-permissions-from-a- администратор каталога

В моем случае я просто хочу, чтобы пользователи входили в систему с учетной записью своей компании и читали свою электронную почту после входа в систему (никаких других данных профиля). Поэтому я подумал, что запроса областей "openid" и "email" будет достаточно. Но не имеет значения, какое значение области действия я предоставляю, диалоговое окно, представленное администратору, показывает другие запросы разрешений (выглядит как «профиль» и «offline_access» (?)):

Я создаю URL-адрес следующим образом:

      var state = Guid.NewGuid().ToString();
var currentUri = UriHelper.BuildAbsolute(
   httpContext.Request.Scheme,
   httpContext.Request.Host,
   httpContext.Request.PathBase);

var authorizationRequest = string.Format(
   "https://login.microsoftonline.com/organizations/v2.0/adminconsent?client_id={0}&scope={1}&redirect_uri={2}&state={3}", 
   Uri.EscapeDataString(this.microsoftIdentityOptions.ClientId),   
   Uri.EscapeDataString("openid email"),                           
   Uri.EscapeDataString(currentUri + "tenant/processcode"),        
   Uri.EscapeDataString(state));                 

Забавно то, что если администратор предоставляет доступ к приложению, и если я проверяю разрешения «корпоративного приложения» в AAD, я вижу именно те разрешения «электронная почта» и «openid», которые я изначально хотел:

Но это очень сбивает с толку администратора AAD, и я действительно хочу представить диалоговое окно, соответствующее моим запросам на разрешение.

2 ответа

Я объясню эти два момента:

  1. Это известная проблема. Когда вы используете конечную точку v2.0, даже если вы не добавляете область offline_access, она все равно будет отображаться на странице согласия администратора и в настоящее время не может быть удалена. Официальная документация , также объясняет это.

Это разрешение в настоящее время отображается на всех страницах согласия, даже для потоков, которые не предоставляют токен обновления (например, неявный поток). Эта настройка предназначена для сценариев, в которых клиент может начать в неявном потоке, а затем перейти к потоку кода, где ожидается токен обновления.

Если вы не хотите, чтобы область offline_access отображалась на начальной странице согласия администратора, вы можете использовать конечную точку v1.0. (Однако конечная точка 1.0 может запрашивать только статические разрешения)

      https://login.microsoftonline.com/{tenant-id}/adminconsent?client_id={0}&scope={1}&redirect_uri={2}&state={3}
  1. Если приложение использует OpenID Connect для входа в систему, оно должно запрашивать область. Объем включает profileобласть действия по умолчанию, что предусмотрено дизайном! Объем openidобъясняется на странице согласия администратора как: Позволяет пользователям входить в приложение со своими рабочими или учебными учетными записями и позволяет приложению видеть основную информацию профиля пользователя.

по умолчанию, как показано здесь , клиент запросит идентификатор openid и профиль:

              Scope.Add("openid");
        Scope.Add("profile");

Вот почему вы обычно видите вызов Clear(), чтобы очистить этот список областей по умолчанию, например:

              options.Scope.Clear();
        options.Scope.Add("openid");
        options.Scope.Add("email");
        options.Scope.Add("myscope");
Другие вопросы по тегам