Роли и группы объявлений Azure Заявки в JWT недоступны в .NetCore WebApi - PullRequest
0 голосов
/ 14 декабря 2018

Я надеюсь, что вы можете помочь мне со следующим, поскольку я искал решения повсюду, но, к сожалению, не смог найти ничего, что работает.Вкратце: я вижу заявки на группы и роли в полезной нагрузке JWT в браузере, но они недоступны для использования в моем .Net Core WebApi.

У нас есть приложение, работающее как два приложения Azure.сервисы: веб-приложение на Angular5 и WebApi в .net core 2.1.Мы используем Azure AD для аутентификации, которая работает нормально, и теперь мы также хотели бы использовать ее для авторизации на основе групп или ролей.

В веб-приложении мы используем библиотеку angular-oauth2-oidc с неявным потоком.

В Azure я установил для "groupMembershipClaims" значение "Все" и создал роль в манифесте приложения веб-приложения и назначил ему пользователей.Когда я просматриваю полезную нагрузку JWT в браузере, я вижу заявки на роли и группы:

    {
      "aud": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "iss": "https://sts.windows.net/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/",
      "iat": xxxxxxxxxx,
      "nbf": xxxxxxxxxx,
      "exp": xxxxxxxxxx,
      "aio": "xxx"
      "amr": [
        "pwd"
      ],
      "at_hash": "xx"
      "family_name": "xxx"
      "given_name": "xxx",
      "groups": [
        "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      ],
      "ipaddr": "xxx.xxx.xx.x",
      "name": "x",
      "nonce": "x",
      "oid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "roles": [
        "xxxUser"
      ],
      "sub": "xxx",
      "tid": "xxx",
      "unique_name": "xxx",
      "upn": "xxx",
      "uti": "xxx",
      "ver": "1.0"
    }

Однако, когда я хочу использовать роли или группы в моем WebApi, ClaimsPrincipal неесть утверждения: Заявки в WebApi .

Изначально я хотел авторизоваться на "sub", который также отсутствовал, основываясь на этом посте блога: https://leastprivilege.com/2017/11/15/missing-claims-in-the-asp-net-core-2-openid-connect-handler/ Я использовал:

    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

и / или

    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("sub");

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

Код в моем автозагрузке.cs выглядит следующим образом:

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = Configuration.GetSection("Authentication:Authority").Value;
            options.Audience = Configuration.GetSection("Authentication:Audience").Value;
        });

Я экспериментировал с различными параметрами TokenValidationParameters безрезультатно.

Любая помощь будет принята с благодарностью!

...