2016-12-07 5 views
0

投稿にはthisのアイデアが続きました。私はちょうどいくつかの変更を加えました。ASP.netコアとAngular 2フロントを同じポート上で動作させ、jwtベアラトークン認証を使用するようにしました。ADAL.jsでWeb APIにアクセスすると「invalid_token」になる

私はADAL.jsを使用してAzure ADを認証していますが、このプロセスはうまくいくようです。私はAzure ADからトークンを取得していて、ローカルストレージに保存しています。私は私のAPIを呼び出すために、ローカルストレージに保存されてきたトークンを使用する場合

私はWEBAPI両方とも同じポートに常駐しているの角度2から401

コールを取得しています。

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

ベアラーエラー= "invalid_token" で戻ってくる、しましたerror_descriptionは=任意のアイデアが高く評価されている

"トークンが有効期限が切れています"。ありがとう!

答えて

0

デフォルトでは、取得したトークンは1時間で失効します。あなたのエラーメッセージによると、あなたのトークンは期限切れになっているはずです、各トークンは期限切れのタイムスタンプを持っています、期限切れのあなたのlocalstorageのadal.expiration.key1b88e53-810a-474d-93af-bb98c956d01eキーを確認することができます。実際

、あなたはそののGithubリポジトリ上の記述として、あなたのアプリケーションでadal-angularモジュールを使用している場合:あなたが持っているかもしれません

任意のサービス呼び出しコードは変更されません。 Adalのインターセプターは、すべての発信呼び出しに対して自動的にトークンを追加します。

アウトコールリクエストにAuthorizationヘッダーを手動で設定する必要はありません。また、あなたが構成している場合は、使用することができます:

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

あなたのトークンを手動で更新してください。

また、あなたがadal.jsによって作成されたローカルストレージにすべてのキー/値を確認することができます。 enter image description here

+0

私は例で述べたようにadal-angularを使用していません。副鼻腔は角2と適合しないため、 Adal.jsを認証に使用しています。そのため、すべての発信通話でAuthorizationヘッダーを設定しています。また、トークンを更新してリクエストを送信しても、同じエラーが表示されます。 – Pickle

+0

私は見ているトークンを更新するとき 'ベアラーエラー=" invalid_token "、error_description ="オーディエンスが無効です "' – Pickle

+0

これは受信者が期待しているものと等しくない 'aud'クレームの結果です。ランタイムとは何ですか?あなたは検証のために使用していますか? –

0

ウェブAPI側では、私は

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

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

を変更しました

ADアプリケーションのアプリケーションIDをWeb APIとクライアントアプリケーションの両方で同じに設定することもできます(**clientId**)。suあなたはマニフェストの**"oauth2AllowImplicitFlow": true,**を有効にしています(ADの利用可能な青い門)。

関連する問題