2016-12-07 3 views
0

Я следил за идеями в сообщении this. Я только что сделал несколько изменений, например, с использованием ядра ASP.net и фронтального угла Angular 2 на одном и том же порту с использованием аутентификации маркера на предъявителя jwt.Получение «invalid_token» при доступе к веб-API с ADAL.js

Я использую ADAL.js для аутентификации Azure AD, и этот процесс работает нормально. Я получаю свой токен от Azure AD и его получение в localstorage.

Когда я использую маркер, который при получении сохранить в локальном хранилище, чтобы позвонить своему API я получаю 401

вызов от углового 2 до WebAPI как находящиеся на одном порту.

var token = localStorage["adal.access.token.keye1b88e53-810a-474d-93af-bb98c956d01e"];  
     console.log(token); 
     let headers = new Headers({ 
      'Authorization': 'Bearer ' + token, 'Accept': 'application/json; odata.metadata=minimal' 
     }); 
     let options = new RequestOptions({ headers: headers }); 
     return this.http.get('https://localhost:44375/api/values', options) 
      .map((response: Response) => response.json()).subscribe((val) => { 
     console.log(val);}); 

Этот вызов возвращается с 401 с этим сообщением

Bearer ошибки = "invalid_token", error_description = "Маркер истёк"

Любые идеи приветствуются. Благодаря!

ответ

0

По умолчанию приобретенный токен будет истек через час. Согласно вашему сообщению об ошибке, ваш токен должен быть истек, каждый токен будет иметь отметку времени истечения срока действия, вы можете проверить ключ adal.expiration.key1b88e53-810a-474d-93af-bb98c956d01e в своем локальном хранилище за истекшее время.

На самом деле, если вы используете adal-angular модуль в приложении, как описание на его хранилище Github:

Любой код вызова службы вы, возможно, останется без изменений. Перехватчик Adal автоматически добавляет токены для каждого исходящего вызова.

Нам не нужно вручную устанавливать заголовок авторизации в запросах outcall. Кроме того, если вы состоите, вы можете попытаться использовать:

config.headers['Authorization'] = 'Bearer ' + localStorage.getItem("adal.idtoken"); 

И обновите маркер вручную.

Кроме того, вы можете проверить весь ключ/значение в локальном хранилище, созданное adal.js: enter image description here

+0

Я не использую adal-angular, как указано в примере. Поскольку adal-angluar не совместим с Angular-2. Мы используем Adal.js для аутентификации. Именно поэтому я устанавливаю заголовок авторизации с каждым исходящим вызовом. И даже если я буду обновлять токен и отправлять запрос, я все еще вижу ту же ошибку. – Pickle

+0

Теперь, когда я обновляю токен, я вижу 'Bearer error =" invalid_token ", error_description =" Аудитория недействительна "' – Pickle

+0

Это результат требования 'aud', не равного ожидаемому получателю. что вы используете для проверки? –

0

На конце Web API я изменил

app.UseJwtBearerAuthentication(new JwtBearerOptions 
     { 
      Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
      Audience = Configuration["Authentication:AzureAd:Audience"] 
     }); 

в

app.UseJwtBearerAuthentication(new JwtBearerOptions { 
       Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
       Audience = Configuration["Authentication:AzureAd:ClientId"], 
       TokenValidationParameters = new TokenValidationParameters { SaveSigninToken = true } 

      }); 
+0

Это сработало? Могли ли вы избавиться от сообщения об ошибке «invalid_token»? –

+0

Да, это изменение работает для меня. – Pickle

0

Вы также можете установить идентификатор приложения приложения AD как в Web API, так и в клиентском приложении как **clientId** и сделать su вы активируете **"oauth2AllowImplicitFlow": true,** в манифесте (доступен лазурный портал AD).

Смежные вопросы