Azure AD возвращает маркер идентификатора без подписи при запросе обновления с использованием маркера обновления - PullRequest
0 голосов
/ 08 июня 2018

Я использую конечную точку Azure AD v1 для авторизации моего веб-приложения.

При первоначальной аутентификации я не получаю access_token, чтобы быть действительным токеном jwt.Однако я получаю id_token, чтобы быть действительным jwt, и acces_token, чтобы быть значением refresh_token, что выглядит странно.

enter image description here

Я могу вызвать свой веб-API с помощью id_tokenв качестве маркера на предъявителя.Все хорошо.

Теперь, когда срок действия id_token истек, я использую свой refresh_token для отправки следующего запроса на обновление токена. Я получаю неподписанный id_token в качестве ответа.Поскольку новый id_token не подписан, с помощью этого id_token я не могу получить доступ к веб-API.Я что-то упустил?

POST /token HTTP/1.1
Host: {authority}
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
client_id=mvc&
client_secret=secret&
refresh_token=AQABAAAAAADX8GCi6J
&scope=openid%20profile%20offline_access

Я использую следующую конфигурацию запуска для настройки аутентификации

services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddCookie(options =>
            {
                options.ExpireTimeSpan = TimeSpan.FromSeconds(1000);
                options.Cookie.Name = "mvcapplication";
            })
            .AddOpenIdConnect(option=>{
        options.Authority = "{aad v1 endpoint}";
                options.ClientId = "mvc";
                options.ClientSecret = "secret";
                options.ResponseType = "code id_token";
                options.ResponseMode = "form_post";
                options.SignInScheme = "Cookies";
                options.CallbackPath = "/Home/Index/";
                options.RequireHttpsMetadata = false;
                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;

                //Default Scopes
                options.Scope.Add("openid");
                options.Scope.Add("profile");
                options.Scope.Add("offline_access");
         });

1 Ответ

0 голосов
/ 11 июня 2018

Подводя итоги обсуждения в комментариях:

  • Используйте идентификатор клиента / идентификатор приложения или URI идентификатора приложения API в качестве resource при получении токенов доступа
  • Настройте API для принятия одного или обоих из вышеперечисленных в качестве действительной аудитории
  • Удаление GetClaimsFromUserInfoEndpoint предоставило действительный токен доступа

Дополнительные сведения о настройке проверки подлинности Azure AD можно найти вПриложение ASP.NET Core MVC (2.0) здесь: https://joonasw.net/view/aspnet-core-2-azure-ad-authentication.

Пример приложения также можно найти здесь: https://github.com/juunas11/aspnetcore2aadauth

...