Можно ли включить группы в токен JWT в случае неявного потока? - PullRequest
1 голос
/ 03 октября 2019

Привет! Я работаю над Azure AD и основным приложением .net. Я пытаюсь реализовать аутентификацию и авторизацию. Я настроил swagger с моим основным приложением .net. Я могу сделать аутентификацию, используя чванство. В настоящее время у меня есть около 100 групп, частью которых я являюсь. Я использую неявный поток грантов для проверки подлинности. Согласно документациям, которые я прошел,

Если существует более 5 групп, токен JWT будет включать в себя «hasgroups»: «true» и - в моем случае я могу видеть «hasgroups»: «true»в токене JWT.

Если группа синхронизируется с Azure AD с помощью Azure AD Connect, вы можете отобразить имя группы - В моем случае синхронизироваться с Azure AD с помощью Azure AD Connect, но я не могу видеть ни идентификаторы, ни имена.

У меня более 100 групп, поэтому из-за ограничения URL невозможно получить группы, когда мы используем неявный поток.

Кроме того, если у меня есть только бэкэнд-API, то в каком случае рекомендуется использовать поток авторизации? API ничего не будет знать о вызывающем приложении.

В неявном потоке будет только вызов Azure для получения токена доступа. В потоке авторизации будет два вызова: один для получения кода авторизации, а затем с использованием кода авторизации для получения токена доступа. Это моё понимание. Я не уверен, правильно ли я понял это или нет. Может ли кто-нибудь помочь мне понять выше два пункта? У меня есть некоторая путаница по поводу вышеупомянутых двух пунктов. Любая помощь будет оценена в этом отношении. Спасибо

Ниже моя реализация чванства.

 services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });

                c.AddSecurityDefinition("oauth2", new OAuth2Scheme
                {
                    Type = "oauth2",
                    Flow = "implicit",
                    AuthorizationUrl = swaggerUIOptions.AuthorizationUrl,
                    TokenUrl = swaggerUIOptions.TokenUrl,
                    Scopes = new Dictionary<string, string>
                    {
                        {"Read", "guid/.default" }
                    }
                });
                c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
                {
                        { "oauth2", new[] { "readAccess", "writeAccess" } }
                });
            });

В Configure,

  app.UseSwaggerUI(c =>
            {

                c.OAuthClientId(swaggerUIOptions.ClientId);
                c.OAuthClientSecret(swaggerUIOptions.ClientSecret);
                c.OAuthRealm(azureActiveDirectoryOptions.ClientId);
                c.OAuthAppName("Swagger");
                c.OAuthAdditionalQueryStringParams(new { resource = azureActiveDirectoryOptions.ClientId });
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });

1 Ответ

2 голосов
/ 03 октября 2019

Если у пользователя слишком много групп, их не будет в токене доступа. Ограничение меньше для неявного потока, так как токен возвращается в URL.

В этих случаях ваш сервер должен проверить членство в группах через Microsoft Graph API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...